innodb-utils 5.1.0

InnoDB file analysis toolkit
Documentation
name: Release

on:
  push:
    tags:
      - 'v*'

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    name: Build (${{ matrix.target }})
    runs-on: ${{ matrix.runner }}
    strategy:
      matrix:
        include:
          - target: x86_64-unknown-linux-gnu
            runner: ubuntu-latest
            archive: tar.gz
          - target: aarch64-unknown-linux-gnu
            runner: ubuntu-latest
            archive: tar.gz
            cross: true
          - target: x86_64-apple-darwin
            runner: macos-latest
            archive: tar.gz
          - target: aarch64-apple-darwin
            runner: macos-latest
            archive: tar.gz

    steps:
      - uses: actions/checkout@v6

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

      - name: Install cross-compilation tools
        if: matrix.cross
        run: |
          sudo apt-get update
          sudo apt-get install -y gcc-aarch64-linux-gnu
          echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV

      - uses: Swatinem/rust-cache@v2
        with:
          key: ${{ matrix.target }}

      - name: Build release binary
        run: cargo build --release --target ${{ matrix.target }}

      - name: Package binary
        shell: bash
        run: |
          cd target/${{ matrix.target }}/release
          TAG="${GITHUB_REF#refs/tags/}"
          ARCHIVE_NAME="inno-${TAG}-${{ matrix.target }}"
          mkdir "${ARCHIVE_NAME}"
          cp inno "${ARCHIVE_NAME}/"
          COMP_DIR=$(find ../build/innodb-utils-*/out/completions -maxdepth 0 2>/dev/null | head -1 || true)
          if [ -d "$COMP_DIR" ]; then
            mkdir "${ARCHIVE_NAME}/completions"
            cp "$COMP_DIR"/* "${ARCHIVE_NAME}/completions/"
          fi
          tar czf "${ARCHIVE_NAME}.tar.gz" "${ARCHIVE_NAME}"
          shasum -a 256 "${ARCHIVE_NAME}.tar.gz" > "${ARCHIVE_NAME}.tar.gz.sha256"
          echo "ARCHIVE=${ARCHIVE_NAME}.tar.gz" >> $GITHUB_ENV
          echo "CHECKSUM=${ARCHIVE_NAME}.tar.gz.sha256" >> $GITHUB_ENV

      - name: Build deb package
        if: matrix.target == 'x86_64-unknown-linux-gnu'
        env:
          CARGO_DEB_VERSION: "3.6.3"
        run: |
          curl -sLO "https://github.com/kornelski/cargo-deb/releases/download/v${CARGO_DEB_VERSION}/cargo-deb_${CARGO_DEB_VERSION}-1_amd64.deb"
          sudo dpkg -i "cargo-deb_${CARGO_DEB_VERSION}-1_amd64.deb"
          cargo deb --no-build --target ${{ matrix.target }}

      - name: Build rpm package
        if: matrix.target == 'x86_64-unknown-linux-gnu'
        run: |
          cargo install cargo-generate-rpm
          cargo generate-rpm --target ${{ matrix.target }}

      - name: Upload artifacts
        uses: actions/upload-artifact@v6
        with:
          name: ${{ matrix.target }}
          path: |
            target/${{ matrix.target }}/release/${{ env.ARCHIVE }}
            target/${{ matrix.target }}/release/${{ env.CHECKSUM }}
            target/${{ matrix.target }}/debian/*.deb
            target/${{ matrix.target }}/generate-rpm/*.rpm

  release:
    name: Create Release
    needs: build
    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
      - uses: actions/checkout@v6

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

      - name: Create GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          generate_release_notes: true
          files: |
            artifacts/**/*.tar.gz
            artifacts/**/*.sha256
            artifacts/**/*.deb
            artifacts/**/*.rpm

  update-homebrew:
    name: Update Homebrew Formula
    needs: release
    runs-on: ubuntu-latest

    steps:
      - name: Get version from tag
        id: version
        run: echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT

      - name: Download SHA256 checksums
        run: |
          VERSION=${{ steps.version.outputs.version }}
          BASE_URL="https://github.com/ringo380/idb-utils/releases/download/v${VERSION}"
          for target in aarch64-apple-darwin x86_64-apple-darwin aarch64-unknown-linux-gnu x86_64-unknown-linux-gnu; do
            curl -sL "${BASE_URL}/inno-v${VERSION}-${target}.tar.gz.sha256" -o "${target}.sha256"
          done

      - name: Parse checksums
        id: checksums
        run: |
          echo "mac_arm=$(awk '{print $1}' aarch64-apple-darwin.sha256)" >> $GITHUB_OUTPUT
          echo "mac_x86=$(awk '{print $1}' x86_64-apple-darwin.sha256)" >> $GITHUB_OUTPUT
          echo "linux_arm=$(awk '{print $1}' aarch64-unknown-linux-gnu.sha256)" >> $GITHUB_OUTPUT
          echo "linux_x86=$(awk '{print $1}' x86_64-unknown-linux-gnu.sha256)" >> $GITHUB_OUTPUT

      - name: Update Homebrew formula
        uses: peter-evans/repository-dispatch@v4
        with:
          token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
          repository: ringo380/homebrew-tap
          event-type: update-formula
          client-payload: |
            {
              "formula": "inno",
              "version": "${{ steps.version.outputs.version }}",
              "mac_arm_sha256": "${{ steps.checksums.outputs.mac_arm }}",
              "mac_x86_sha256": "${{ steps.checksums.outputs.mac_x86 }}",
              "linux_arm_sha256": "${{ steps.checksums.outputs.linux_arm }}",
              "linux_x86_sha256": "${{ steps.checksums.outputs.linux_x86 }}"
            }