name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
build:
name: Build binaries
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
name: linux-x86_64
- os: macos-latest
target: x86_64-apple-darwin
name: macos-x86_64
- os: macos-latest
target: aarch64-apple-darwin
name: macos-arm64
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Build
run: cargo build --release --target ${{ matrix.target }}
- name: Package
run: |
mkdir -p dist
if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
cp target/${{ matrix.target }}/release/aptitude.exe dist/aptitude-${{ matrix.name }}.exe
else
cp target/${{ matrix.target }}/release/aptitude dist/aptitude-${{ matrix.name }}
fi
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: aptitude-${{ matrix.name }}
path: dist/
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: dist/
- name: Create release
uses: softprops/action-gh-release@v1
with:
files: dist/*/aptitude-*
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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
run: cargo publish --allow-dirty
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
update-homebrew:
name: Update Homebrew formula
needs: release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
- name: Get version
id: version
run: echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- name: Download and calculate SHA256 hashes
id: hashes
run: |
VERSION="${{ steps.version.outputs.version }}"
BASE_URL="https://github.com/tatimblin/aptitude/releases/download/v${VERSION}"
# Download and calculate SHA256 for each binary
ARM64_SHA=$(curl -sL "${BASE_URL}/aptitude-macos-arm64" | sha256sum | cut -d' ' -f1)
X86_64_SHA=$(curl -sL "${BASE_URL}/aptitude-macos-x86_64" | sha256sum | cut -d' ' -f1)
LINUX_SHA=$(curl -sL "${BASE_URL}/aptitude-linux-x86_64" | sha256sum | cut -d' ' -f1)
echo "arm64_sha=${ARM64_SHA}" >> $GITHUB_OUTPUT
echo "x86_64_sha=${X86_64_SHA}" >> $GITHUB_OUTPUT
echo "linux_sha=${LINUX_SHA}" >> $GITHUB_OUTPUT
- name: Update Homebrew formula
run: |
VERSION="${{ steps.version.outputs.version }}"
ARM64_SHA="${{ steps.hashes.outputs.arm64_sha }}"
X86_64_SHA="${{ steps.hashes.outputs.x86_64_sha }}"
LINUX_SHA="${{ steps.hashes.outputs.linux_sha }}"
# Update version and SHA256 hashes in the formula
sed -i "s/version \".*\"/version \"${VERSION}\"/" aptitude.rb
sed -i "s/PLACEHOLDER_ARM64_SHA/${ARM64_SHA}/g" aptitude.rb
sed -i "s/PLACEHOLDER_X86_64_SHA/${X86_64_SHA}/g" aptitude.rb
sed -i "s/PLACEHOLDER_LINUX_SHA/${LINUX_SHA}/g" aptitude.rb
- name: Clone or update Homebrew tap
run: |
if [ ! -d "homebrew-aptitude" ]; then
git clone https://x-access-token:${{ secrets.HOMEBREW_TAP_TOKEN }}@github.com/tatimblin/homebrew-aptitude.git homebrew-aptitude
fi
cp aptitude.rb homebrew-aptitude/
- name: Commit and push to Homebrew tap
run: |
cd homebrew-aptitude
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git remote set-url origin https://x-access-token:${{ secrets.HOMEBREW_TAP_TOKEN }}@github.com/tatimblin/homebrew-aptitude.git
git add aptitude.rb
git commit -m "Update aptitude to v${{ steps.version.outputs.version }}" || exit 0
git push