Github Action 快速构建 Electron 应用

前言

在开发 Electron 应用时,比较耗时的部分应该是构建打包的过程,像用 electron-builder 这种打包工具来说,它会根据你要打包的系统来下载应用的系统镜像打包工具,由于这些镜像的源文件托管在 Github 上,且 nodejs 上做网络加速很困难,所以这个过程十分消耗时间。当我们换一台电脑,还要经历相同的打包环境的准备时间。

前段时间 Github 推出工作流功能,也就是 Github Actions,正好可以满足我们这种由于网络过慢导致准备环境成本高的问题。

Github Actions 基础概念

在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

这里主要有四个概念:workflow(工作流)、job(任务)、step(步骤)、action(动作)。

一个仓库可以有多个工作流,一个工作流可以有多个任务,一个任务可以有多个步骤,一个步骤可以有多个动作。

工作流文件存放在 .github/workflows/ 目录下,以 .yml 描述。

任务目前可以在三种系统下运行,用 runs-on 标注,包括:ubuntu-latest, windows-latest, macOS-latest

任务由事件触发,支持分支的 push、pull_request 事件,以及 cron 语法的时间任务触发,由 on 字段指定。

Github Actions 机器配置

那 Github Actions 的机器性能如何呢?

这里写了一个仓库,专门用来查看所有支持的操作系统的信息。

仓库地址:https://github.com/lecepin/github-actions-system-info

三个系统的信息如下所示:

┌─────────┬────────────┬───────────────────────────────────────────┐
│ (index) │    name    │                   info                    │
├─────────┼────────────┼───────────────────────────────────────────┤
│    0    │ '系统信息' │       'Ubuntu 5.4.0-1032-azure x64'       │
│    1    │  '处理器'  │ 'Intel® Xeon® Platinum 8171M 2.60GHz 2核' │
│    2    │   '内存'   │                   '6GB'                   │
│    3    │   '硬盘'   │                  '14GB'                   │
└─────────┴────────────┴───────────────────────────────────────────┘┌─────────┬────────────┬───────────────────────────────────────────────────────────┐
│ (index) │    name    │                           info                            │
├─────────┼────────────┼───────────────────────────────────────────────────────────┤
│    0    │ '系统信息' │ 'Microsoft Windows Server 2019 Datacenter 10.0.17763 x64' │
│    1    │  '处理器'  │         'Intel® Xeon® Platinum 8171M 2.60GHz 2核'         │
│    2    │   '内存'   │                           '6GB'                           │
│    3    │   '硬盘'   │                          '13GB'                           │
└─────────┴────────────┴───────────────────────────────────────────────────────────┘┌─────────┬────────────┬───────────────────────────────────────┐
│ (index) │    name    │                 info                  │
├─────────┼────────────┼───────────────────────────────────────┤
│    0    │ '系统信息' │         'Mac OS X 19.6.0 x64'         │
│    1    │  '处理器'  │ 'Intel® Xeon® E5-1650 v2 3.50GHz 3核' │
│    2    │   '内存'   │                '14GB'                 │
│    3    │   '硬盘'   │                '380GB'                │
└─────────┴────────────┴───────────────────────────────────────┘

构建诉求

应用打包构建的诉求比较简单,就是代码 push 到 master 后,能够进行构建,并且构建的产物可以进行下载。

构建产物,可以直接上传到 Actions 中的 Artifact 中。

编写工作流文件

在 .github/workflows/ 目录下创建,pack.yml 文件,内容如下:

name: Build Pack
on:push:branches:- master # master 分支 push 时触发工作流
jobs:pack: # 打包任务runs-on: windows-latest # 在 windows 系统中运行steps:- uses: actions/checkout@v2 # 下载仓库代码到工作流机器中- name: Install and Pack # 安装依赖并且进行构建run: |npm installnpm run pack- name: Upload file # 将构建产物进行上传uses: actions/upload-artifact@v2with:name: packs # 上传后的名字path: packs # 将 packs 目录进行上传

