GitHub Action 是一套发放给 GitHub 库房所使用的 CI/CD 专用工具。它能够自动化技术、自定与执行软件开发工作步骤。本文详细介绍如何运用 GitHub Action 自动化技术公布 npm 包版本号和 GitHub release。
CHANGELOG
作为一个开源系统库房,CHANGELOG
修改记录是不可缺少的。还有很多专用工具能够形成 CHANGELOG.md
,接下来我们应用@changesets/cli
。
组装
pnpm i @changesets/cli
应用
实行下列指令开展复位,它会在你新项目网站根目录生成一个.changeset
文件夹名称,里边包括一个环境变量和 README。
pnpm exec changeset init
每一次修改代码以后,运作下列指令:
pnpm exec changeset
这儿会提示我们在选择此次变更的种类。不理解的可以自己检索 npm semver 版本信息标准。
简单来说 patch
是小一点 bug 改动,不受影响以前作用这个小 feature 作用提升可以选择 minjor
,major
意味着包括了 breaking change 大版本信息变化,例如 1.0.0 到 2.0.0。
键入此次改动的信息,一路回车键就可以了。
此刻它会在.changeset
文件夹名称生成一个任意姓名的md 文档,包括你刚才递交的信息。
下面形成版本信息。
pnpm exec changeset version
这一指令会载入你刚才产生的 changeset 文档,载入 CHANGELOG.md
,并把 package.json
里的版本信息依照你选择了的种类进行升级。
以上就是关于 changeset
的一体化使用方法。
release.yml
下面逐渐建立 GitHub Action 的自动化脚本。
在您的新项目网站根目录创建一个.github
的文件夹名称,里边再创建一个workflows
的文件夹名称,创建一个release.yml
文件。
文档内容如下,我一一讲解:
# 整个过程的名称
name: Release
# 开启机会,在 main 支系 push 实际操作开启
on:
push:
branches:
- main
# 默认设置shell
defaults:
run:
shell: bash
# 每日任务,界定个changelog 任务
jobs:
changelog:
name: Changelog PR or Release
# 这儿分辨库房owner是不是自己,为了防止他人 fork 库房开启,请自行改动
if: ${{ github.repository_owner == 'liruifengv' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# 设定 pnpm。特定版本号7.0,不然就会出错
- name: Setup PNPM
uses: pnpm/action-setup@v2.2.1
with:
version: ^7.0
# 设定 Node
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 16
cache: 'pnpm'
# 组装依靠
- name: Install dependencies run: pnpm install
# 装包
- name: Build Packages
run: pnpm run build
# 这一步是最关键的。应用changesets/action全自动建立 PR 或是公布
- name: Create Release Pull Request or Publish
id: changesets
uses: changesets/action@v1
with:
# 实行升级版本和发布的命令
version: pnpm run version
publish: pnpm exec changeset publish
commit: '[ci] release'
title: '[ci] release'
env:
# 这里要好多个 Token 自变量
# GITHUB_TOKEN 是 CI 里带有的默认设置 token
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# NPM_TOKEN 必须稍候在 npm 网址形成。
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
为了更好地,大家在工程项目的package.json
中加入好多个脚本制作:
// package.json
{
"scripts": {
"changeset": "changeset",
"version": "changeset version && pnpm install"
}
}
设定 TOKEN
把上述文档递交以后,我们一起来设置一下 token。
登陆你 npm 账户,点一下头像图片挑选 Access tokens。
点一下 Generate New Token。能选一键生成还可以更粗粒度控制管理权限。
形成以后还记得拷贝,关闭页面以后就看不到了。
返回 GitHub,你库房,点一下 Settings,挑选Secrets and variables。创建一个 NPM_TOKEN。那样 GitHub Action 中就可得到他了。
详细工作内容
当地递交改动
改动你需要改动的代码。
运作形成 changeset
文档
pnpm exec changeset
形成 changeset
文档以后,留意无需实行再 version
指令了。
储存,把 changeset
文档与我们的编码改动一并递交。
进行 PR
在这里我装上changeset-bot。它会自动检测 PR 中是否包含了 changeset
文档然后进行评价。你能点链接组装它。
做为库房 owner 你可以直接 push 到 main 支系,但更多开源系统推动者爱用 PR 的形式。
CI 进行 release PR
PR 合拼进 main 支系以后,就触动了我们前面设定的 action。
点一下 Actions 查询,大家刚才那递交,触动了一个叫做 Release 的工作流引擎。你能打开查询,它会在 CI 环境中实行大家预置好一点的脚本制作。
我们自己的脚本制作便是,假如检测出递交带上有 changeset
信息内容,就行全自动进行一个叫做 [ci] release
的 PR。这一 PR 中,CI 全自动帮助我们都做好了 CHANGELOG
的生成,版本信息升级。
如果你点一下 merge,合到 main 支系以后,它会自动地发布版本,与此同时分享到 npm 库房和 GitHub release。
未合拼期内,全部带上有 changeset
的递交都是会升级这一 PR。
公布
点一下 merge 公布!祝贺你了实现了整个过程。
过一会就可以看到 GitHub release 和 npm 包都公布通过了。
汇总
很有可能有些人说,仿佛都是全自动流水线哦。
实际上这是一套开源系统合作步骤。
- 仓库推动者,修改代码,形成
changeset
。 - CI 全自动归结为,形成
CHANGELOG
并 PR。 - 仓库管理者,点一下 merge 自动发布。
你一直在手动式改版本升级吗?你开源软件还缺乏完备的合作步骤吗?来试一下这一套步骤吧。
结束语
GitHub Action 也可以做很多事情,例如lint、format 编码;自动化部署这些。我们可以在我 GitHub 找出大量事例。