27次发布
0.3.5 | 2024年5月20日 |
---|---|
0.2.3 | 2023年11月20日 |
0.2.2 | 2023年6月8日 |
0.2.1 | 2023年3月30日 |
0.1.14 | 2022年6月12日 |
140 在 测试
每月89 次下载
1MB
19K SLoC
publish-action
使用Github Action自动发布Cargo
如果您有一个Cargo仓库,当您发布新版本时,通常需要以下步骤:
- 更新Cargo.toml中的版本
- 标记仓库
- 发布到crates.io
- 推送到github
有时,我们会忘记标记github仓库。因此,我创建了github action。
现在,您只需更新Cargo.toml中的版本,在您推送到github之后,github action可以自动标记github仓库,并使用新版本发布到crates.io。
在发布之前,您也可以运行测试用例。
输出(0.1.15+)
运行动作后,您可以使用输出判断状态(是否有新版本,发布是否成功)。
new_version
:返回'true'或'false'publish
:返回'true'或'false'
用法
-
您应该在https://crates.io/settings/tokens中创建crates.io的token,并复制token。
-
打开您的仓库设置页面,找到环境设置页面(https://github.com/xxx/xxx/settings/environments)。创建一个名为
cargo
的新环境,并添加环境秘密名称CARGO_REGISTRY_TOKEN
,此值是第一步的token。 -
打开动作设置,在工作流权限中选择读写权限选项,并保存。
-
打开您的本地仓库路径,在
.github/workflows
路径下创建一个新的github action设置文件,例如:publish.yaml
,并写入
name: Publish to Cargo
on:
push:
branches: [ master ]
jobs:
publish:
runs-on: ubuntu-latest
name: 'publish'
# Reference your environment variables
environment: cargo
steps:
- uses: actions/checkout@master
# Use caching to speed up your build
- name: Cache publish-action bin
id: cache-publish-action
uses: actions/cache@v3
env:
cache-name: cache-publish-action
with:
path: ~/.cargo
key: ${{ runner.os }}-build-${{ env.cache-name }}-v0.2.0
# install publish-action by cargo in github action
- name: Install publish-action
if: steps.cache-publish-action.outputs.cache-hit != 'true'
run:
cargo install publish-action --version=0.2.0
- name: Run publish-action
id: publish-action
run:
publish-action
env:
# This can help you tagging the github repository
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# This can help you publish to crates.io
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
#- name: Update Changelog.md
# if: steps.publish-action.outputs.new_version == 'true' && steps.publish-action.outputs.publish == 'true'
# run: |
# changelog -o Changelog.md
- 您可以使用新的github action推送到github。这样就完成了。
现在您更改Cargo.toml,这可以自动运行。
支持自定义注册表 +0.2
使用备用注册表,这是文档
支持多个项目 +0.3
添加yaml文件.github/publish.yml
,例如
projects:
- name: project1
#dir: "."
tag_prefix: "v"
- name: project2
dir: "/project2/"
tag_prefix: "p2v_"
- name: project3
dir: "/project3/"
tag_prefix: "p3v_"
如果 dir
为空,则默认为根目录;如果 tag_prefix
为空,则标签前缀为无,并且最终标签仅为 x.x.x
.
依赖关系
~68MB
~1.5M SLoC