保存后,即可触发工作流执行,效果如下:

并且会把构建产物上传到工作流中,如下:

 支持多系统的打包

如果对 Electron 打多个环境的安装包,在 Github Actions 中可以直接用相应的系统进行打包,很方便。

如要构建 window 和 mac 的安装包,可以创建两个工作流文件:pack-win.yml、pack-mac.yml,把配置中的 runs-on 字段进行修改即可。

也可以做一个矩阵变量,来运行多个不同的工作流,如同时支持 mac 和 win 机器,配置如下:

name: Build Pack
on:push:branches:- master 
jobs:pack: runs-on: ${{matrix.os}}strategy:matrix:os: [windows-latest, macOS-latest] steps:- uses: actions/checkout@v2 - name: Install and Pack run: |npm installnpm run pack- name: Upload fileuses: actions/upload-artifact@v2with:name: packspath: packs 

效果如下: 

 两个系统构建的产物,会一起上传到 Artifact 中。

上传文件的过滤

由于打包出来的文件包括日志文件、源文件、解压文件等,而我们只需要安装文件,这里可以对上传的文件进行规则定义,如下:

    - name: Upload fileuses: actions/upload-artifact@v2with:name: packspath: |packs/*dmg # mac 安装包packs/*exe # window 安装包

可参考这个仓库:https://github.com/lecepin/tss-merge-to-mkv/blob/master/.github/workflows/pack.yml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「浏览器插件」网址小尾巴终结者

前言 在我们日常的开发调试中,会在 URL 上添加一些特殊的小尾巴 用来显示调试界面或者开启一些特殊功能,当你接触了越来越多的系统后,你需要使用的小尾巴就变得越来越多,记忆和使用成本非常大,以及含有小尾巴的网址 在…

什么是低代码?

低代码 是一种软件开发方法,可以减少手工编码的过程,尽可能快的交付应用程序。 低代码平台 是工具的合集,这些工具可以通过建模和图形界面来进行应用程序的可视化开发。低代码使开发人员可以跳过手工编码,从而加快了应用程序的开…

什么是 LOW-CODE ?

低代码平台的特征 可视化建模工具 使用可视化方法和模型创建应用程序比使用代码进行开发要快。具有可视化建模功能的低代码平台,使用内置的组件,以任何人都可读的形式表示任何信息,从没有技术技能的常规企业用户到专业开发人员。 开箱即用…

简简单单 上传下载

背景 我们经常会有手机向电脑传文件 或者 电脑像手机传文件的需求。 而通常的解决方案是:手机上安装一个聊天软件(如微信),电脑上安装一个聊天软件,然后自己给自己传输,然后进行下载。 这种方式是很麻烦的…

「VSCode插件」提效工具 - 快捷面板

前言 做为一个开发人员,在日常的开发过程中,经常会在 Terminal 中输入各种命令,如:npm i、npm start、git init、rm -rf、node_modules 等命令,看似方便,实则高频率的输入很烦人。那有什么方法可以把这些高…

VSCode摸鱼插件 — FreeWindow

背景 在一些不是很忙的时候,想高效利用下时间,看看书丰富一下自己,但是大庭广众下长时间看一本实体书,或者看手机的电子书,或者在电脑上看网页书都不太合适,显得自己很闲的样子,那该如何看起来…

在线生成文本图片 CFC函数计算版

百度云函数计算 CFC 运行环境。 使用 sharp 图处理(文档)。 使用 图片参数: widthheightrgba 文本参数: textfColorfSizefTopfLeft {HTTP触发器地址}?width1000&height300&fSize120&fColor%23d9333f&text奥利…

调试利器:浏览器 Logger

1. 前言 在一些业务系统中,由于集成的平台产物或工具较多,而这些产物的 log 不收敛,很多时候打开控制台就是满屏的 log,自己的 log 需要在满屏的 log 中查找,或者在 log 上加一些前缀用 Filter 去过滤,严重…

主动型页面性能利器:Page Status

1. 背景 当页面出现性能问题,如加载慢、页面卡顿等现象时,大多是用户主观上的感受。而要真正客观的去评测性能和定位问题原因,通常需要专业的前端同学通过 DevTools 中的 Performance 等工具来查看(如图 1 所示)&…

前端状态机:XState 首个中文文档上线了

XState 做为一个非常好用的前端状态机库,但官网文档却只有英文版,为了阅读体验,我这里翻译了中文版。 仓库地址:https://github.com/lecepin/xstate-docs-cn文档地址:https://lecepin.github.io/xstate-docs-cn/zh 由…

降低前端业务复杂度新视角:状态机范式

无论做业务需求还是做平台需求的同学,随着需求的不断迭代,通常都会出现逻辑复杂、状态混乱的现象,维护和新增功能的成本也变的十分巨大,苦不堪言。下图用需求、业务代码、测试代码做对比: 图中分了 3 个阶段&#xff1…

Mac 摸鱼神器

这是一个 Mac 系统的摸鱼应用,仿真了大多数的 Mac 系统黑屏故障。开启摸鱼功能后,可以给自己一段休息的时间~ 软件使用 Electron 开发,源码(欢迎 Star ⭐ ):https://github.com/lecepin/mac-fish 1. 主界…

前端状态机系列:SCXML与XState对应关系

1. 前置说明 这次再说明下自己对状态图的看法。状态图虽然有非常多的优势(参考上篇文章),如果你想使用,关于是否对整个旧项目进行全量状态图化,这里给一个适应范围是:项目中复杂的部分进行状态图建模是非常…

常用注入 Script 方法

1. 背景 如果你想在当前的页面,试一下某个 JS 工具库,而这个工具库恰好你没安装。(如 lodash)如果你想分享一段脚本给别人,而又不希望别人在执行的过程太过麻烦。(如你写了一段恢复复制和右键功能的脚本&a…

多年前的树莓派 B+ 重新工作

1. 前言 最近整理房间的时候,发现在一块大约在 2014 年购买的树莓派,看了下电路板,型号是 b,看了下官网的参数: CPU: ARM1176JZF-S 核心 700MHz 单核RAM: 512MB 确实有点太弱了。 最近刚好想做一个家用的文件 Serve…

create-react-app 使用代理做 mock

1. 背景 很多情况下,为了测试需要一些接口的 mock 场景,基于 create-react-app 生产的项目 好处在于它内置了这块代理的能力,给用户提供了很大的方便。 2. 代理方式 create-react-app 默认提供了两种方式,关联到 webpack-dev-s…

解决写文档对于图片边框的强迫症

1. 写文档的困扰 在写文档进行配图时,很多时候图片是白色背景的,会导致文章中的图片区域附近有大量空白的感觉,强迫症患者很难受。 目前语雀做的是很好的,可以给图片加边框或者阴影,而一些文档博客平台(C…

实现图片本地化 ServiceWorker + IndexedDB

1. 背景 在一些安全场景,或者一些本地化的场景(如本地化的 Markdown 记事本),如果有图片上传并需要查看的场景,在不上传到服务器的情况下,实现这个效果,通常是把图片 Base64 化,但编…

XState Viz 可视化和调试状态机

1. 前言 状态机的一大好处就是可以可视化状态,降低业务的理解成本和相互间的沟通成本。 目前 XState 官方提供的可视化工具已经做的很不错了,但用起来偏重,国内访问也比较慢。这边我再原基础上进行了优化,并增加了部分新功能&am…

国内高速前端 Unpkg CDN 替代方案

1. 背景 目前国内有很多 NPM 的 CDN,可以高速支持相关包文件的访问下载,如: BootCDN: www.bootcdn.cn七牛云: www.staticfile.org360: cdn.baomitu.com字节跳动: cdn.bytedance.com 但这些 CDN 并不全,很多 NPM 上的包 在这些 …