前言

此文以node项目为例,目录存在package.json,其他项目如果参考本教程需自行创建json文件用于记录当前版本。

1
2
3
{
"version":"1.1.1"
}

上述代码仅作为JSON文件示例。

先来看看actions官方提供的发布demo

1
2
3
4
5
6
7
8
9
10
11
- name: 创建GitHub Release
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: tag的名称
release_name: 发布的名字
body: 发布的内容
draft: false
prerelease: false

以上几个需要我们自己填写的只有tag_namerelease_namebody。因此我们只需要动态获取这三个变量即可实现按照我们的需求进行发布。

获取tag_name

tag_name一般指的是版本号,也就是需要在我们的JSON文件中读取的信息。

1
2
3
4
5
6
- name: 读取当前版本号
id: version
uses: ashley-taylor/read-json-property-action@v1.0
with:
path: ./package.json
property: version
  • path

    表示Json文件的路径

  • property

    json文件里的属性名。

所以上述步骤表示读取./package.json文件里的version字段,也就是开头JSON示例中1.1.1值。

获取release_name

也就是发布release的名称,一般为xxx-版本号这样的格式,因此我们可以直接用版本号作为发布名。

获取body

由于body的内容较多,因此我们单独创建一个文件用于记录本次发布的内容。

1
2
3
4
5
- name: 读取描述文件
id: description
uses: juliangruber/read-file-action@v1
with:
path: ./description.txt
  • path

    表示文件的路径

这样下来我们的三个字段就全部获取完了。接下来只需要发布即可

发布release

1
2
3
4
5
6
7
8
9
10
11
- name: 创建GitHub Release
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{steps.version.outputs.value}}
release_name: v${{steps.version.outputs.value}}
body: ${{steps.description.outputs.content}}
draft: false
prerelease: false

${{steps.version.outputs.value}}可以输出获取json文件时读取到的值,${{steps.description.outputs.content}}可以输出获取文本内容时读取到的值。

完整代码(含NPM包发布)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
name: Node.js Package

on:
push:
branches:
- master

jobs:
publish-npm:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
steps:
# check it to your workflow can access it
# from: https://github.com/actions/checkout
- name: 1. 检查master分支
uses: actions/checkout@master

# from: https://github.com/actions/setup-node
- name: 2. 设置Node.js
uses: actions/setup-node@master
with:
node-version: ${{ matrix.node-version }}

- name: 3. 缓存
uses: actions/cache@v2
id: cache-dependencies
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/yarn.lock')}}

- name: 4. 安装插件
if: steps.cache-dependencies.outputs.cache-hit != 'true'
run: |
export TZ='Asia/Shanghai'
yarn install

- name: 5. 生成文件
run: |
export TZ='Asia/Shanghai'
node index.js

- name: 6. 读取当前版本号
id: version
uses: ashley-taylor/read-json-property-action@v1.0
with:
path: ./package.json
property: version

- name: 7. 读取描述文件
id: description
uses: juliangruber/read-file-action@v1
with:
path: ./description.txt

- name: 8. 发布NPM包
run: |
npm config set //registry.npmjs.org/:_authToken=$NPM_TOKEN
npm publish
env:
NPM_TOKEN: ${{secrets.NPM_TOKEN}}

- name: 9. 创建GitHub Release
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{steps.version.outputs.value}}
release_name: v${{steps.version.outputs.value}}
body: ${{steps.description.outputs.content}}
draft: false
prerelease: false

- name: 10. 刷新缓存
run: |
curl https://purge.jsdelivr.net/npm/iemotion-pic@latest/dist/name.json