Electron + GitHub Actions | 自动化流程详解(下)

自动化部署

上篇介绍了 Electron Forge 打包应用教程。在实际开发中,自动化是提升效率和产出质量的关键。本篇我们将详细介绍如何将构建和发布 Electron 应用的过程自动化。

代码挂在 GitHub 仓库上,如果有帮助,记得给仓库点个赞:RexWzh/Electron-demo

GitHub Actions 简介

GitHub Actions 是一个集成的 CI/CD 服务,通过创建 workflows,在代码提交后自动启动构建过程,测试代码,甚至部署到生产环境,极大地提高开发效率和部署频率。

更深入的自动化测试可以参考官方文档:

  • 在 Electron 应用程序上运行端到端自动化测试
  • 在无头 CI 系统上进行测试(如 Travis CI、Jenkins)

类似平台如 Jenkins、CircleCI、Travis CI 以及 GitLab Runner 等也有广泛的应用,本教程将专注于介绍 GitHub Actions。

使用限制

在使用 GitHub Actions 时,需要了解一些基本的使用限制和计费信息(参考文档)。

保存期限

默认情况下,GitHub Actions 生成的工作流日志和项目文件将保存 90 天,之后自动删除。不过,这个期限可以根据仓库的属性和用户的需要调整:

  • 公共仓库:对于托管在 GitHub 的公共仓库,使用 GitHub 托管的运行器完全免费,日志保存期限可以设定在 1 至 90 天之间。
  • 私人仓库:私人仓库可以根据账户的计划享受一定量的免费分钟数和存储空间。超出这些限制则需要支付额外费用,而日志的保存期限可以设定在 1 至 400 天之间。
并发限制

GitHub Actions 对并发作业的数量有一定的限制,这取决于用户的 GitHub 计划:

GitHub 计划标准托管运行器总并发作业macOS 最大并发作业GPU 最大并发作业
免费205N/A
专业版405N/A
团队60 / 10005100
企业500 / 100050100

可以在账号设置的billing-summary 中查看具体限制,比如

GitHub ProGitHub Free
无限制的公开/私有仓库无限制的公开/私有仓库
无限制的协作者无限制的协作者
3,000分钟/月 的 GitHub Actions 使用时间2,000分钟/月 的 GitHub Actions 使用时间
2GB 的 Packages 存储空间500MB 的 Packages 存储空间
180 核心小时的 Codespaces 计算时间120 核心小时的 Codespaces 计算时间
20GB 的 Codespaces 存储空间15GB 的 Codespaces 存储空间
社区支持N/A

注:用 GITHUB 学生包白嫖的 4$/月的 Pro 会员。

自动构建的配置

为了提高工作流程的可读性并简化脚本配置,我们选择使用 npx electron-forge make 命令来执行构建任务,而不是在 package.json 中配置的 npm run make

注意事项

在设置 forge.config.js 文件时,特别是配置 makers 字段,如果指定了特定平台的构建目标,如仅限 Linux:

makers: [{name: '@electron-forge/maker-zip',platforms: ['linux'],}
]

这样的配置在尝试在 macOS 上执行构建时可能会引发错误。为了避免这种情况,在多平台构建场景下,建议不要指定 platforms 字段,或适当调整该配置,甚至可以考虑删除该字段。

macOS 平台的 GitHub Actions 示例

下面是一个工作流示例,在 macOS 平台上针对不同架构(x64 和 arm64)及目标格式(DMG 和 ZIP)进行构建:

name: macOS Buildon:push:branches:- mainpull_request:branches:- mainjobs:build-macos:runs-on: macos-lateststrategy:matrix:arch: [x64, arm64]target: [dmg, zip]steps:- name: Checkout codeuses: actions/checkout@v3- name: Set up Node.jsuses: actions/setup-node@v3with:node-version: '20'- name: Install Python 3.11.4uses: actions/setup-python@v4with:python-version: '3.11.4'- name: Install dependenciesrun: npm install- name: Build applicationrun: npm run build- name: Package application for macOS ${{ matrix.arch }} ${{ matrix.target }}run: npx electron-forge make --platform=darwin --arch=${{ matrix.arch }} --targets="@electron-forge/maker-${{ matrix.target }}" --icon=public/avatar- name: Upload Artifactsuses: actions/upload-artifact@v3with:name: electron-app-${{ matrix.arch }}-${{ matrix.target }}path: ${{ github.workspace }}/**/make/**/*.${{ matrix.target == 'dmg' && 'dmg' || 'zip' }}

