tauri-plugin-debug-tools 0.1.4

Debug utilities for Tauri WebView apps.
Documentation
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