Files
afilmory/builder.config.ts
Innei 6d430faa9a feat: implement remote repository support for manifest updates
- Added functionality to push updated manifests to a remote Git repository after building.
- Introduced a Git token configuration in the builder settings to authenticate pushes.
- Enhanced the CLI to handle remote repository synchronization, including cloning and pulling updates.
- Updated the builder to return detailed results on whether updates occurred during the build process.
- Revised documentation to reflect new configuration options and usage instructions.

Signed-off-by: Innei <tukon479@gmail.com>
2025-06-28 13:34:35 +08:00

140 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import cluster from 'node:cluster'
import { existsSync, readFileSync } from 'node:fs'
import os from 'node:os'
import { inspect } from 'node:util'
import type { StorageConfig } from '@afilmory/builder'
import consola from 'consola'
import { merge } from 'es-toolkit'
import { env } from './env.js'
export interface BuilderConfig {
// 远程仓库的地址
repo: {
enable: boolean
url: string
// Git token for pushing updates back to the repository
token?: string
}
// 存储配置
storage: StorageConfig
// 构建器选项
options: {
// 默认并发限制
defaultConcurrency: number
// 支持的图片格式(可以覆盖默认的 SUPPORTED_FORMATS
supportedFormats?: Set<string>
// Live Photo 检测是否启用
enableLivePhotoDetection: boolean
// 是否启用进度显示
showProgress: boolean
// 是否在构建完成后显示详细统计
showDetailedStats: boolean
}
// 日志配置
logging: {
// 是否启用详细日志
verbose: boolean
// 日志级别:'info' | 'warn' | 'error' | 'debug'
level: 'info' | 'warn' | 'error' | 'debug'
// 是否将日志输出到文件
outputToFile: boolean
// 日志文件路径(如果 outputToFile 为 true
logFilePath?: string
}
// 性能优化配置
performance: {
// Worker 池配置
worker: {
// Worker 超时时间(毫秒)
timeout: number
// 是否使用 cluster 模式(多进程)而不是线程池
useClusterMode: boolean
// 每个 worker 内部的并发数cluster 模式下生效)
workerConcurrency: number
// Worker 数量
workerCount: number
}
}
}
export const defaultBuilderConfig: BuilderConfig = {
repo: {
enable: false,
url: '',
token: env.GIT_TOKEN,
},
storage: {
provider: 's3',
bucket: env.S3_BUCKET_NAME,
region: env.S3_REGION,
endpoint: env.S3_ENDPOINT,
accessKeyId: env.S3_ACCESS_KEY_ID,
secretAccessKey: env.S3_SECRET_ACCESS_KEY,
prefix: env.S3_PREFIX,
customDomain: env.S3_CUSTOM_DOMAIN,
excludeRegex: env.S3_EXCLUDE_REGEX,
maxFileLimit: 1000,
},
options: {
defaultConcurrency: 10,
enableLivePhotoDetection: true,
showProgress: true,
showDetailedStats: true,
},
logging: {
verbose: false,
level: 'info',
outputToFile: false,
},
performance: {
worker: {
workerCount: os.cpus().length * 2,
timeout: 30000, // 30 seconds
useClusterMode: true,
workerConcurrency: 2,
},
},
}
const readUserConfig = () => {
const isUserConfigExist = existsSync(
new URL('builder.config.json', import.meta.url),
)
if (!isUserConfigExist) {
return defaultBuilderConfig
}
const userConfig = JSON.parse(
readFileSync(new URL('builder.config.json', import.meta.url), 'utf-8'),
) as BuilderConfig
return merge(defaultBuilderConfig, userConfig)
}
export const builderConfig: BuilderConfig = readUserConfig()
if (cluster.isPrimary && process.env.DEBUG === '1') {
const logger = consola.withTag('CONFIG')
logger.info('Your builder config:')
logger.info(inspect(builderConfig, { depth: null, colors: true }))
}