Release #3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| # 发布流水线:tag 推送(v*,通常由 tag.yml 一键发版触发)或手动指定已存在 tag。 | |
| # 结构(借鉴 byte-code release.yml):矩阵构建只产出 artifacts, | |
| # 汇聚 job 集中生成 changelog(cliff 经文件传 body)与 sha256 后统一挂 Release。 | |
| # 产物命名 bcode-<target>.<ext> 与 [package.metadata.binstall] 模板对应, | |
| # 配好 repository 字段后 `cargo binstall bcode` 即可直装。 | |
| on: | |
| push: | |
| tags: ['v*'] | |
| workflow_dispatch: | |
| inputs: | |
| tag: | |
| description: '发布标签(如 v0.0.1,需已推送)' | |
| required: true | |
| version: | |
| description: '注入二进制的版本号(如 0.0.1;缺省按 tag 推导,再退 git describe)' | |
| required: false | |
| permissions: | |
| contents: write | |
| jobs: | |
| build: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { os: ubuntu-latest, target: x86_64-unknown-linux-gnu, archive: tar.gz } | |
| - { os: windows-latest, target: x86_64-pc-windows-msvc, archive: zip } | |
| - { os: macos-latest, target: aarch64-apple-darwin, archive: tar.gz } | |
| - { os: macos-latest, target: x86_64-apple-darwin, archive: tar.gz } | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| # fetch-tags:手动 dispatch(ref=分支)时 build.rs 靠 git describe 取 tag 版本 | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: ${{ matrix.target }} | |
| # 版本注入优先级:dispatch 显式传参 > tag 推导 > git describe(build.rs 兜底) | |
| - name: Build | |
| shell: bash | |
| run: | | |
| V="${{ inputs.version }}" | |
| if [ -z "$V" ] && [[ "$GITHUB_REF_NAME" == v* ]]; then V=${GITHUB_REF_NAME#v}; fi | |
| BCODE_VERSION=$V cargo build --release --target ${{ matrix.target }} | |
| - name: Package | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| T=${{ matrix.target }} | |
| EXT="" | |
| [[ "$T" == *windows* ]] && EXT=".exe" | |
| STAGE="bcode-$T" | |
| mkdir -p "$STAGE" | |
| cp "target/$T/release/bcode$EXT" "$STAGE/" | |
| cp README.md "$STAGE/" | |
| if [[ "${{ matrix.archive }}" == "zip" ]]; then | |
| # 7z 而非 Compress-Archive:后者产生反斜杠分隔符的 zip,跨平台解压会坏(v0.0.1 实测) | |
| 7z a "$STAGE.zip" "$STAGE" | |
| else | |
| tar czf "$STAGE.tar.gz" "$STAGE" | |
| fi | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| # 必须按 target 区分:v4 同名 artifact 会互相覆盖(首版踩坑:四个平台只剩一个) | |
| name: dist-${{ matrix.target }} | |
| path: bcode-${{ matrix.target }}.* | |
| release: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| steps: | |
| # cliff 生成发版说明需要全历史与 tag | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - name: Generate changelog | |
| uses: orhun/git-cliff-action@v4 | |
| id: cliff | |
| with: | |
| config: cliff.toml | |
| args: --latest --strip header | |
| env: | |
| # 多行 body 经文件传给 release 最稳(byte-code b750e45 同款结论) | |
| OUTPUT: CHANGELOG.md | |
| GITHUB_REPO: ${{ github.repository }} | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: . | |
| merge-multiple: true | |
| - name: Checksums | |
| run: | | |
| ls -la bcode-* | |
| for f in bcode-*.tar.gz bcode-*.zip; do | |
| [ -e "$f" ] || continue | |
| sha256sum "$f" > "$f.sha256" | |
| done | |
| cat bcode-*.sha256 | |
| - name: Create release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ inputs.tag || github.ref_name }} | |
| body_path: CHANGELOG.md | |
| files: | | |
| bcode-*.tar.gz | |
| bcode-*.zip | |
| bcode-*.sha256 |