fix: correct homebrew urls #16
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*' | |
| workflow_dispatch: | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| release: | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| name: Release ${{ matrix.target }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| artifact_name: sshdb-linux-x86_64 | |
| asset_name: sshdb-linux-x86_64.tar.gz | |
| - os: macos-latest | |
| target: x86_64-apple-darwin | |
| artifact_name: sshdb-macos-x86_64 | |
| asset_name: sshdb-macos-x86_64.tar.gz | |
| - os: macos-14 | |
| target: aarch64-apple-darwin | |
| artifact_name: sshdb-macos-aarch64 | |
| asset_name: sshdb-macos-aarch64.tar.gz | |
| - os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| artifact_name: sshdb-windows-x86_64 | |
| asset_name: sshdb-windows-x86_64.zip | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Extract version from tag and update Cargo.toml | |
| shell: bash | |
| run: | | |
| VERSION=${GITHUB_REF#refs/tags/v} | |
| sed -i.bak "s/^version = \".*\"/version = \"${VERSION}\"/" Cargo.toml | |
| rm Cargo.toml.bak | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: stable | |
| - name: Add target | |
| run: rustup target add ${{ 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 }}-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-${{ matrix.target }}- | |
| - name: Build release binary | |
| run: cargo build --release --target ${{ matrix.target }} --verbose | |
| - name: Code sign macOS binary | |
| if: startsWith(matrix.os, 'macos') | |
| run: | | |
| codesign --force --sign - target/${{ matrix.target }}/release/sshdb | |
| - name: Prepare release asset (Windows) | |
| if: matrix.os == 'windows-latest' | |
| shell: pwsh | |
| run: | | |
| cd target/${{ matrix.target }}/release | |
| Compress-Archive -Path sshdb.exe -DestinationPath ${{ github.workspace }}/${{ matrix.asset_name }} -Force | |
| - name: Prepare release asset (Unix) | |
| if: matrix.os != 'windows-latest' | |
| shell: bash | |
| run: | | |
| cd target/${{ matrix.target }}/release | |
| tar czf ${{ github.workspace }}/${{ matrix.asset_name }} sshdb | |
| - name: Upload release asset | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ matrix.artifact_name }} | |
| path: ${{ matrix.asset_name }} | |
| retention-days: 30 | |
| create-release: | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| name: Create Release | |
| needs: release | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Extract version from tag | |
| id: tag | |
| run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT | |
| - name: Install Rust toolchain (for git-cliff) | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: stable | |
| - name: Install git-cliff | |
| run: | | |
| cargo install --locked git-cliff | |
| echo "$HOME/.cargo/bin" >> $GITHUB_PATH | |
| - name: Generate changelog from git history | |
| run: git-cliff --config .gitcliff.toml --latest --output release-notes.md | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Generate checksums | |
| run: | | |
| find artifacts -type f \( -name "sshdb-*.tar.gz" -o -name "sshdb-*.zip" \) -print0 \ | |
| | sort -z \ | |
| | xargs -0 sha256sum > checksums.txt | |
| - name: Generate Homebrew formula and push tap | |
| if: "${{ env.HOMEBREW_TAP_TOKEN != '' }}" | |
| env: | |
| VERSION: ${{ steps.tag.outputs.VERSION }} | |
| HOMEBREW_TAP_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }} | |
| run: | | |
| set -euo pipefail | |
| # Calculate checksums for per-platform release artifacts | |
| MACOS_X86_64_TAR="artifacts/sshdb-macos-x86_64/sshdb-macos-x86_64.tar.gz" | |
| MACOS_ARM64_TAR="artifacts/sshdb-macos-aarch64/sshdb-macos-aarch64.tar.gz" | |
| LINUX_X86_64_TAR="artifacts/sshdb-linux-x86_64/sshdb-linux-x86_64.tar.gz" | |
| MACOS_X86_64_SHA="" | |
| MACOS_ARM64_SHA="" | |
| LINUX_X86_64_SHA="" | |
| if [ -f "${MACOS_X86_64_TAR}" ]; then | |
| MACOS_X86_64_SHA=$(shasum -a 256 "${MACOS_X86_64_TAR}" | awk '{print $1}') | |
| fi | |
| if [ -f "${MACOS_ARM64_TAR}" ]; then | |
| MACOS_ARM64_SHA=$(shasum -a 256 "${MACOS_ARM64_TAR}" | awk '{print $1}') | |
| fi | |
| if [ -f "${LINUX_X86_64_TAR}" ]; then | |
| LINUX_X86_64_SHA=$(shasum -a 256 "${LINUX_X86_64_TAR}" | awk '{print $1}') | |
| fi | |
| TAP_DIR=$(mktemp -d) | |
| git config --global user.name "sshdb-release-bot" | |
| git config --global user.email "sshdb-release-bot@users.noreply.github.com" | |
| git clone "https://x-access-token:${HOMEBREW_TAP_TOKEN}@github.com/ruphy/homebrew-sshdb" "${TAP_DIR}" | |
| mkdir -p "${TAP_DIR}/Formula" | |
| # Generate formula that directly references the prebuilt archives we publish | |
| # rather than bottle artifacts (our release assets already serve as distro-specific binaries). | |
| # This avoids Homebrew looking for bottle filenames that don't exist. | |
| { | |
| cat <<EOFRUBY | |
| class Sshdb < Formula | |
| desc "Keyboard-first SSH library and launcher TUI" | |
| homepage "https://github.com/ruphy/sshdb" | |
| version "${VERSION}" | |
| license "GPL-3.0-or-later" | |
| EOFRUBY | |
| if [ -n "${MACOS_ARM64_SHA}" ] || [ -n "${MACOS_X86_64_SHA}" ]; then | |
| cat <<EOFRUBY | |
| on_macos do | |
| EOFRUBY | |
| if [ -n "${MACOS_ARM64_SHA}" ]; then | |
| cat <<EOFRUBY | |
| on_arm do | |
| url "https://github.com/ruphy/sshdb/releases/download/v#{version}/sshdb-macos-aarch64.tar.gz" | |
| sha256 "${MACOS_ARM64_SHA}" | |
| end | |
| EOFRUBY | |
| fi | |
| if [ -n "${MACOS_X86_64_SHA}" ]; then | |
| cat <<EOFRUBY | |
| on_intel do | |
| url "https://github.com/ruphy/sshdb/releases/download/v#{version}/sshdb-macos-x86_64.tar.gz" | |
| sha256 "${MACOS_X86_64_SHA}" | |
| end | |
| EOFRUBY | |
| fi | |
| cat <<EOFRUBY | |
| end | |
| EOFRUBY | |
| fi | |
| if [ -n "${LINUX_X86_64_SHA}" ]; then | |
| cat <<EOFRUBY | |
| on_linux do | |
| on_intel do | |
| url "https://github.com/ruphy/sshdb/releases/download/v#{version}/sshdb-linux-x86_64.tar.gz" | |
| sha256 "${LINUX_X86_64_SHA}" | |
| end | |
| end | |
| EOFRUBY | |
| fi | |
| cat <<'EOFRUBY' | |
| def install | |
| bin.install "sshdb" | |
| end | |
| test do | |
| system "#{bin}/sshdb", "--help" | |
| end | |
| end | |
| EOFRUBY | |
| } > "${TAP_DIR}/Formula/sshdb.rb" | |
| cd "${TAP_DIR}" | |
| git add Formula/sshdb.rb | |
| if git diff --cached --quiet; then | |
| echo "No changes to commit for tap." | |
| else | |
| git commit -m "sshdb ${VERSION}" | |
| git push origin HEAD:main | |
| fi | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: ${{ github.ref }} | |
| name: Release ${{ steps.tag.outputs.VERSION }} | |
| body_path: release-notes.md | |
| files: | | |
| artifacts/*/sshdb-*.tar.gz | |
| artifacts/*/sshdb-*.zip | |
| checksums.txt | |
| draft: false | |
| prerelease: false | |
| - name: Checkout main branch | |
| run: | | |
| git config --global user.name "sshdb-release-bot" | |
| git config --global user.email "sshdb-release-bot@users.noreply.github.com" | |
| git checkout main || git checkout master | |
| - name: Update Cargo.toml with release version | |
| run: | | |
| VERSION="${{ steps.tag.outputs.VERSION }}" | |
| sed -i.bak "s/^version = \".*\"/version = \"${VERSION}\"/" Cargo.toml | |
| rm Cargo.toml.bak | |
| git add Cargo.toml | |
| git commit -m "chore: update version to ${VERSION} for release" || echo "No changes to commit" | |
| - name: Bump Cargo.toml to dev version | |
| run: | | |
| VERSION="${{ steps.tag.outputs.VERSION }}" | |
| sed -i.bak "s/^version = \".*\"/version = \"${VERSION}-dev\"/" Cargo.toml | |
| rm Cargo.toml.bak | |
| git add Cargo.toml | |
| git commit -m "chore: bump version to ${VERSION}-dev" || echo "No changes to commit" | |
| - name: Push version updates | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }} | |
| git push origin main || git push origin master |