构建顺利的话,在工作流底部能看到产出文件

20240511040008

常见错误及解决方案

在首次编写和测试工作流脚本时,可能会遇到如下构建错误:

✔ Finalizing package
✖ Making a dmg distributable for darwin/arm64 [FAILED: Cannot find module 'appdmg']
✔ Packaging for arm64 on darwin

根据官方 Issue “Cannot find module ‘appdmg’”,这是由 GitHub 的 macOS 镜像配置引起的。解决这一问题的方法包括使用指定版本的 macOS 容器,或更改默认的 Python 版本,如本示例中所采用的后者方法。

类似可根据需要修改为 Windows 和 Linux 平台的脚本,在配置这些脚本时,Python 的这一步可以省略。

自动发布

使用 Electron Forge 的官方插件发布到 GitHub 是一种简单且高效的方式。

关联文档:

  • 官方教程 Publishing and Updating
  • GitHub 插件:https://update.electronjs.org
  • 其他平台:官方插件 Publishers
设置 GitHub 令牌

首先,需要在 GitHub 创建一个个人访问令牌(Personal Access Token),以授权 GitHub Actions 自动发布应用。可以通过以下链接创建新的访问令牌:Create New Token。

20240511045447

创建时,请确保至少启用以下权限:

  • Contents: 允许访问仓库内容,提交,分支,下载,发布和合并。

GitHub Token Permissions

在 GitHub Actions YAML 配置文件中设置 GITHUB_TOKEN 环境变量,以使用这个令牌。

配置自动发布

使用 Electron Forge 的 GitHub Publisher 插件可以简化发布过程。首先,需要安装这个插件:

npm install --save-dev @electron-forge/publisher-github

接着,在 package.json 中添加相应的脚本来支持自动发布:

"scripts": {"start": "electron-forge start","package": "electron-forge package","make": "electron-forge make","publish": "electron-forge publish"
},

forge.config.js 文件中配置发布选项:

module.exports = {publishers: [{name: '@electron-forge/publisher-github',config: {repository: {owner: 'github-user-name',name: 'github-repo-name'},prerelease: false,draft: true}}]
}

在 GitHub 中创建 Release 的这两个选项 draftprerelease

  • Draft 指一个还未完成的 Release。当你创建一个草稿 Release 时,它不会对你的用户公开显示,只有拥有仓库写权限的用户可以看到和编辑它。这允许你或你的团队在公开之前仔细审查和完善发布内容。
  • Prerelease 用于标识尚未完全稳定、可能还在测试或开发中的 Release。尽管它是公开的,用户可以看到并下载,但通过标记为预发布,你可以明确告知用户这不是最终的稳定版本,可能还存在一些未解决的问题或需要进一步测试。
添加仓库信息

package.json 中添加或更新以下信息,确保项目描述和仓库信息正确无误:

"author": "Rex Wang",
"description": "An electron demo with vite and vue3",
"repository": {"type": "git","url": "https://github.com/rexwzh/electron-demo.git"
},
执行发布

设置好环境变量后,使用以下命令推送更新并自动发布:

export GITHUB_TOKEN=github_xxxxxx
npx electron-forge publish --platform=darwin --arch=arm64 --targets="@electron-forge/maker-zip" --icon=public/avatar

当然,这些在命令行执行的操作,都可以在 GitHub Actions 中配置,实现自动化发布。参考代码:Electron-demo。

配置自动更新

Electron 提供了一个 autoUpdater 模块,用于获取和安装更新。为了简化自动更新的实现,Electron 社区提供了一个实用的模块 update-electron-app,它自动配置 autoUpdater 来使用 update.electronjs.org 服务。

