2025-08-29 09:51:02 +08:00
|
|
|
|
const fs = require('fs')
|
|
|
|
|
|
const ci = require('miniprogram-ci')
|
|
|
|
|
|
const path = require('path')
|
|
|
|
|
|
const projectPath = path.resolve(__dirname, '../')
|
|
|
|
|
|
const CI_DESC = process.env.CI_DESC
|
|
|
|
|
|
console.log('项目路径UNI_MODE', CI_DESC)
|
|
|
|
|
|
// 1. 读取 project.config.json
|
|
|
|
|
|
// 1. 确认文件路径
|
|
|
|
|
|
const projectConfigPath = path.resolve(__dirname, './project.config.json')
|
|
|
|
|
|
console.log('配置文件路径:', projectConfigPath)
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 读取原文件
|
|
|
|
|
|
const projectConfig = JSON.parse(fs.readFileSync(projectConfigPath, 'utf-8'))
|
|
|
|
|
|
|
|
|
|
|
|
// 3. 修改版本号(示例:1.0.0 → 1.0.1)
|
|
|
|
|
|
const versionParts = projectConfig.version.split('.')
|
|
|
|
|
|
versionParts[2] = String(Number(versionParts[2]) + 1)
|
|
|
|
|
|
projectConfig.version = versionParts.join('.')
|
|
|
|
|
|
console.log('版本号:', versionParts)
|
|
|
|
|
|
// 4. 写入前验证
|
|
|
|
|
|
try {
|
|
|
|
|
|
fs.accessSync(projectConfigPath, fs.constants.W_OK)
|
|
|
|
|
|
const newContent = JSON.stringify(projectConfig, null, 2)
|
|
|
|
|
|
fs.writeFileSync(projectConfigPath, newContent, 'utf-8')
|
|
|
|
|
|
console.log('版本号已更新为:', projectConfig.version)
|
|
|
|
|
|
} catch (err) {
|
|
|
|
|
|
console.error('操作失败:', err)
|
|
|
|
|
|
process.exit(1) // 非零退出码表示错误
|
|
|
|
|
|
}
|
|
|
|
|
|
// 获取所有小程序上传密钥文件
|
|
|
|
|
|
const privateList = fs.readdirSync(`${projectPath}/ci/privateKey`)
|
|
|
|
|
|
const uploadInfo = {
|
|
|
|
|
|
version: projectConfig.version,
|
|
|
|
|
|
desc: CI_DESC === 'test' ? '测试环境' : CI_DESC === 'prod' ? '生产环境' : '开发环境',
|
2026-01-30 09:54:26 +08:00
|
|
|
|
robot: CI_DESC === 'test' ? 2: 1,
|
2025-08-29 09:51:02 +08:00
|
|
|
|
}
|
|
|
|
|
|
const command = process.argv.slice(2)[0]
|
|
|
|
|
|
console.log('privateList', privateList)
|
|
|
|
|
|
privateList.forEach(item => {
|
|
|
|
|
|
console.log('item', item)
|
|
|
|
|
|
let appId = item.split('.')[1] // item: private.appId.key
|
|
|
|
|
|
// 创建项目对象
|
|
|
|
|
|
const project = new ci.Project({
|
|
|
|
|
|
appid: appId, // 小程序appid
|
|
|
|
|
|
type: 'miniProgram', // 类型,小程序或小游戏
|
|
|
|
|
|
projectPath: `${projectPath}/dist/build/mp-weixin`, // 项目路径
|
|
|
|
|
|
privateKeyPath: `${projectPath}/ci/privateKey/${item}`, // 密钥路径
|
|
|
|
|
|
ignores: ['node_modules/**/*'] // 忽略的文件
|
|
|
|
|
|
})
|
|
|
|
|
|
let ciFn = null
|
|
|
|
|
|
if (command === 'upload') {
|
|
|
|
|
|
ciFn = ci.upload({
|
|
|
|
|
|
project,
|
|
|
|
|
|
...uploadInfo,
|
|
|
|
|
|
setting: {
|
|
|
|
|
|
es6: true, // 对应小程序开发者工具的 "es6 转 es5"
|
|
|
|
|
|
es7: true, // 对应小程序开发者工具的 "增强编译"
|
|
|
|
|
|
minify: true // 是否压缩代码
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
} else if (command === 'preview') {
|
|
|
|
|
|
ciFn = ci.preview({
|
|
|
|
|
|
project,
|
|
|
|
|
|
setting: {
|
|
|
|
|
|
es6: true, // 对应小程序开发者工具的 "es6 转 es5"
|
|
|
|
|
|
es7: true // 对应小程序开发者工具的 "增强编译"
|
|
|
|
|
|
},
|
|
|
|
|
|
qrcodeFormat: 'image',
|
|
|
|
|
|
qrcodeOutputDest: `${projectPath}/ci/qrcode/${appId}_qrcode.jpg`,
|
|
|
|
|
|
onProgressUpdate: console.log
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
// 调用
|
|
|
|
|
|
ciFn
|
|
|
|
|
|
.then(res => {
|
|
|
|
|
|
console.log('执行成功', res)
|
|
|
|
|
|
})
|
|
|
|
|
|
.catch(error => {
|
|
|
|
|
|
console.log('执行失败', error)
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|