v0.1.3 homebrew support (#5) #13
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| tags: | |
| - "v*" | |
| jobs: | |
| test: | |
| name: Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Cache cargo registry | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| target/ | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo- | |
| - name: Run tests | |
| run: cargo test --lib --tests --test crd_compatibility --test resource_registry --test model_compatibility --test field_extraction | |
| - name: Extract version from tag | |
| id: get_version | |
| run: | | |
| VERSION=${GITHUB_REF#refs/tags/v} | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "Extracted version: $VERSION" | |
| - name: Verify version matches Cargo.toml | |
| run: | | |
| CARGO_VERSION=$(grep '^version = ' Cargo.toml | cut -d'"' -f2) | |
| TAG_VERSION=${{ steps.get_version.outputs.version }} | |
| if [ "$CARGO_VERSION" != "$TAG_VERSION" ]; then | |
| echo "Error: Version mismatch!" | |
| echo "Cargo.toml version: $CARGO_VERSION" | |
| echo "Tag version: $TAG_VERSION" | |
| exit 1 | |
| fi | |
| echo "Version match confirmed: $CARGO_VERSION" | |
| build: | |
| name: Build ${{ matrix.target }} | |
| needs: test | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| artifact_name: flux9s | |
| asset_name: flux9s-linux-x86_64.tar.gz | |
| - os: macos-latest | |
| target: x86_64-apple-darwin | |
| artifact_name: flux9s | |
| asset_name: flux9s-macos-x86_64.tar.gz | |
| - os: macos-latest | |
| target: aarch64-apple-darwin | |
| artifact_name: flux9s | |
| asset_name: flux9s-macos-aarch64.tar.gz | |
| - os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| artifact_name: flux9s.exe | |
| asset_name: flux9s-windows-x86_64.zip | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - name: Cache cargo registry | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| target/ | |
| key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-${{ matrix.target }}-cargo- | |
| - name: Build | |
| run: cargo build --release --target ${{ matrix.target }} | |
| - name: Create archive (Unix) | |
| if: matrix.os != 'windows-latest' | |
| run: | | |
| tar -czf ${{ matrix.asset_name }} -C target/${{ matrix.target }}/release ${{ matrix.artifact_name }} | |
| - name: Create archive (Windows) | |
| if: matrix.os == 'windows-latest' | |
| run: | | |
| Compress-Archive -Path target/${{ matrix.target }}/release/${{ matrix.artifact_name }} -DestinationPath ${{ matrix.asset_name }} | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ matrix.asset_name }} | |
| path: ${{ matrix.asset_name }} | |
| publish: | |
| name: Publish to crates.io | |
| needs: build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Publish to crates.io | |
| env: | |
| CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} | |
| run: | | |
| cargo publish --token $CRATES_IO_TOKEN | |
| release: | |
| name: Create GitHub Release | |
| needs: [build, publish] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Extract version from tag | |
| id: get_version | |
| run: | | |
| VERSION=${GITHUB_REF#refs/tags/v} | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: artifacts/**/* | |
| generate_release_notes: true | |
| tag_name: ${{ github.ref }} | |
| name: Release ${{ steps.get_version.outputs.version }} | |
| fail_on_unmatched_files: true | |
| draft: false | |
| prerelease: false | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| update-homebrew: | |
| name: Update Homebrew Formula | |
| needs: [build, release] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Extract version | |
| id: version | |
| run: | | |
| VERSION=${GITHUB_REF#refs/tags/v} | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Calculate checksums | |
| id: checksums | |
| run: | | |
| MACOS_INTEL_SHA=$(shasum -a 256 artifacts/flux9s-macos-x86_64.tar.gz/flux9s-macos-x86_64.tar.gz | cut -d' ' -f1) | |
| MACOS_ARM_SHA=$(shasum -a 256 artifacts/flux9s-macos-aarch64.tar.gz/flux9s-macos-aarch64.tar.gz | cut -d' ' -f1) | |
| LINUX_SHA=$(shasum -a 256 artifacts/flux9s-linux-x86_64.tar.gz/flux9s-linux-x86_64.tar.gz | cut -d' ' -f1) | |
| echo "macos_intel_sha=$MACOS_INTEL_SHA" >> $GITHUB_OUTPUT | |
| echo "macos_arm_sha=$MACOS_ARM_SHA" >> $GITHUB_OUTPUT | |
| echo "linux_sha=$LINUX_SHA" >> $GITHUB_OUTPUT | |
| - name: Checkout homebrew-tap | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: dgunzy/homebrew-tap | |
| token: ${{ secrets.HOMEBREW_TAP_TOKEN }} | |
| path: homebrew-tap | |
| - name: Update formula | |
| run: | | |
| cd homebrew-tap | |
| VERSION=${{ steps.version.outputs.version }} | |
| cat > flux9s.rb << 'EOF' | |
| class Flux9s < Formula | |
| desc "K9s-inspired terminal UI for monitoring Flux GitOps resources" | |
| homepage "https://github.com/dgunzy/flux9s" | |
| version "${{ steps.version.outputs.version }}" | |
| license "Apache-2.0" | |
| on_macos do | |
| if Hardware::CPU.intel? | |
| url "https://github.com/dgunzy/flux9s/releases/download/v${{ steps.version.outputs.version }}/flux9s-macos-x86_64.tar.gz" | |
| sha256 "${{ steps.checksums.outputs.macos_intel_sha }}" | |
| elsif Hardware::CPU.arm? | |
| url "https://github.com/dgunzy/flux9s/releases/download/v${{ steps.version.outputs.version }}/flux9s-macos-aarch64.tar.gz" | |
| sha256 "${{ steps.checksums.outputs.macos_arm_sha }}" | |
| end | |
| end | |
| on_linux do | |
| if Hardware::CPU.intel? | |
| url "https://github.com/dgunzy/flux9s/releases/download/v${{ steps.version.outputs.version }}/flux9s-linux-x86_64.tar.gz" | |
| sha256 "${{ steps.checksums.outputs.linux_sha }}" | |
| end | |
| end | |
| def install | |
| bin.install "flux9s" | |
| end | |
| test do | |
| system "#{bin}/flux9s", "--version" | |
| end | |
| end | |
| EOF | |
| - name: Commit and push | |
| run: | | |
| cd homebrew-tap | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git add flux9s.rb | |
| git commit -m "Update flux9s to v${{ steps.version.outputs.version }}" | |
| git push |