Rust使用GitHub流水线发布包

405 阅读1分钟

GitHub流水线功能是比较方便用来做自动化的,常见的有单元测试、覆盖率报告或图标生成、docker镜像构建、npm发布等。当然也可以用来发布Rust包到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时才会触发任务。详见:github.com/tu6ge/publi…

进入Github上这个项目的settings页面,找到环境变量environments,新增一个名称叫cargo: image.png

添加你在cargo上的密钥: image.png 这个密钥是在这里生成的crates.io/settings/to… image.png

最终在github的action中可以看到: image.png

我这是已经发布成功了,之所以流水线失败是因为commit信息太短了。