GitHub流水线功能是比较方便用来做自动化的,常见的有单元测试、覆盖率报告或图标生成、docker镜像构建、npm发布等。当然也可以用来发布Rust包到https://crates.io。
它主要依赖于publish-action这个库。
首先,在项目根目录下,新建一个文件.github/workflows/release.yaml
name: Publish to Cargo
on:
push:
# branches: [ main ]
# paths:
# - 'src/'
tags:
- '**'
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
这个表示,只有打tag时才会触发任务。详见:https://github.com/tu6ge/publish-action
进入Github上这个项目的settings页面,找到环境变量environments,新增一个名称叫cargo:
添加你在cargo上的密钥:这个密钥是在这里生成的https://crates.io/settings/tokens
最终在github的action中可以看到:
我这是已经发布成功了,之所以流水线失败是因为commit信息太短了。