rabbitmqadmin 2.31.0

rabbitmqadmin v2 is a modern CLI tool for the RabbitMQ HTTP API
Documentation
name: Release

on:
  workflow_dispatch:
  push:
    tags:
      - 'v*.*.*'
      - 'v*.*.*-*'

permissions:
  contents: write
  id-token: write

jobs:
  validate:
    name: Validate
    runs-on: ubuntu-24.04
    outputs:
      version: ${{ steps.validate.outputs.version }}
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Validate changelog
        uses: michaelklishin/rust-build-package-release-action@v3
        with:
          command: validate-changelog

      - name: Validate version
        uses: michaelklishin/rust-build-package-release-action@v3
        id: validate
        with:
          command: validate-version
          expected-version: ${{ vars.NEXT_RELEASE_VERSION }}
          validate-cargo-toml: 'true'

      - name: Extract changelog
        uses: michaelklishin/rust-build-package-release-action@v3
        with:
          command: extract-changelog

      - name: Upload release notes
        uses: actions/upload-artifact@v4
        with:
          name: release-notes
          path: release_notes.md
          retention-days: 2

  publish-crate:
    name: Publish to crates.io
    needs: [validate]
    runs-on: ubuntu-24.04
    environment: release
    timeout-minutes: 15
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - uses: dtolnay/rust-toolchain@stable

      - name: Authenticate with crates.io
        id: auth
        uses: rust-lang/crates-io-auth-action@v1

      - name: Publish crate
        uses: michaelklishin/rust-build-package-release-action@v3
        with:
          command: publish-crate
          locked: 'true'
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}

  build:
    name: Build (${{ matrix.target }})
    needs: [validate]
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - target: aarch64-apple-darwin
            os: macos-latest
          - target: x86_64-apple-darwin
            os: macos-15-intel
          - target: x86_64-pc-windows-msvc
            os: windows-latest
          - target: x86_64-unknown-linux-gnu
            os: ubuntu-22.04
          - target: aarch64-unknown-linux-gnu
            os: ubuntu-24.04-arm
          - target: x86_64-unknown-linux-musl
            os: ubuntu-22.04
            no_default_features: 'true'
          - target: aarch64-unknown-linux-musl
            os: ubuntu-24.04-arm
            no_default_features: 'true'
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}

      - name: Build release
        uses: michaelklishin/rust-build-package-release-action@v3
        id: build
        with:
          command: release
          target: ${{ matrix.target }}
          binary-name: rabbitmqadmin
          locked: 'true'
          archive: 'true'
          checksum: 'sha256'
          include: 'README.md,LICENSE-MIT,LICENSE-APACHE'
          no-default-features: ${{ matrix.no_default_features || 'false' }}

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.target }}
          path: |
            ${{ steps.build.outputs.artifact_path }}
            ${{ steps.build.outputs.artifact_path }}.sha256
            ${{ steps.build.outputs.bare_artifact_path }}
          retention-days: 2

  packages:
    name: Package (${{ matrix.format }}, ${{ matrix.target }})
    needs: [validate]
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - format: deb
            command: release-linux-deb
            target: x86_64-unknown-linux-gnu
            os: ubuntu-22.04
          - format: deb
            command: release-linux-deb
            target: aarch64-unknown-linux-gnu
            os: ubuntu-24.04-arm
          - format: rpm
            command: release-linux-rpm
            target: x86_64-unknown-linux-gnu
            os: ubuntu-22.04
          - format: rpm
            command: release-linux-rpm
            target: aarch64-unknown-linux-gnu
            os: ubuntu-24.04-arm
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}

      - name: Build ${{ matrix.format }} package
        uses: michaelklishin/rust-build-package-release-action@v3
        id: build
        with:
          command: ${{ matrix.command }}
          target: ${{ matrix.target }}
          binary-name: rabbitmqadmin
          locked: 'true'
          pkg-maintainer: 'Team RabbitMQ <teamrabbitmq@gmail.com>'
          pkg-description: 'rabbitmqadmin v2 is a modern CLI for RabbitMQ HTTP API'
          pkg-homepage: 'https://www.rabbitmq.com/docs/management-cli'
          pkg-license: 'Apache-2.0 OR MIT'

      - name: Upload package
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.format }}-${{ matrix.target }}
          path: |
            ${{ steps.build.outputs.artifact_path }}
            ${{ steps.build.outputs.checksum_file }}
          retention-days: 2

  msi:
    name: MSI Installer
    needs: [validate]
    runs-on: windows-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Build MSI
        uses: michaelklishin/rust-build-package-release-action@v3
        id: build
        with:
          command: release-windows-msi
          target: x86_64-pc-windows-msvc
          binary-name: rabbitmqadmin
          locked: 'true'

      - name: Upload MSI
        uses: actions/upload-artifact@v4
        with:
          name: msi-x86_64
          path: |
            ${{ steps.build.outputs.artifact_path }}
            ${{ steps.build.outputs.checksum_file }}
          retention-days: 2

  release:
    name: Publish
    needs: [validate, publish-crate, build, packages, msi]
    runs-on: ubuntu-24.04
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Download artifacts
        uses: actions/download-artifact@v4
        with:
          path: artifacts

      - name: Collect release files
        run: |
          mkdir -p release
          find artifacts -type f \( -name "rabbitmqadmin-*" -o -name "*.sha256" -o -name "*.deb" -o -name "*.rpm" -o -name "*.msi" \) ! -name "release_notes.md" -exec cp {} release/ \;

      - name: Generate SBOM
        uses: michaelklishin/rust-build-package-release-action@v3
        id: sbom
        with:
          command: generate-sbom
          sbom-format: 'spdx,cyclonedx'

      - name: Copy SBOMs to release
        run: |
          cp ${{ steps.sbom.outputs.sbom_spdx }} release/ || true
          cp ${{ steps.sbom.outputs.sbom_cyclonedx }} release/ || true

      - name: Install cosign
        uses: sigstore/cosign-installer@v3

      - name: Sign release archives
        run: |
          for artifact in release/*.tar.gz release/*.zip; do
            if [ -f "$artifact" ]; then
              echo "Signing $artifact"
              cosign sign-blob --yes \
                --output-signature "${artifact}.sig" \
                --output-certificate "${artifact}.pem" \
                --bundle "${artifact}.sigstore.json" \
                "$artifact"
            fi
          done

      - name: Collect artifacts
        uses: michaelklishin/rust-build-package-release-action@v3
        id: collect
        with:
          command: collect-artifacts
          binary-name: rabbitmqadmin
          artifacts-dir: release
          base-url: https://github.com/rabbitmq/rabbitmqadmin-ng/releases/download/v${{ needs.validate.outputs.version }}

      - name: Format release body
        uses: michaelklishin/rust-build-package-release-action@v3
        id: body
        with:
          command: format-release
          artifacts-dir: release
          notes-file: artifacts/release-notes/release_notes.md
          include-checksums: 'true'

      - name: Copy checksums
        run: cp ${{ steps.collect.outputs.checksums_file }} release/ || true

      - name: Generate Homebrew formula
        uses: michaelklishin/rust-build-package-release-action@v3
        id: homebrew
        with:
          command: generate-homebrew
          binary-name: rabbitmqadmin
          version: ${{ needs.validate.outputs.version }}
          pkg-description: 'rabbitmqadmin v2 is a modern CLI for RabbitMQ HTTP API'
          pkg-homepage: 'https://www.rabbitmq.com/docs/management-cli'
          pkg-license: 'Apache-2.0 OR MIT'
          brew-copyright: '2023-2026 The rabbitmqadmin v2 Contributors'
          brew-macos-arm64-url: https://github.com/rabbitmq/rabbitmqadmin-ng/releases/download/v${{ needs.validate.outputs.version }}/rabbitmqadmin-${{ needs.validate.outputs.version }}-aarch64-apple-darwin.tar.gz
          brew-macos-arm64-sha256: ${{ steps.collect.outputs.macos_arm64_sha256 }}
          brew-macos-x64-url: https://github.com/rabbitmq/rabbitmqadmin-ng/releases/download/v${{ needs.validate.outputs.version }}/rabbitmqadmin-${{ needs.validate.outputs.version }}-x86_64-apple-darwin.tar.gz
          brew-macos-x64-sha256: ${{ steps.collect.outputs.macos_x64_sha256 }}
          brew-linux-arm64-url: https://github.com/rabbitmq/rabbitmqadmin-ng/releases/download/v${{ needs.validate.outputs.version }}/rabbitmqadmin-${{ needs.validate.outputs.version }}-aarch64-unknown-linux-gnu.tar.gz
          brew-linux-arm64-sha256: ${{ steps.collect.outputs.linux_arm64_sha256 }}
          brew-linux-x64-url: https://github.com/rabbitmq/rabbitmqadmin-ng/releases/download/v${{ needs.validate.outputs.version }}/rabbitmqadmin-${{ needs.validate.outputs.version }}-x86_64-unknown-linux-gnu.tar.gz
          brew-linux-x64-sha256: ${{ steps.collect.outputs.linux_x64_sha256 }}

      - name: Generate AUR PKGBUILD
        uses: michaelklishin/rust-build-package-release-action@v3
        id: aur
        with:
          command: generate-aur
          binary-name: rabbitmqadmin
          aur-name: rabbitmqadmin
          version: ${{ needs.validate.outputs.version }}
          pkg-description: 'rabbitmqadmin v2 is a modern CLI for RabbitMQ HTTP API'
          pkg-homepage: 'https://www.rabbitmq.com/docs/management-cli'
          pkg-license: 'Apache-2.0 OR MIT'
          aur-maintainer: 'Team RabbitMQ <teamrabbitmq@gmail.com>'
          aur-source-url: https://github.com/rabbitmq/rabbitmqadmin-ng/archive/refs/tags/v${{ needs.validate.outputs.version }}.tar.gz
          aur-source-sha256: 'SKIP'

      - name: Generate Winget manifest
        uses: michaelklishin/rust-build-package-release-action@v3
        id: winget
        with:
          command: generate-winget
          binary-name: rabbitmqadmin
          winget-package-id: rabbitmqadmin
          version: ${{ needs.validate.outputs.version }}
          pkg-description: 'rabbitmqadmin v2 is a modern CLI for RabbitMQ HTTP API'
          pkg-homepage: 'https://www.rabbitmq.com/docs/management-cli'
          pkg-license: 'Apache-2.0 OR MIT'
          winget-publisher: 'RabbitMQ'
          winget-license-url: 'https://github.com/rabbitmq/rabbitmqadmin-ng/blob/main/LICENSE-MIT'
          winget-tags: 'rabbitmq,cli,management'
          winget-x64-url: https://github.com/rabbitmq/rabbitmqadmin-ng/releases/download/v${{ needs.validate.outputs.version }}/rabbitmqadmin-${{ needs.validate.outputs.version }}-x86_64-pc-windows-msvc.zip
          winget-x64-sha256: ${{ steps.collect.outputs.windows_x64_sha256 }}

      - name: Copy Homebrew formula to release
        run: cp ${{ steps.homebrew.outputs.formula_file }} release/

      - name: Upload package manifests
        uses: actions/upload-artifact@v4
        with:
          name: package-manager-manifests
          path: |
            ${{ steps.homebrew.outputs.formula_file }}
            ${{ steps.aur.outputs.pkgbuild_path }}
            ${{ steps.aur.outputs.srcinfo_path }}
            ${{ steps.winget.outputs.manifest_dir }}
          retention-days: 7

      - name: Publish release
        uses: softprops/action-gh-release@v2
        with:
          tag_name: v${{ needs.validate.outputs.version }}
          draft: false
          body: ${{ steps.body.outputs.body }}
          files: release/*
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}