Github 配置 Action 自动生成 Rust 项目 Release 资源

如果我们在 Github 上开源了一款 Rust 项目,那么我们就可以借助 Github Action 来完成自动在不同平台上打包,并在创建 Release 后上传到 Github Release 中。

找寻合适的 Action

Github Marketplace 中寻找我们需要的 Action

建议搜索条件为 https://github.com/marketplace?category=&query=rust+sort%3Apopularity-desc&type=actions&verification=

我使用的 Action 为:

配置

在 Git 根目录下创建.github/workflows 目录,目录下创建 Action 配置文件,名称可自定义,我的文件为.github/workflows/release.yaml

在文件中填下如下内容

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
name: Release

permissions:
contents: write

on:
push:
tags: [ "v[0-9]+.*" ]

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1

defaults:
run:
shell: bash

jobs:
create-release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: taiki-e/create-gh-release-action@v1
with:
branch: master
# (Optional)
changelog: CHANGELOG.md
# (Optional) Format of title.
# [default value: $tag]
# [possible values: variables $tag, $version, and any string]
# title: $version
# (Required) GitHub token for creating GitHub Releases.
token: ${{ secrets.GITHUB_TOKEN }}

upload-assets:
needs: create-release
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: taiki-e/upload-rust-binary-action@v1
with:
# (required) Comma-separated list of binary names (non-extension portion of filename) to build and upload.
# Note that glob pattern is not supported yet.
bin: tools #需要添加自己的名称,package.name
# (optional) On which platform to distribute the `.tar.gz` file.
# [default value: unix]
# [possible values: all, unix, windows, none]
tar: unix
# (optional) On which platform to distribute the `.zip` file.
# [default value: windows]
# [possible values: all, unix, windows, none]
zip: windows
# (required) GitHub token for uploading assets to GitHub Releases.
token: ${{ secrets.GITHUB_TOKEN }}

这其中需要注意的两项

  • branch: master 需要替换为自己的主分支名
  • bin: tools 需要替换为自己的构建名称,主要就是 Cargo.toml 中的 package.name

触发

Action 使用的 push tag 触发,也就是需要再本地打一个 tag,并推到 Github 才能触发。并且这个 Tag 有名称要求 tags: [ "v[0-9]+.*" ], 可以替换为自己的。

识别到这个版本号后,会在根目录找到 CHANGELOG.md, 找到对应的版本号下的日志。

例如打了一个 v0.0.1 的 tag,那么 CHANGELOG.md 的内容就为

1
2
3
4
5
6
7
8
9
# Changelog

## [Unreleased]

## [0.0.1] - 2024-02-22

- change something
- add something

Demo

release.yaml