首页 > 其他分享 >在 Github Action 中多平台构建 Eletcron 应用

在 Github Action 中多平台构建 Eletcron 应用

时间:2022-08-25 18:46:26浏览次数:103  
标签:Github Windows Eletcron release Electron 构建 Action

众所周知,Electron 是一个开源的跨平台框架,它内部集成了 Node.js 环境和浏览器环境,让开发者可以使用 Web 技术来绘制客户端的 UI,同时拥有不错的 I/O 能力。   我们团队的产品 Eoapi 就使用了 Eletron 作为产品的基座,在发布时,需要针对 Windows、Mac 两个平台进行打包和构建,而 Mac 又分为 x86 以及 arm 两种处理器架构。   因此我们最开始需要准备三台电脑,用于构建三个平台的应用。   在本地打包,除了环境上的不便外,还会造成一些本土特色的问题,例如因为伟大的长城造成的网络问题。 因此我们希望用自动化的方式进行构建,由于我们的项目源码放在 Github 上,我们很自然会选用 Github Action 来进行这个工作。  

配置文件地址:https://github.com/eolinker/eoapi/blob/main/.github/workflows/release.yml 可以打开配合本文食用~
  首先我们要在项目的根目录中建一个.github 文件夹,其中有一个 workflows 文件夹,其中包含一个 release.yml文件,这个文件名可以随意定义。   在 release.yml 中使用的是 yml 语法,可以将它理解为另一种风格的 JSON,至少在表达力上,两者是近似的。如果需要详细了解,可以去看 GitHub Actions 的工作流程语法 - GitHub Docs  
 name: Release
 
 on:
   push:
     tags: 
       - 'v*.*.*'

  

我们定义的是通过 git tag 来触发这个自动化工作流如果需要,也可以定义成根据某个分支提交的事件来触发。   接下来是定义具体的工作流程,以下是稍微简化过的 Windows 环境构建,大致定义了基础环境的定义,比如 Windows 系统 + Node.js 16:  
 ......
 jobs:
   release:
     name: build and release Electron app
     runs-on: ${{ matrix.os }}
 
     strategy:
       fail-fast: false
       matrix:
         os: [windows-latest]
 
     steps:
       - name: Check out git repository
         uses: actions/[email protected]
 
       - name: Install Node.js
         uses: actions/[email protected]
         with: node-version: '16'
 
       - name: Release for Windows
         if: matrix.os == 'windows-latest'
         run: yarn release
         env:
           GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}

  

其中涉及的上下文可以参考官方文档:上下文 - GitHub Docs。   我们需要定义好一个 Electron-builder.json 放置在根目录下,这里面配置一下打包的基本信息,由于这跟 Github Action 关系不大,这里不详细描述,总之这是 Electron 构建时的一个必要文件,这个文件可能会依赖的其他文件,需要自己根据项目情况进行配置。例如***.mac.plist这类文件只给 MacOS 打包用的配置文件。 Windows 比较简单,基本只要定义好系统和 Node.js 版本,如果你在自己的 Windows 电脑上构建没问题,那么在 Github Action 上遇到问题的概率也不大。   我们在尝试 Github Action 上构建 Windows 应用,试了一两次也就成功了,难在 MacOS 平台的构建。   如果你希望发布后的 MacOS 应用,在用户安装时不会弹出不信任的警告、以及能够自动更新,那必须要进行签名。   需要去苹果开发者账号上下载相应的证书,在本地构建的时候,Electron 会自动去找本地的钥匙串中找合适的证。那么在 Github Action 这样的云端环境怎么办呢?   简单地说,分为以下两步:
  1. 需要事先用命令行工具或其他工具,将证书转成 base64 存放在 Github secrets 中。
  2. 在云端构建的时候,从 Github secrets 中取出 base64 字符串,解码后写入到运行时的环境变量中。
整个机制就是这样,运行时转换秘钥的语句如下:  
run: |
      CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
      echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH

  

我们的应用有两个证书和一个密钥,因此写起来比较繁琐,但关键点在上文中已经提及,就是将文件转成 base64 存放在 Github secrets 中,用时再取出。   具体的例子可以看:在用于 Xcode 开发的 macOS 运行器上安装 Apple 证书 - GitHub Docs,里面的说明不算特别详尽,但基本应有尽有了。   难度主要在于,在运行时需要临时转换、生成多个文件,涉及的环境变量较多,略微费力,其实逻辑并不复杂。 如果在构建过程中遇到问题,可以在线查看输入日志来排查:  

 

