首先来说git action真心是个坑爹货,使用起来太费劲了,各种报错一大堆。
再加上electron这个更坑爹的东西,二者合璧要把你累死一层皮。
昨天经过反复测试,通过无数次的失败,查找,试验,再失败,最后重要搞成功了。
这里跟各位分享一下成功的经验。
1. electron exe文件的发布必须使用git action的windows平台。
为什么,因为你如果在linux平台上发布的话,你费了好大劲写workflow文件,终于调试到构建的那一步发现:需要装wine, 但是成功不了!完全是浪费时间!
2. 必须安装windows-build-tools 而且必须 vs2015版,否则electron构建必然不成功!
npm install --global --production windows-build-tools --vs2015
但是这里有个坑点: 它在安装python的时候,要么会卡在,要么会进入success无限死循环。
解决办法:
echo 'Closing installer. Return code: 3010.' > $env:TEMP\dd_client_.log
3. electron版本必须跟electron-builder版本匹配,否则构建exe一定不会成功!注意了!这个是关键!
报错一般都是这样的:
其他类型错误的解决方法,在我别的文章有介绍。
按照上面的方法,git action构建成功的样子是这样的:
最后附上我总结并测试成功的workflow文件:
name: Electron Build and Releaseon:workflow_dispatch:jobs:build-and-release:runs-on: windows-lateststeps:- name: Checkout Repositoryuses: actions/checkout@v2- name: Setup Node.jsuses: actions/setup-node@v4with:node-version: '16'- name: Install windows-build-tools run: | echo 'Closing installer. Return code: 3010.' > $env:TEMP\dd_client_.lognpm install --global --production windows-build-tools --vs2015- name: Install Dependenciesrun: |npm install --force- name: Build Electronenv:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}run: |npm run buildnpm run packapp - name: Find exe files and ziprun: |cd builddirdir *.exeCompress-Archive -Path .\*.exe -DestinationPath your-file-name.zip # 把build目录下的exe文件压缩成zip- name: Get package version # 通过package.json文件中的version字段获取发布版本号id: get_versionrun: echo "::set-output name=version::$(cat package.json | jq -r .version)"- name: Create Releaseid: create_releaseuses: actions/create-release@latest env:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own tokenRELEASE_VERSION: ${{ steps.get_version.outputs.version }}with: tag_name: v${{ env.RELEASE_VERSION }} # 使用 package.json 中的版本号release_name: Release v${{ env.RELEASE_VERSION }}draft: falseprerelease: false- name: Upload Release Assetsid: upload-release-assetuses: actions/upload-release-asset@latestenv:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} RELEASE_VERSION: ${{ steps.get_version.outputs.version }} with: upload_url: ${{ steps.create_release.outputs.upload_url }}asset_path: ./build/your-file-name.zip # 指明上面压缩步骤生成的zip文件的路径asset_name: your-final-release-filename-${{ env.RELEASE_VERSION }}.zipasset_content_type: application/zip