standardize how we checkout code, setup rust, reuse bundle-desktop wo… #1
Workflow file for this run
This file contains 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
# This workflow is for canary releases, automatically triggered by push to v1.0 branch. | ||
# This workflow is identical to "release.yml" with these exceptions: | ||
# - Triggered by push to v1.0 branch | ||
# - Github Release tagged as "canary" | ||
on: | ||
push: | ||
paths-ignore: | ||
- 'docs/**' | ||
branches: | ||
- v1.0 | ||
name: Canary | ||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.ref }} | ||
cancel-in-progress: true | ||
jobs: | ||
# ------------------------------------ | ||
# 1) Build CLI for multiple OS/Arch | ||
# ------------------------------------ | ||
build-cli: | ||
name: Build CLI | ||
runs-on: ${{ matrix.os }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
os: [ ubuntu-latest, macos-latest ] | ||
architecture: [ x86_64, aarch64 ] # Intel/AMD64, ARM64 | ||
include: | ||
- os: ubuntu-latest | ||
target-suffix: unknown-linux-gnu | ||
- os: macos-latest | ||
target-suffix: apple-darwin | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
- name: Setup Rust | ||
uses: actions-rust-lang/setup-rust-toolchain@v1 | ||
with: | ||
toolchain: stable | ||
target: ${{ matrix.architecture }}-${{ matrix.target-suffix }} | ||
- name: Install cross | ||
run: cargo install cross --git https://github.com/cross-rs/cross | ||
- name: Build CLI | ||
env: | ||
CROSS_NO_WARNINGS: 0 | ||
run: | | ||
export TARGET="${{ matrix.architecture }}-${{ matrix.target-suffix }}" | ||
rustup target add "${TARGET}" | ||
# 'cross' is used to cross-compile for different architectures (see Cross.toml) | ||
# Only 'goose' binary is needed for CLI release, skipping 'goosed' here | ||
cross build --release --target ${TARGET} -p goose-cli | ||
cd target/${TARGET}/release | ||
tar -cjf goose-${TARGET}.tar.bz2 goose | ||
echo "ARTIFACT=target/${TARGET}/release/goose-${TARGET}.tar.bz2" >> $GITHUB_ENV | ||
- name: Upload CLI artifact | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: goose-${{ matrix.architecture }}-${{ matrix.target-suffix }} | ||
path: ${{ env.ARTIFACT }} | ||
# ------------------------------------ | ||
# 2) Upload Install CLI Script (we only need to do this once) | ||
# ------------------------------------ | ||
install-script: | ||
name: Upload Install Script | ||
runs-on: ubuntu-latest | ||
needs: [ build-cli ] | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- uses: actions/upload-artifact@v4 | ||
with: | ||
name: install-cli.sh | ||
path: install-cli.sh | ||
# ------------------------------------------------------------ | ||
# 3) Bundle Desktop App (macOS only) - builds goosed and Electron app | ||
# ------------------------------------------------------------ | ||
bundle-desktop: | ||
uses: ./.github/workflows/reusable/bundle-desktop.yml | ||
secrets: | ||
CERTIFICATE_OSX_APPLICATION: ${{ secrets.CERTIFICATE_OSX_APPLICATION }} | ||
CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }} | ||
APPLE_ID: ${{ secrets.APPLE_ID }} | ||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} | ||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} | ||
# ------------------------------------ | ||
# 4) Create/Update GitHub Release | ||
# ------------------------------------ | ||
release: | ||
name: Release | ||
runs-on: ubuntu-latest | ||
needs: [ build-cli, install-script, bundle-desktop ] | ||
permissions: | ||
contents: write | ||
steps: | ||
- name: Download all artifacts | ||
uses: actions/download-artifact@v4 | ||
with: | ||
merge-multiple: true | ||
# Create/update the canary release | ||
- name: Release canary | ||
uses: ncipollo/release-action@v1 | ||
with: | ||
tag: canary | ||
name: Canary | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
artifacts: | | ||
goose-*.tar.bz2 | ||
Goose*.zip | ||
allowUpdates: true | ||
omitBody: true | ||
omitPrereleaseDuringUpdate: true |