import minimist from 'minimist' import once from 'lodash/once' import { Obj, PkgJson } from 'src/type' import log from 'src/log' import { callCone } from 'src/cone' import { logError } from 'src/error' const prefix = 'def' export const isDefCloud = process.env.BUILD_ENV === 'cloud' const logDefBuildEnvs = once(() => { const keys = Object.keys(process.env) keys.forEach((key) => { if (key.indexOf('BUILD_') === 0) { log.info(prefix, key, process.env[key] || '') } }) }) const getDefBuildArgv = once(() => { let defBuildArgv: string[] = [] try { defBuildArgv = JSON.parse( (process.env.BUILD_ARGV as string) || '[]', ) as string[] } catch (err) { // } log.verbose(prefix, 'defBuildArgv', defBuildArgv) return defBuildArgv }) const getDefBuildArgs = once(() => { let defBuildArgs: Record = {} try { defBuildArgs = minimist(getDefBuildArgv()) } catch (err) { // } log.verbose(prefix, 'defBuildArgs', defBuildArgs) return defBuildArgs }) export type DefPublishType = 'assets' | 'tnpm' | 'webapp' export type DefPublishEnv = 'daily' | 'prod' export interface DefArgs { user: string gitGroup: string gitProject: string // 迭代分支 gitBranch: string gitCommitId: string taskId: string buildArgvStr: string buildArgv: string[] appId: string iterationId: string // 没啥用, 一直是 production workEnv: string publishType: DefPublishType | '' // 迭代版本号 version: string // site 应用专有字段 publishEnv: DefPublishEnv // site 应用专有字段, * publishPages: string // site 应用专有字段, 只有 prod 有值 prevStageBuildDist: string } export const getDefArgs = once((): DefArgs => { const defBuildArgs = getDefBuildArgs() const defArgs: DefArgs = { user: process.env.BUILD_USER || '', gitGroup: process.env.BUILD_GIT_GROUP || '', gitProject: process.env.BUILD_GIT_PROJECT || '', gitBranch: defBuildArgs.def_publish_devbranches || '', gitCommitId: process.env.BUILD_GIT_COMMITID || '', taskId: process.env.BUILD_TASK_ID || '', buildArgvStr: process.env.BUILD_ARGV_STR || '', buildArgv: getDefBuildArgv(), appId: defBuildArgs.def_work_app_id || '', iterationId: defBuildArgs.def_work_iteration_id || '', workEnv: defBuildArgs.def_work_env || '', publishType: (defBuildArgs.def_publish_type as DefPublishType) || '', version: defBuildArgs.def_publish_version || '', publishEnv: (defBuildArgs.def_publish_env as DefPublishEnv) || '', publishPages: defBuildArgs.def_publish_pages || '', prevStageBuildDist: defBuildArgs.def_prev_stage_build_dist || '', } log.verbose(prefix, 'defArgs', defArgs) return defArgs }) export const isDefSite = once(() => { const { publishType } = getDefArgs() return publishType === 'webapp' }) export const isDefSiteDev = once(() => { const { publishType, publishEnv } = getDefArgs() return publishType === 'webapp' && publishEnv === 'daily' }) export const getDefCdnPrefix = once(() => { let cdnPrefix = '' if (isDefCloud) { const { gitGroup, gitProject, version } = getDefArgs() if (gitGroup && gitProject && version) { const isDev = isDefSiteDev() const host = isDev ? 'dev.g.alicdn.com' : 'g.alicdn.com' cdnPrefix = `https://${host}/${gitGroup}/${gitProject}/${version}/` } } return cdnPrefix }) // DEBUG=true DAILY=true BUILD_ENV=cloud BUILD_USER=mock-zyy BUILD_GIT_GROUP=mock-test BUILD_GIT_PROJECT=mock-pc BUILD_GIT_COMMITID=mock-commit BUILD_ARGV='["--def_publish_type=webapp","--def_work_env=production","--def_publish_version=0.0.42","--def_publish_devbranches=0.0.42","--def_publish_env=daily","--def_publish_pages=*","--def_work_app_id=424242","--def_work_iteration_id=1634705"]' tnpm run build -- --debug export async function logDefBuild(pkgJson?: PkgJson) { if (!isDefCloud) { return } try { logDefBuildEnvs() // const defBuildArgs = getDefBuildArgs() const defArgs = getDefArgs() const res = await callCone({ method: 'post', urlPath: '/api/data/cli', isOld: true, data: { version: pkgJson?.version || '', user_id: defArgs.user, group: defArgs.gitGroup, project: defArgs.gitProject, branch: defArgs.gitBranch, commit_id: defArgs.gitCommitId, type: defArgs.publishType, work_env: defArgs.workEnv, publish_version: defArgs.version, app_id: defArgs.appId, iteration_id: defArgs.iterationId, def_publish_env: defArgs.publishEnv, publish_pages: defArgs.publishPages, def_prev_stage_build_dist: defArgs.prevStageBuildDist, }, }) log.verbose(prefix, 'done') } catch (err: unknown) { logError(err as Obj) log.verbose(prefix, 'err') } }