首先,需要安装 update-electron-app 模块:

npm install update-electron-app --save-dev

在主进程文件 main.js 中,引入并初始化 update-electron-app

const { updateElectronApp } = require('update-electron-app')
updateElectronApp()

该函数调用将配置 autoUpdater,以自动从与项目的 package.json 中的 "repository" 字段匹配的 URL 检查更新。

相关文档:

  • 官方 autoUpdater 文档:autoUpdater
  • update-electron-app 项目地址:update-electron-app on GitHub

以上,代码细节可以查看:RexWzh/Electron-demo

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

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

相关文章

MQTT学习(一)

MQTT是一种与HTTP类似的应用层协议。 在某些物联网应用中,MQTT优于HTTP。 首先,HTTP是用于客户端服务器计算的以文档为中心的请求-响应协议。 HTTP是万维网的基础,但它不是专门为机器之间通信而设计的。 MQTT是一种机器对机器、以数据为中…

机器学习在数据分析中的应用:探索未来趋势

引言 数据分析是机器学习应用最广泛和最成熟的领域之一。随着大数据时代的到来,企业和组织正越来越多地利用机器学习技术来从海量数据中提取有价值的洞察。在本博客中,我们将探讨机器学习在数据分析中的几个关键方向、场景和应用实例。 数据分析的方向…

Flutter for Web:跨平台移动与Web开发的新篇章

Flutter是Google推出的一款开源的UI工具包,用于构建高性能、高保真度的跨平台应用程序。Flutter最初专注于移动平台,但随着Flutter for Web的推出,它也扩展到了Web开发领域。本文将深入解析Flutter for Web的架构、核心概念、开发流程、性能优…

ALOHA多相机Realsense配置以及数据采集

简介 在诸多模仿学习的工作中,均使用到多个Realsense相机作为数据输入端。本文探讨多个Realsense的ros节点启动。 环境配置 librealsense realsense_ros#python h5py opencv-python多相机启动 ALOHA工程仅需要彩色图像进行输入。因此需要只保留彩色图像&#xf…

树与图的一些计数问题(图论学习总结部分内容)

文章目录 前言七、树与图的一些计数问题(偏数学)容斥原理知识点例题 e g 1 : eg1: eg1: 完全子图染色问题 e g 2 : eg2: eg2: D A G DAG DAG计数 生成树计数知识点例题 环计数问题练习题 前言 由于图论学习总结内容过多,全放在一篇博客过于…

QLineEdit文本长度和框宽度的比较问题

开发环境 操作系统: 银河麒麟V10SP1qt版本 : 5.12.12背景 测试同事提出,QLineEdit中设置的占位符(由setPlaceholderText函数设置)文本能完全显示时不要显示tips,不完全显示时要显示tips,这样显得简洁。 想了想逻辑上比较好实现,那就是占位符文本长度大于QLineEdit宽度就显示…

Python pyqtgraph库:高效可视化数据的利器

更多Python学习内容:ipengtao.com 在数据科学和工程领域,数据可视化是一项非常重要的任务。Python pyqtgraph库是一个功能强大的数据可视化工具,可以帮助用户快速、高效地可视化各种类型的数据,包括实时数据、大数据集和3D数据等。…

PostgreSQL-常用函数和操作符-2

0. WITH 在 PL/pgSQL 中,WITH 子句通常用于创建一个临时结果集,这个结果集在执行 SQL 查询时使用。这个临时结果集通常被称为一个公共表表达式(Common Table Expression, CTE)。CTE 允许您在查询中引用它,就像引用一个…

Kerberos-梳理

