miniporgram-ci
我们可以通过 miniporgram-ci 这个包来上传小程序代码
比如新建文件 scirpts/upload.js
示例代码如下:
const path = require('path');
const {Project, upload} = require('miniprogram-ci');
const {version, description} = require('../package.json');
const {appid: appId} = require('../project.config.json');
(async () => {
const project = new Project({
appid: appId,
type: 'miniProgram',
projectPath: path.join(__dirname, '../'),
privateKeyPath: './private.key',
ignores: [
'.github',
'scripts',
'README.md',
'yarn.lock',
'node_modules/**/*'
]
});
const uploadResult = await upload({
project,
version,
desc: description,
setting: {
es7: true,
minify: true,
codeProtect: true,
minifyJS: true,
minifyWXML: true,
minifyWXSS: true,
autoPrefixWXSS: true
},
onProgressUpdate: console.log
});
console.log(uploadResult);
})();
我们需要在小程序中的公众平台的后台的
“开发” => “开发管理” => “开发设置” => “小程序代码上传”
下载上传秘钥,重命名为 private.key
和 禁用 “IP白名单” 功能
然后运行命令
node scripts/upload.js
GitHub Actions
Github 提供了 Github Actions 来出提供 CI/CD 和 自定义 workflow.
示例我们在 package.json
中的 scripts
中添加一行命令
{
"scripts": {
"mp:upload": "node scripts/upload.js"
}
}
然后创建 .github/workflows/upload_miniprogram.yml
文件,内容如下。
name: Upload MiniProgram
on:
push:
branches:
- main
pull_request:
types: ['labeled']
jobs:
upload:
if: ${{ github.ref == 'refs/heads/main' }} || contains(github.event.pull_request.labels.*.name, 'upload_miniprogram')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- shell: bash
env:
MP_PRIVATE_KEY: ${{ secrets.MP_PRIVATE_KEY }}
run: |
if [[ -z $MP_PRIVATE_KEY ]]; then
echo "##########"
echo ""
echo "Please set 'MP_PRIVATE_KEY' key in actions secrets"
echo ""
echo "##########"
exit 1
else
echo "$MP_PRIVATE_KEY" > private.key
fi
- uses: actions/setup-node@master
with:
node-version: '12.x'
- run: |
yarn
yarn build
yarn mp:upload
if: ${{ github.ref == ‘refs/heads/main’ }} || contains(github.event.pull_request.labels.*.name, ‘upload_miniprogram’)
这里标识当分支是名称 main
的时候,或者当 PR 包含 upload_miniprogram
label 的时候回出发上面的 upload
这个任务
MP_PRIVATE_KEY: ${{ secrets.MP_PRIVATE_KEY }}
有之前下载 private.key
是秘钥,所以 Git 应该 ignore 它。但是我们上传小程序的代码的时候需要使用,我们可以通过 GitHub 的 secrets 把秘钥的内容设置进去
然后我们 push main
这个分支就会出发我们的一个上传小程序代码的工作流
看着像是 taro 编译的时候会压缩
把 [upload.js](https://github.com/Jeff-Tian/weapp/blob/main/scripts/upload.js#L27) 的 minify 设置成 false 试试。
先手动 private.key 文件保存在本地,手动调用 upload.js 脚本测试下结果
使用这个,github action 显示成功,但实际失败了,报的错是:
require is not being used properly in 'MemberExpression'
实际上 yarn build 是成功了。请问这是为什么?
想看下 miniporgram-ci 来排查下原因的,但发现找不到源码……
更多报错详情:
https://github.com/Jeff-Tian/weapp/runs/4698669386?check_suite_focus=true