dsct 0.2.8

LLM-friendly packet dissector CLI
Documentation
name: Release-plz

permissions:
  id-token: write

on:
  push:
    branches: [main]

concurrency:
  group: release-plz-${{ github.ref }}
  cancel-in-progress: false

jobs:
  release-plz-release:
    name: Release-plz release
    runs-on: ubuntu-latest
    environment: release
    steps:
      - name: Generate GitHub App token
        id: app-token
        uses: actions/create-github-app-token@v2
        with:
          app-id: ${{ secrets.RELEASE_PLZ_APP_ID }}
          private-key: ${{ secrets.RELEASE_PLZ_APP_PRIVATE_KEY }}
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
          token: ${{ steps.app-token.outputs.token }}
      - uses: dtolnay/rust-toolchain@stable
      - name: Authenticate with crates.io
        uses: rust-lang/crates-io-auth-action@v1
        id: auth
      - name: Run release-plz (release)
        uses: release-plz/action@v0.5
        with:
          command: release
        env:
          GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}

  release-plz-pr:
    name: Release-plz PR
    runs-on: ubuntu-latest
    steps:
      - name: Generate GitHub App token
        id: app-token
        uses: actions/create-github-app-token@v2
        with:
          app-id: ${{ secrets.RELEASE_PLZ_APP_ID }}
          private-key: ${{ secrets.RELEASE_PLZ_APP_PRIVATE_KEY }}
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
          token: ${{ steps.app-token.outputs.token }}
      - uses: dtolnay/rust-toolchain@stable
      - name: Run release-plz (release-pr)
        id: release-plz
        uses: release-plz/action@v0.5
        with:
          command: release-pr
        env:
          GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
      - name: Update plugin manifests in release PR
        if: steps.release-plz.outputs.prs != ''
        env:
          PRS: ${{ steps.release-plz.outputs.prs }}
          APP_SLUG: ${{ steps.app-token.outputs.app-slug }}
        run: |
          set -euo pipefail
          BRANCH=$(echo "$PRS" | jq -r '.[0].head_branch')
          if [ -z "$BRANCH" ] || [ "$BRANCH" = "null" ]; then
            echo "No release PR branch; skipping plugin manifest sync."
            exit 0
          fi
          git config user.name "${APP_SLUG}[bot]"
          git config user.email "${APP_SLUG}[bot]@users.noreply.github.com"
          git fetch origin "$BRANCH"
          git checkout "$BRANCH"
          VERSION=$(cargo metadata --no-deps --format-version 1 \
            | jq -r '.packages[] | select(.name=="dsct") | .version')
          jq --arg v "$VERSION" '.version = $v' \
            .claude-plugin/plugin.json > .claude-plugin/plugin.json.tmp
          mv .claude-plugin/plugin.json.tmp .claude-plugin/plugin.json
          jq --arg v "$VERSION" '.plugins[].version = $v' \
            .claude-plugin/marketplace.json > .claude-plugin/marketplace.json.tmp
          mv .claude-plugin/marketplace.json.tmp .claude-plugin/marketplace.json
          if ! git diff --quiet; then
            git add .claude-plugin/plugin.json .claude-plugin/marketplace.json
            git commit -m "chore(release): sync plugin manifests to v${VERSION}"
            git push origin "$BRANCH"
          fi