mirror of
https://github.com/aaif-goose/goose.git
synced 2026-07-03 14:10:03 +02:00
add canary release workflow
This commit is contained in:
@@ -0,0 +1,225 @@
|
||||
# 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: Install Rust Toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
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) Bundle Desktop App (macOS only) - builds goosed and Electron app
|
||||
# ------------------------------------------------------------
|
||||
bundle-desktop:
|
||||
# Only run on macOS
|
||||
runs-on: macos-latest
|
||||
# "needs: []" ensures it runs in parallel with build-cli
|
||||
needs: []
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Rust
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
|
||||
- name: Cache Cargo registry
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cargo/registry
|
||||
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-cargo-registry-
|
||||
|
||||
- name: Cache Cargo index
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cargo/index
|
||||
key: ${{ runner.os }}-cargo-index
|
||||
restore-keys: |
|
||||
${{ runner.os }}-cargo-index
|
||||
|
||||
- name: Cache Cargo build
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: target
|
||||
key: ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-cargo-build-
|
||||
|
||||
- name: Build goosed
|
||||
run: cargo build --release -p goose-server
|
||||
|
||||
- name: Copy binary into Electron folder
|
||||
run: cp target/release/goosed ui/desktop/src/bin/goosed
|
||||
|
||||
- name: Add MacOS certs for signing and notarization
|
||||
run: ./add-macos-cert.sh
|
||||
working-directory: ui/desktop
|
||||
env:
|
||||
CERTIFICATE_OSX_APPLICATION: ${{ secrets.CERTIFICATE_OSX_APPLICATION }}
|
||||
CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 'lts/*'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
working-directory: ui/desktop
|
||||
|
||||
- name: Make default Goose App
|
||||
run: |
|
||||
attempt=0
|
||||
max_attempts=2
|
||||
until [ $attempt -ge $max_attempts ]; do
|
||||
npm run bundle:default && break
|
||||
attempt=$((attempt + 1))
|
||||
echo "Attempt $attempt failed. Retrying..."
|
||||
sleep 5
|
||||
done
|
||||
if [ $attempt -ge $max_attempts ]; then
|
||||
echo "Action failed after $max_attempts attempts."
|
||||
exit 1
|
||||
fi
|
||||
working-directory: ui/desktop
|
||||
env:
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
|
||||
- name: Upload Desktop artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Goose-darwin-arm64
|
||||
path: ui/desktop/out/Goose-darwin-arm64/Goose.zip
|
||||
|
||||
- name: Quick launch test (macOS)
|
||||
run: |
|
||||
# Ensure no quarantine attributes (if needed)
|
||||
xattr -cr "ui/desktop/out/Goose-darwin-arm64/Goose.app"
|
||||
echo "Opening Goose.app..."
|
||||
open -g "ui/desktop/out/Goose-darwin-arm64/Goose.app"
|
||||
|
||||
# Give the app a few seconds to start and write logs
|
||||
sleep 5
|
||||
|
||||
# Check if it's running
|
||||
if pgrep -f "Goose.app/Contents/MacOS/Goose" > /dev/null; then
|
||||
echo "App appears to be running."
|
||||
else
|
||||
echo "App did not stay open. Possible crash or startup error."
|
||||
exit 1
|
||||
fi
|
||||
LOGFILE="$HOME/Library/Application Support/Goose/logs/main.log"
|
||||
# Print the log and verify "Starting goosed"
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
echo "===== Log file contents ====="
|
||||
cat "$LOGFILE"
|
||||
echo "============================="
|
||||
# Check for evidence it ran in the logs:
|
||||
if grep -F "ChatWindow loaded" "$LOGFILE"; then
|
||||
echo "Confirmed: 'ChatWindow loaded' found in logs!"
|
||||
else
|
||||
echo "Did not find 'ChatWindow loaded' in logs. Failing..."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "No log file found at $LOGFILE. Exiting with failure."
|
||||
exit 1
|
||||
fi
|
||||
# Kill the app to clean up
|
||||
pkill -f "Goose.app/Contents/MacOS/Goose"
|
||||
|
||||
# ------------------------------------
|
||||
# 3) Create/Update GitHub Release
|
||||
# ------------------------------------
|
||||
release:
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [ build-cli, 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
|
||||
@@ -193,7 +193,7 @@ jobs:
|
||||
|
||||
- [📱 macOS Desktop App (Universal, signed)](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/Goose-darwin-arm64.zip)
|
||||
|
||||
The app is signed and notarized for macOS. After downloading, unzip the file and drag the Goose.app to your Applications folder.
|
||||
After downloading, unzip the file and drag the Goose.app to your Applications folder. The app is signed and notarized for macOS.
|
||||
|
||||
This link is provided by nightly.link and will work even if you're not logged into GitHub.
|
||||
edit-mode: replace
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# This workflow is main release, needs to be manually tagged & pushed.
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v1.*"
|
||||
- 'test.*' # TODO: remove after testing
|
||||
workflow_dispatch:
|
||||
|
||||
name: Release
|
||||
|
||||
|
||||
Reference in New Issue
Block a user