name: Release
on:
push:
tags: ["v*"]
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: 安装 Rust
uses: dtolnay/rust-toolchain@stable
- name: 安装系统依赖
run: |
sudo apt-get update -qq
sudo apt-get install -y libchafa-dev libglib2.0-dev libsysprof-capture-4-dev
- name: 从 tag 同步版本号
run: |
TAG_VERSION="${GITHUB_REF_NAME#v}"
sed -i "s/^version = .*/version = \"${TAG_VERSION}\"/" Cargo.toml
echo "Synced Cargo.toml version to ${TAG_VERSION}"
- name: 编译 release
run: cargo build --release --no-default-features --features chafa-static
- name: 打包 .deb
run: |
VERSION="${GITHUB_REF_NAME#v}"
PKG="termfoto_${VERSION}_amd64"
mkdir -p "${PKG}/DEBIAN"
mkdir -p "${PKG}/usr/local/bin"
cp target/release/termfoto "${PKG}/usr/local/bin/"
cat > "${PKG}/DEBIAN/control" <<EOF
Package: termfoto
Version: ${VERSION}
Architecture: amd64
Maintainer: termfoto
Description: 终端图片浏览器——高效、轻量、chafa 渲染
EOF
dpkg-deb --build "${PKG}"
cp "${PKG}.deb" termfoto_latest_amd64.deb
env:
GITHUB_REF_NAME: ${{ github.ref_name }}
- name: 发布到 GitHub Releases
uses: softprops/action-gh-release@v1
with:
files: |
target/release/termfoto
termfoto_*.deb
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 安装 Rust
uses: dtolnay/rust-toolchain@stable
- name: 从 tag 同步版本号
run: |
TAG_VERSION="${GITHUB_REF_NAME#v}"
sed -i "s/^version = .*/version = \"${TAG_VERSION}\"/" Cargo.toml
echo "Synced Cargo.toml version to ${TAG_VERSION}"
- name: 发布到 crates.io
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: cargo publish --allow-dirty
npm-publish:
needs: release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
registry-url: "https://registry.npmjs.org"
- name: 从 tag 同步版本号
run: |
TAG_VERSION="${GITHUB_REF_NAME#v}"
cd npm
npm version "${TAG_VERSION}" --no-git-tag-version --allow-same-version
echo "Synced npm version to ${TAG_VERSION}"
- name: 发布到 npm
working-directory: npm
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish --access public