在本地构建时,Electron 会自动按照当前系统的架构打包,例如我用自己的MacBook M1 不用任何多余的配置就能构建出 arm 架构的应用。   但在 Github Action,由于 Github 提供的 MacOS 运行容器都是 x86,因此需要显式声明构建 arm 的应用,我们是这样通过构建命令指定的:  
 Electron-builder -m=dmg --arm64 -p onTagOrDraft

  

也就是说,在 Github Action 的 MacOS 环境中,我们需要运行两次不一样的构建命令,以此得到两个平台的安装包,生成一个 Draft Release。   发布后的效果如图:  

 

整个过程大体如此,具体的场景应用,可以参照我们目前的开源项目 Eoapi 的构建配置。       很感谢 Github Action 免费提供了这么一个运行环境。   Eoapi 是一款类 Postman 的开源 API 工具,它更轻量,同时可拓展。 项目地址https://github.com/eolinker/eoapi 文档地址https://docs.eoapi.io/?utm_source=BK0802 官网地址https://www.eoapi.io/ 如果你对于 Eoapi 有任何疑问或者建议,都可以去 Github 或者来这里找我,提个 Issue,我看到了都会及时回复的。    

标签:Github,Windows,Eletcron,release,Electron,构建,Action
From: https://www.cnblogs.com/eoapi/p/16625340.html

相关文章

  • Github不稳定的解决办法
    一段时间访问github总是不稳定,刷新一下页面就会出现无法访问的问题,一开始以为是网络有问题。。。后面让同事访问看看,他们都没问题,所以问题就出现在我的本地电脑上了。。。......
  • HuGo博客的搭建以及上传到GitHub
    按照步骤来我用的是windows操作系统1.下载Githttps://git-scm.com/2.下载GuGohttps://github.com/gohugoio/hugo/releases往下拖,选择对应的系统下载3.配置HuGo的......
  • Github+jsDelivr+PicGo搭建图床
    1.GitHub创建仓库,申请TokenSetting→DeveloperSettings→PersonalaccessTokens→PersonalaccessTokens→Generatenewtoken创建如图所示,输入名字和勾选r......
  • github打不开?推荐一个好用的插件
    自己电脑打不开github,想获取github上面的优质资源怎么办?百度有很多办法可以解决,比如改hosts,但是这种方式对于一些新手小白来说也是比较困难的在这里推荐一个插件,里面可以......
  • 解决办法:git错误 error: failed to push some refs to 'https://github.com/...
    今天提新分支代码发现这个错误,在网上尝试了很多未果。最后发现是项目没有分配开发权限,只是浏览者的权限。分下权限重新gitpush就好了。下面是有权限的时候解决方法:问题......
  • Attentional Factorization Machines: Learning the Weight of Feature Interactions
    动机本文是2017年IJCAI上的一篇论文。FM方法通过结合二阶特征交互来增强线性回归模型,它将这些特征交互一视同仁,给予它们一个相同的权重,但是并不是所有特征的交互都是有意......
  • 搭建Github图床
    准备一个GitHub账号,下载PicGo:链接1、新建github仓库新建GitHub仓库,注意仓库要设置成公开2、生成一个token密钥3、下载PicGo、配置在这里(opensnewwind......
  • 解决github推送错误 remote: Support for password authentication was removed on Au
    推送github仓库代码,输入完账号密码出现:remote:SupportforpasswordauthenticationwasremovedonAugust13,2021.remote:Pleaseseehttps://docs.github.com/en/......
  • 老梗新玩「GitHub 热点速览 v.22.34」
    作者:HelloGitHub-小鱼干不知道你是否和我有一样的烦恼,最近的流行梗当自己要用拿来造词时,就陷入了不知道咋“换壳”的尴尬地步。sao-gen-gen大大减少了你老梗新用的脑力......
  • 蚂蚁金服开源的这份SpringBoot笔记,曾在24小时内GitHub星标48k
    前言Spring的影响力想必就不用小编多说了,今天要跟大家说的是SpringBoot。SpringBoot作为目前Spring技术体系中炙手可热的框架之一,已经是开发者们的必备神器了。在实际......