radr-cli 0.3.0

CLI application to manage Architecture Decision Records (ADRs)
Documentation
name: Release Binaries

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

env:
  BIN_NAME: radr

jobs:
  linux:
    name: Linux builds
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        target: [
          x86_64-unknown-linux-gnu,
          aarch64-unknown-linux-gnu,
          armv7-unknown-linux-gnueabihf,
          i686-unknown-linux-gnu,
          x86_64-unknown-linux-musl,
          aarch64-unknown-linux-musl,
          armv7-unknown-linux-musleabihf,
          i686-unknown-linux-musl
        ]
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: Install cross
        run: cargo install cross --locked
      - name: Build (${{ matrix.target }})
        run: cross build --release --target ${{ matrix.target }}
      - name: Package artifact
        run: |
          VERSION="${GITHUB_REF#refs/tags/v}"
          TARGET="${{ matrix.target }}"
          OUTDIR="dist"
          mkdir -p "$OUTDIR/$TARGET"
          cp "target/$TARGET/release/${BIN_NAME}" "$OUTDIR/$TARGET/${BIN_NAME}"
          cp README.md LICENSE "$OUTDIR/$TARGET"/
          (cd "$OUTDIR/$TARGET" && tar -czf "../radr-cli-${VERSION}-${TARGET}.tar.gz" .)
          sha256sum "$OUTDIR/radr-cli-${VERSION}-${TARGET}.tar.gz" > "$OUTDIR/radr-cli-${VERSION}-${TARGET}.tar.gz.sha256"
      - name: Upload release assets
        uses: softprops/action-gh-release@v2
        if: startsWith(github.ref, 'refs/tags/')
        with:
          files: |
            dist/radr-cli-*.tar.gz
            dist/radr-cli-*.tar.gz.sha256

  windows:
    name: Windows builds
    runs-on: windows-latest
    strategy:
      fail-fast: false
      matrix:
        target: [
          x86_64-pc-windows-msvc,
          i686-pc-windows-msvc,
          aarch64-pc-windows-msvc
        ]
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}
      - uses: Swatinem/rust-cache@v2
      - name: Build (${{ matrix.target }})
        run: cargo build --release --target ${{ matrix.target }}
      - name: Package artifact
        shell: pwsh
        run: |
          $version = "$env:GITHUB_REF" -replace 'refs/tags/v',''
          $target = "${{ matrix.target }}"
          $out = "dist"
          New-Item -ItemType Directory -Force -Path "$out/$target" | Out-Null
          Copy-Item "target/$target/release/${env:BIN_NAME}.exe" "$out/$target/${env:BIN_NAME}.exe"
          Copy-Item README.md "$out/$target/"
          Copy-Item LICENSE "$out/$target/"
          $zipPath = "$out/radr-cli-$version-$target.zip"
          Compress-Archive -Path "$out/$target/*" -DestinationPath $zipPath -Force
          Get-FileHash $zipPath -Algorithm SHA256 | ForEach-Object { $_.Hash + "  " + $zipPath } | Out-File "$zipPath.sha256" -Encoding ascii
      - name: Upload release assets
        uses: softprops/action-gh-release@v2
        if: startsWith(github.ref, 'refs/tags/')
        with:
          files: |
            dist/radr-cli-*.zip
            dist/radr-cli-*.zip.sha256

  macos-x86_64:
    name: macOS (x86_64)
    runs-on: macos-13
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: x86_64-apple-darwin
      - uses: Swatinem/rust-cache@v2
      - name: Build
        run: cargo build --release --target x86_64-apple-darwin
      - name: Package artifact
        run: |
          VERSION="${GITHUB_REF#refs/tags/v}"
          TARGET="x86_64-apple-darwin"
          OUTDIR="dist"
          mkdir -p "$OUTDIR/$TARGET"
          cp "target/$TARGET/release/${BIN_NAME}" "$OUTDIR/$TARGET/${BIN_NAME}"
          cp README.md LICENSE "$OUTDIR/$TARGET"/
          (cd "$OUTDIR/$TARGET" && tar -czf "../radr-cli-${VERSION}-${TARGET}.tar.gz" .)
          shasum -a 256 "$OUTDIR/radr-cli-${VERSION}-${TARGET}.tar.gz" > "$OUTDIR/radr-cli-${VERSION}-${TARGET}.tar.gz.sha256"
      - name: Upload release assets
        uses: softprops/action-gh-release@v2
        if: startsWith(github.ref, 'refs/tags/')
        with:
          files: |
            dist/radr-cli-*.tar.gz
            dist/radr-cli-*.tar.gz.sha256

  macos-arm64:
    name: macOS (arm64)
    runs-on: macos-14
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: aarch64-apple-darwin
      - uses: Swatinem/rust-cache@v2
      - name: Build
        run: cargo build --release --target aarch64-apple-darwin
      - name: Package artifact
        run: |
          VERSION="${GITHUB_REF#refs/tags/v}"
          TARGET="aarch64-apple-darwin"
          OUTDIR="dist"
          mkdir -p "$OUTDIR/$TARGET"
          cp "target/$TARGET/release/${BIN_NAME}" "$OUTDIR/$TARGET/${BIN_NAME}"
          cp README.md LICENSE "$OUTDIR/$TARGET"/
          (cd "$OUTDIR/$TARGET" && tar -czf "../radr-cli-${VERSION}-${TARGET}.tar.gz" .)
          shasum -a 256 "$OUTDIR/radr-cli-${VERSION}-${TARGET}.tar.gz" > "$OUTDIR/radr-cli-${VERSION}-${TARGET}.tar.gz.sha256"
      - name: Upload release assets
        uses: softprops/action-gh-release@v2
        if: startsWith(github.ref, 'refs/tags/')
        with:
          files: |
            dist/radr-cli-*.tar.gz
            dist/radr-cli-*.tar.gz.sha256