name: Release CI
permissions:
contents: write
packages: write
id-token: write
on:
push:
branches: ["main"]
concurrency:
group: release-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
jobs:
build-and-tag:
runs-on: ubuntu-latest
env:
PKG_CONFIG_PATH: /usr/lib/x86_64-linux-gnu/pkgconfig
outputs:
version: ${{ steps.version.outputs.version }}
tag: ${{ steps.tag.outputs.tag }}
tag_created: ${{ steps.tag.outputs.tag_created }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 20
- uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install system deps (GTK/WebKit/PKG-CONFIG)
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential \
pkg-config \
libglib2.0-dev \
libgtk-3-dev \
libwebkit2gtk-4.1-dev \
libayatana-appindicator3-dev \
librsvg2-dev
- name: Install JS dependencies
run: bun install
- name: Build TypeScript (for npm pack)
run: bun run build
- name: Read version from package.json
id: version
run: |
VERSION=$(node -p "require('./package.json').version")
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Create and push tag (v*)
id: tag
env:
VERSION: ${{ steps.version.outputs.version }}
run: |
TAG="v$VERSION"
git fetch --tags
if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "tag_created=false" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag "$TAG"
git push origin "$TAG"
echo "tag_created=true" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
publish:
needs: build-and-tag
if: needs.build-and-tag.outputs.tag_created == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
env:
PKG_CONFIG_PATH: /usr/lib/x86_64-linux-gnu/pkgconfig
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.build-and-tag.outputs.tag }}
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://registry.npmjs.org
always-auth: false
cache: 'npm'
- name: Update npm to latest
run: npm install -g npm@latest
- uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install system deps (GTK/WebKit/PKG-CONFIG)
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential \
pkg-config \
libglib2.0-dev \
libgtk-3-dev \
libwebkit2gtk-4.1-dev \
libayatana-appindicator3-dev \
librsvg2-dev
- name: Install JS dependencies
run: bun install
- name: Build TypeScript (for npm pack)
run: bun run build
- name: Check crate version already published
id: check-crate
env:
CRATE_VERSION: ${{ needs.build-and-tag.outputs.version }}
run: |
CRATE="tauri-plugin-debug-tools"
VERSION="$CRATE_VERSION"
if cargo search "^${CRATE}$" --limit 1 | grep -q "^${CRATE} = \"${VERSION}\""; then
echo "publish=false" >> "$GITHUB_OUTPUT"
else
echo "publish=true" >> "$GITHUB_OUTPUT"
fi
- name: Check npm version already published
id: check-npm
env:
PKG_VERSION: ${{ needs.build-and-tag.outputs.version }}
run: |
PKG="tauri-plugin-debug-tools"
VERSION="$PKG_VERSION"
if npm view "${PKG}@${VERSION}" version >/dev/null 2>&1; then
echo "publish=false" >> "$GITHUB_OUTPUT"
else
echo "publish=true" >> "$GITHUB_OUTPUT"
fi
- name: Package crate
run: cargo package --allow-dirty
- name: Pack npm package
run: npm pack
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: tauri-plugin-debug-tools-${{ needs.build-and-tag.outputs.tag }}
path: |
target/package/*.crate
tauri-plugin-debug-tools-*.tgz
- name: Publish crate to crates.io
if: env.CARGO_REGISTRY_TOKEN != '' && steps.check-crate.outputs.publish == 'true'
run: cargo publish --allow-dirty --token "$CARGO_REGISTRY_TOKEN"
- name: Publish npm package
if: steps.check-npm.outputs.publish == 'true'
env:
NPM_CONFIG_PROVENANCE: false
run: npm publish --access public --no-provenance
- name: Create GitHub release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.build-and-tag.outputs.tag }}
files: |
target/package/*.crate
tauri-plugin-debug-tools-*.tgz