docs(readme): include new banner asset in project introduction #4
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 | ||
|
Check failure on line 1 in .github/workflows/release.yml
|
||
| on: | ||
| push: | ||
| tags: | ||
| - 'v*' | ||
| workflow_dispatch: | ||
| permissions: | ||
| contents: write | ||
| jobs: | ||
| build: | ||
| name: Build ${{ matrix.target }} | ||
| runs-on: ${{ matrix.os }} | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| include: | ||
| - target: aarch64-apple-darwin | ||
| os: macos-latest | ||
| - target: x86_64-apple-darwin | ||
| os: macos-latest | ||
| - target: x86_64-unknown-linux-gnu | ||
| os: ubuntu-latest | ||
| - target: aarch64-unknown-linux-gnu | ||
| os: ubuntu-latest | ||
| - target: x86_64-pc-windows-msvc | ||
| os: windows-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - name: Install Rust | ||
| uses: dtolnay/rust-toolchain@stable | ||
| with: | ||
| targets: ${{ matrix.target }} | ||
| - name: Install cross (Linux ARM) | ||
| if: matrix.target == 'aarch64-unknown-linux-gnu' | ||
| run: cargo install cross --git https://github.com/cross-rs/cross | ||
| - name: Build (cross) | ||
| if: matrix.target == 'aarch64-unknown-linux-gnu' | ||
| run: cross build --release --target ${{ matrix.target }} | ||
| - name: Build (native) | ||
| if: matrix.target != 'aarch64-unknown-linux-gnu' | ||
| run: cargo build --release --target ${{ matrix.target }} | ||
| - name: Package (Unix) | ||
| if: runner.os != 'Windows' | ||
| run: | | ||
| cd target/${{ matrix.target }}/release | ||
| tar czf ../../../torah-${{ matrix.target }}.tar.gz torah | ||
| cd ../../.. | ||
| - name: Package (Windows) | ||
| if: runner.os == 'Windows' | ||
| run: | | ||
| cd target/${{ matrix.target }}/release | ||
| 7z a ../../../torah-${{ matrix.target }}.zip torah.exe | ||
| cd ../../.. | ||
| - name: Upload artifact | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: torah-${{ matrix.target }} | ||
| path: torah-${{ matrix.target }}.* | ||
| release: | ||
| name: Create Release | ||
| needs: build | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - name: Download all artifacts | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| path: artifacts | ||
| merge-multiple: true | ||
| - name: Generate SHA256 checksums | ||
| run: | | ||
| cd artifacts | ||
| sha256sum torah-* > SHA256SUMS.txt | ||
| cat SHA256SUMS.txt | ||
| - name: Create GitHub Release | ||
| uses: softprops/action-gh-release@v2 | ||
| with: | ||
| generate_release_notes: true | ||
| files: | | ||
| artifacts/torah-*.tar.gz | ||
| artifacts/torah-*.zip | ||
| artifacts/SHA256SUMS.txt | ||
| publish-npm: | ||
| name: Publish to npm | ||
| needs: release | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: 20 | ||
| registry-url: https://registry.npmjs.org | ||
| - name: Download all artifacts | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| path: artifacts | ||
| merge-multiple: true | ||
| - name: Setup npm package | ||
| run: | | ||
| mkdir -p npm-pkg/bin | ||
| cp npm/package.json npm-pkg/ | ||
| cp npm/install.js npm-pkg/ | ||
| cp npm/bin/run.js npm-pkg/bin/ | ||
| cd npm-pkg | ||
| # Set version from git tag | ||
| VERSION=${GITHUB_REF#refs/tags/v} | ||
| node -e "const p=require('./package.json'); p.name='@assafdori/torah-cli'; p.version='$VERSION'; require('fs').writeFileSync('package.json', JSON.stringify(p,null,2))" | ||
| - name: Publish | ||
| run: cd npm-pkg && npm publish --access=public | ||
| env: | ||
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | ||
| update-homebrew-tap: | ||
| name: Update Homebrew Tap | ||
| needs: release | ||
| runs-on: ubuntu-latest | ||
| if: startsWith(github.ref, 'refs/tags/v') && secrets.HOMEBREW_TAP_GITHUB_TOKEN != '' | ||
| steps: | ||
| - name: Download all artifacts | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| path: artifacts | ||
| merge-multiple: true | ||
| - name: Resolve checksums | ||
| id: checksums | ||
| run: | | ||
| set -euo pipefail | ||
| SHA_MACOS_ARM=$(sha256sum artifacts/torah-aarch64-apple-darwin.tar.gz | awk '{print $1}') | ||
| SHA_MACOS_INTEL=$(sha256sum artifacts/torah-x86_64-apple-darwin.tar.gz | awk '{print $1}') | ||
| SHA_LINUX_ARM=$(sha256sum artifacts/torah-aarch64-unknown-linux-gnu.tar.gz | awk '{print $1}') | ||
| SHA_LINUX_INTEL=$(sha256sum artifacts/torah-x86_64-unknown-linux-gnu.tar.gz | awk '{print $1}') | ||
| VERSION="${GITHUB_REF#refs/tags/v}" | ||
| echo "version=${VERSION}" >> "$GITHUB_OUTPUT" | ||
| echo "sha_macos_arm=${SHA_MACOS_ARM}" >> "$GITHUB_OUTPUT" | ||
| echo "sha_macos_intel=${SHA_MACOS_INTEL}" >> "$GITHUB_OUTPUT" | ||
| echo "sha_linux_arm=${SHA_LINUX_ARM}" >> "$GITHUB_OUTPUT" | ||
| echo "sha_linux_intel=${SHA_LINUX_INTEL}" >> "$GITHUB_OUTPUT" | ||
| - name: Checkout tap repository | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| repository: assafdori/homebrew-tap | ||
| token: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }} | ||
| path: homebrew-tap | ||
| - name: Write formula | ||
| run: | | ||
| set -euo pipefail | ||
| mkdir -p homebrew-tap/Formula | ||
| cat > homebrew-tap/Formula/torah.rb <<EOF | ||
| class Torah < Formula | ||
| desc "Torah TUI for terminal reading" | ||
| homepage "https://github.com/assafdori/torah-cli" | ||
| version "${{ steps.checksums.outputs.version }}" | ||
| on_macos do | ||
| on_arm do | ||
| url "https://github.com/assafdori/torah-cli/releases/download/v${{ steps.checksums.outputs.version }}/torah-aarch64-apple-darwin.tar.gz" | ||
| sha256 "${{ steps.checksums.outputs.sha_macos_arm }}" | ||
| end | ||
| on_intel do | ||
| url "https://github.com/assafdori/torah-cli/releases/download/v${{ steps.checksums.outputs.version }}/torah-x86_64-apple-darwin.tar.gz" | ||
| sha256 "${{ steps.checksums.outputs.sha_macos_intel }}" | ||
| end | ||
| end | ||
| on_linux do | ||
| on_arm do | ||
| url "https://github.com/assafdori/torah-cli/releases/download/v${{ steps.checksums.outputs.version }}/torah-aarch64-unknown-linux-gnu.tar.gz" | ||
| sha256 "${{ steps.checksums.outputs.sha_linux_arm }}" | ||
| end | ||
| on_intel do | ||
| url "https://github.com/assafdori/torah-cli/releases/download/v${{ steps.checksums.outputs.version }}/torah-x86_64-unknown-linux-gnu.tar.gz" | ||
| sha256 "${{ steps.checksums.outputs.sha_linux_intel }}" | ||
| end | ||
| end | ||
| def install | ||
| bin.install "torah" | ||
| end | ||
| test do | ||
| assert_match "Usage", shell_output("#{bin}/torah --help") | ||
| end | ||
| end | ||
| EOF | ||
| - name: Commit and push formula update | ||
| run: | | ||
| set -euo pipefail | ||
| cd homebrew-tap | ||
| git config user.name "github-actions[bot]" | ||
| git config user.email "github-actions[bot]@users.noreply.github.com" | ||
| git add Formula/torah.rb | ||
| git diff --staged --quiet && exit 0 | ||
| git commit -m "torah v${{ steps.checksums.outputs.version }}" | ||
| git push | ||