服务端: yuminstall-ykrb5-server vim/var/kerberos/krb5kdc/kdc.conf [kdcdefaults] kdc_ports=88 kdc_tcp_ports=88 [realms] HADOOP.COM={#master_key_type=aes256-cts acl_file=/var/kerberos/krb5kdc/kadm5.acl dict_file=/usr/share/dict/words admin_keytab=/var/kerbe…

英伟达解码性能NVDEC

如果你能打开官网,请看这里: NVDEC Application Note 下面是摘录:

STL---排序模板参数

map 对map进行排序 首先一定要注意map模板类的第三个模板参数&#xff0c;这个参数决定元素按键值升序或者降序在map中的存储方式&#xff1a; 默认&#xff1a;less<key>升序----- < -----第一个小于取第一个 可设置&#xff1a;greater<key>降序-------…

VC 编程开发中的 封装类 :log日志类 和SQL server 操作类 源代码

VC 编程开发中的 封装类 &#xff1a;日志类 和SQL server 操作类 源代码 在VC&#xff08;Visual C&#xff09;开发中&#xff0c;日志文件输出是一个至关重要的环节&#xff0c;它对于程序调试、问题排查以及系统监控等方面都具有不可替代的作用。以下是对日志文件输出在VC开…

ASP.NET仪器设备管理系统设计与实现

摘 要 文中以某中小型企业的设备管理为例&#xff0c;对设备管理系统的设计与应用进行研究&#xff0c;旨在通过设备管理系统提高内部设备的利用率及实现其最大的经济效益。文中首先对设备管理的现状及其重要性进行了分析&#xff0c;分析实现设备管理信息系统的必要性与可行…

如何在windows server下安装mysql5.7数据库,并使用Navicat Premium 15可视化工具新建数据库并读取数据库信息。

如何在windows server下安装mysql5.7数据库&#xff1f; MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/点击↑&#xff0c;然后选择对应版本和平台↓下载 将下载后的安装包放入固定目录&#xff08;这里以D:…

AI学习指南概率论篇-随机变量和随机过程

AI学习指南概率论篇-随机变量和随机过程 随机变量和随机过程是概率论中重要的概念&#xff0c;也是在人工智能领域中经常应用的概念。本文将介绍随机变量和随机过程的概述&#xff0c;它们在AI中的使用场景&#xff0c;定义和意义&#xff0c;以及相关的公式讲解&#xff0c;并…

蓝桥杯备战17.bitset砝码称重

P2347 [NOIP1996 提高组] 砝码称重 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) bitset 用来存储二进制 #include<bits/stdc.h> using namespace std; #define endl \n #define int long long const int N 2e510; int w[] {0,1,2,3,5,10,20}; signed main() {std…

电商选品的数据是可以用爬虫进行采集的吗?

在电子商务领域&#xff0c;选品是一个至关重要的环节&#xff0c;它直接影响到商家的销售业绩和市场竞争力。为了做出更明智的选品决策&#xff0c;商家需要获取大量的市场数据和产品信息。那么&#xff0c;电商选品的数据是否可以通过爬虫进行采集呢&#xff1f; 爬虫在电商数…

更适合户外使用的开放式耳机,佩戴舒适音质悦耳,虹觅HOLME NEO体验

随着气温的逐渐升高&#xff0c;不管是在室内工作娱乐&#xff0c;还是到户外运动健身&#xff0c;戴上一款合适的耳机都会帮我们隔绝燥热与烦闷&#xff0c;享受音乐与生活。现在市面上的耳机类型特别多&#xff0c;我很喜欢那种分体式的开放耳机&#xff0c;感觉这种耳机设计…

亚信安慧AntDB:颠覆传统的开放创新数据库生态

亚信安慧AntDB是亚信科技自主研发的一款颠覆传统的开放创新数据库产品。它引入了分布式架构&#xff0c;通过数据的弹性伸缩、 容灾容错和负载均衡等技术手段&#xff0c;实现了高性能、高可靠性和高可扩展性的数据存储和处理能力。不仅如此&#xff0c;亚信安慧 AntDB还具备…

从头开始学Spring—02基于XML管理bean

目录 1.实验一&#xff1a;入门案例 2.实验二&#xff1a;获取bean 3.实验三&#xff1a;依赖注入之setter注入 4.实验四&#xff1a;依赖注入之构造器注入 5.实验五&#xff1a;特殊值处理 6.实验六&#xff1a;为类类型属性赋值 7.实验七&#xff1a;为数组类型属性赋值…