GitHub Actions 实战Electron打包发布

介绍

GitHub Actions 是Github推出的持续集成服务,针对公共仓库免费。由于本文并非GitHub Actions的教程,只是一篇实战经验文章,对GitHub Actions不熟悉的朋友建议花十分钟看一看阮一峰写的GitHub Actions 入门教程

前言

每发布一个版本就需要手动build,手动发布release太过麻烦,进行自动构建主要为了学习和减轻重复工作量。相信到这里读者至少明白了workflow的基本语法和步骤,本文没有使用action-electron-builder动作仓库的内容来进行构建,原因就是它不能满足我的需求,下文中会有说到。

不兼容说明

  1. 这里我使用的是vue-cli-plugin-electron-builder插件进行开发,插件作者进行了一层封装就是导致不兼容action-electron-builder动作仓库的原因
  2. 最初我打算使用create-release搭配upload-release-asset,使用这两个动作联合发布,但是最后发现electron-builder自带了publish参数进行发布,故放弃使用联合动作。 但是publish配合Github Actions有BUG,这就是第二个不兼容的地方,需要手动解决。

正文

首先给出我的workflow文件,然后我再进行详细介绍,为什么会这样写。

name: Build/release

on:
  push:
    tags:
      - 'v*.*.*'

jobs:
  release:
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        os: [windows-2019]

    steps:
      - name: Check out Git repository
        uses: actions/checkout@v1

      - name: Install Node.js, NPM and Yarn
        uses: actions/setup-node@v1
        with:
          node-version: 10
      - name: Build/release Electron app
        env:
          GH_TOKEN: ${{ secrets.github_token }}
        run: |
          yarn install
          (Get-Content "node_modules/builder-util/out/util.js").Replace("^[\w","^[.\w")| out-file "node_modules/builder-util/out/util.js"
          yarn electron:build --publish always
  • name: Action名称,自定义
  • on:Action触发时机,此处表示在打tag标签时,且标签名称为v*.*.*时触发
  • job: 定义工作
  • release: 工作id(名称)
  • runs-on: 在什么平台上允许,取值为下面的数组参数
  • strategy: 多个作业环境,此处我只打包了windows的应用,所以只要windows-2019
  • steps: 步骤

    • actions/checkout@v1:使用actions/checkout@v1动作仓库,该动作仓库作用是检出代码到本地
    • actions/setup-node@v1:该动作仓库用于安装node、npm和yarn
    • Build/release Electron app:这是重点,首先定义环境变量GH_TOKEN用于给electron-builder发布用,run表示需要运行的命令,第一行和第三行都明白,主要是第二行(Get-Content "node_modules/builder-util/out/util.js").Replace("^[\w","^[.\w")| out-file "node_modules/builder-util/out/util.js"

它的作用是修改node_modules/builder-util/out/util.js文件中的^[\w^[.\w。至于为什么这么做可以参考electron-builder issues,这是一个bug。 虽然在electron-builder v22.0.0中已经修复,但是我的项目使用vue-cli-plugin-electron-builder插件进行开发,对electron-builder的依赖管理在该插件中,我无法更新版本。

  • 完成
  • 针对electron、vue、react、Maven等任何项目都是相同的思路。

触发自动构建步骤

  1. 修改package.json中的version值
  2. 保存(清空)git的工作区,git push一下
  3. 使用git tag v*.*.*打一个标签
  4. 使用git push --tags上传标签到远程
  5. github会自动开始你的任务脚本。
  6. 如果需要删除tag:

    • 本地:git tag -d v*.*.*
    • 远程: git push --delete origin v*.*.*

更新

2019年12月05日更新:
electron-builder中也提到了我遇到得这个问题,详情看这里。本文的有效性和该补丁的时效性相同,一旦vue-cli-plugin-electron-builder中的electron-builder更新到V22版本之上本文自动失效。

4 评论

  1. Dexter Cai 2022年04月07日 回复
    关于electron-builder依赖受vue-cli-plugin-electron-builder管理的问题,可以通过修改package.json来解决。形如: "devDependencies": { "@vue/cli-plugin-babel": "~4.5.0", "@vue/cli-plugin-eslint": "~4.5.0", "@vue/cli-service": "~4.5.0", "@vue/compiler-sfc": "^3.0.0", "babel-eslint": "^10.1.0", "electron": "^13.0.0", "electron-devtools-installer": "^3.1.0", "eslint": "^6.7.2", "eslint-plugin-vue": "^7.0.0", "vue-cli-plugin-electron-builder": "~2.1.1" }, "resolutions": { "vue-cli-plugin-electron-builder/electron-builder": "^23.0.3" },
    1. Curtion [博主] 2022年04月07日 回复
      回复 Dexter Cai: 谢谢指导,原来有一个resolutions字段可以用来指定子依赖。
      1. Dexter Cai 2022年04月07日 回复
        回复 Curtion: 也要感谢你的文章,今天用上了。
  2. 姜辰 2019年12月08日 回复
    既然没人,我就来仰望一下吧。