Skip to content

Release

Release #1

Workflow file for this run

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.1.0,需已推送)'
required: true
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:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.target }}
# tag 触发时按 tag 注入版本,保证二进制与发布版本一致(build.rs 消费)
- name: Build
shell: bash
run: |
V=${GITHUB_REF_NAME#v}
[ "$V" = "${GITHUB_REF_NAME}" ] && V="" # 非 tag 触发则走 git describe 兜底
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
powershell Compress-Archive -Path "$STAGE" -DestinationPath "$STAGE.zip"
else
tar czf "$STAGE.tar.gz" "$STAGE"
fi
- uses: actions/upload-artifact@v4
with:
name: dist-$T
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