cargo 包的发版器

从 npm 转过来的,之前一直使用 github action 做npm包的发布器,发布流程比较丝滑,具体是怎么样的流程呢,一般情况下我们在拥有自己的一个库的时候,新版本发布会有以下流程:

  1. 运行单元测试
  2. 在库的配置文件中改下版本号
  3. 打包新版本,并推送到平台上去,
  4. 以上步骤没问题的话,打上 git 的 tag 标记,用于记录
  5. 推送代码到 github ,同时要推送 tag 到 github 上去

npm 项目的话,有 primer/publish 这种 github action 可以帮助我们做这些事,唯一我们自己要做的就是,写测试用例(可选),更改配置文件中的版本号,其他的就可以帮我们完成。

前段时间写了一个 rust 的库,发现没有类似的工具,就动手写了一个,地址在这 publish-action, 内含英文文档,在这里写一下中文文档:

  1. 你需要在 crates.io/settings/tokens 页面中申请一个 token,拥有库的推送权限
  2. 打开你的 github 仓库的配置页面,找到 Environments Settings 配置页,创建一个环境变量,并命名为 cargo ,在该环境变量中添加一个机密信息,变量名为 CARGO_REGISTRY_TOKEN ,值为第一步中获取到的 token
  3. 你需要打开 github 配置页的 action 配置页,在 Workflow permissions 中选中 Read and write permissions ,授权 github action 对你的项目拥有读写权限,用于打 tag
  4. 在你本地的项目根目录中,创建 .github/workflows 目录,并在里面创建一个名字为 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 }}

      # 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.1.12

      - name: Run 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 }}
  1. 保存并推送到 github 即可

至此配置完成,下一次发版的时候,只需要改变 Cargo.toml 文件中的版本号,然后推送到 github 上去,即可自动运行剩余的固定步骤

大多数知识,不需要我们记住,只需要认知即可
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!