From 426da76cd33bcd90b719b76e3ef4d5a94b9b9972 Mon Sep 17 00:00:00 2001 From: Michael Neale Date: Tue, 4 Mar 2025 08:12:14 +1100 Subject: [PATCH] building intel mac app (#878) Co-authored-by: Max Novich --- .github/workflows/bundle-desktop-intel.yml | 258 +++++++++++++ .github/workflows/bundle-desktop.yml | 48 ++- .github/workflows/ci.yml | 27 +- .../workflows/pr-comment-bundle-desktop.yml | 96 ----- .github/workflows/pr-comment-bundle-intel.yml | 83 ++++ .../workflows/pr-comment-bundle-windows.yml | 80 ++++ .github/workflows/pr-comment-bundle.yml | 83 ++++ .github/workflows/release.yml | 18 +- Cargo.lock | 357 +++++++++--------- Justfile | 21 ++ ui/desktop/forge.config.ts | 5 +- ui/desktop/package.json | 1 + 12 files changed, 795 insertions(+), 282 deletions(-) create mode 100644 .github/workflows/bundle-desktop-intel.yml delete mode 100644 .github/workflows/pr-comment-bundle-desktop.yml create mode 100644 .github/workflows/pr-comment-bundle-intel.yml create mode 100644 .github/workflows/pr-comment-bundle-windows.yml create mode 100644 .github/workflows/pr-comment-bundle.yml diff --git a/.github/workflows/bundle-desktop-intel.yml b/.github/workflows/bundle-desktop-intel.yml new file mode 100644 index 00000000..11894814 --- /dev/null +++ b/.github/workflows/bundle-desktop-intel.yml @@ -0,0 +1,258 @@ +# This is a **reuseable** workflow that bundles the Desktop App for Intel macOS. +# It doesn't get triggered on its own. It gets used in multiple workflows: +# - release.yml +# - canary.yml +# - pr-comment-bundle-desktop.yml +on: + workflow_call: + inputs: + version: + description: 'Version to set for the build' + required: false + default: "" + type: string + signing: + description: 'Whether to perform signing and notarization' + required: false + default: false + type: boolean + quick_test: + description: 'Whether to perform the quick launch test' + required: false + default: true + type: boolean + secrets: + CERTIFICATE_OSX_APPLICATION: + description: 'Certificate for macOS application signing' + required: false + CERTIFICATE_PASSWORD: + description: 'Password for the macOS certificate' + required: false + APPLE_ID: + description: 'Apple ID for notarization' + required: false + APPLE_ID_PASSWORD: + description: 'Password for the Apple ID' + required: false + APPLE_TEAM_ID: + description: 'Apple Team ID' + required: false + +name: Reusable workflow to bundle desktop app for Intel Mac + +jobs: + bundle-desktop-intel: + runs-on: macos-latest + name: Bundle Desktop App on Intel macOS + steps: + # Check initial disk space + - name: Check initial disk space + run: df -h + + # Validate Signing Secrets if signing is enabled + - name: Validate Signing Secrets + if: ${{ inputs.signing }} + run: | + if [[ -z "${{ secrets.CERTIFICATE_OSX_APPLICATION }}" ]]; then + echo "Error: CERTIFICATE_OSX_APPLICATION secret is required for signing." + exit 1 + fi + if [[ -z "${{ secrets.CERTIFICATE_PASSWORD }}" ]]; then + echo "Error: CERTIFICATE_PASSWORD secret is required for signing." + exit 1 + fi + if [[ -z "${{ secrets.APPLE_ID }}" ]]; then + echo "Error: APPLE_ID secret is required for signing." + exit 1 + fi + if [[ -z "${{ secrets.APPLE_ID_PASSWORD }}" ]]; then + echo "Error: APPLE_ID_PASSWORD secret is required for signing." + exit 1 + fi + if [[ -z "${{ secrets.APPLE_TEAM_ID }}" ]]; then + echo "Error: APPLE_TEAM_ID secret is required for signing." + exit 1 + fi + echo "All required signing secrets are present." + + - name: Checkout code + uses: actions/checkout@v4 + + # Update versions before build + - name: Update versions + if: ${{ inputs.version != '' }} + run: | + # Update version in Cargo.toml + sed -i.bak 's/^version = ".*"/version = "'${{ inputs.version }}'"/' Cargo.toml + rm -f Cargo.toml.bak + + # Update version in package.json + cd ui/desktop + npm version ${{ inputs.version }} --no-git-tag-version --allow-same-version + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + targets: x86_64-apple-darwin + + # Pre-build cleanup to ensure enough disk space + - name: Pre-build cleanup + run: | + echo "Performing pre-build cleanup..." + # Clean npm cache + npm cache clean --force || true + # Clean any previous build artifacts + rm -rf target || true + # Clean Homebrew cache + brew cleanup || true + # Remove unnecessary large directories + rm -rf ~/Library/Caches/* || true + # Check disk space after cleanup + df -h + + - name: Cache Cargo registry + uses: actions/cache@v3 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-intel-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-intel-cargo-registry- + + - name: Cache Cargo index + uses: actions/cache@v3 + with: + path: ~/.cargo/index + key: ${{ runner.os }}-intel-cargo-index + restore-keys: | + ${{ runner.os }}-intel-cargo-index + + - name: Cache Cargo build + uses: actions/cache@v3 + with: + path: target + key: ${{ runner.os }}-intel-cargo-build-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-intel-cargo-build- + + # Build specifically for Intel architecture + - name: Build goosed for Intel + run: cargo build --release -p goose-server --target x86_64-apple-darwin + + # Post-build cleanup to free space + - name: Post-build cleanup + run: | + echo "Performing post-build cleanup..." + # Remove debug artifacts + rm -rf target/debug || true + rm -rf target/x86_64-apple-darwin/debug || true + # Keep only what's needed for the next steps + rm -rf target/x86_64-apple-darwin/release/deps || true + rm -rf target/x86_64-apple-darwin/release/build || true + rm -rf target/x86_64-apple-darwin/release/incremental || true + # Check disk space after cleanup + df -h + + - name: Copy binary into Electron folder + run: cp target/x86_64-apple-darwin/release/goosed ui/desktop/src/bin/goosed + + - name: Add MacOS certs for signing and notarization + if: ${{ inputs.signing }} + run: ./scripts/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 + + # Configure Electron builder for Intel architecture + - name: Configure for Intel build + run: | + # Set the architecture to x64 for Intel Mac build + jq '.build.mac.target[0].arch = "x64"' package.json > package.json.tmp && mv package.json.tmp package.json + working-directory: ui/desktop + + # Check disk space before bundling + - name: Check disk space before bundling + run: df -h + + - name: Make Unsigned App + if: ${{ !inputs.signing }} + 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 + + - name: Make Signed App + if: ${{ inputs.signing }} + 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: Final cleanup before artifact upload + run: | + echo "Performing final cleanup..." + # Remove build artifacts that are no longer needed + rm -rf target || true + # Check disk space after cleanup + df -h + + - name: Upload Desktop artifact + uses: actions/upload-artifact@v4 + with: + name: Goose-darwin-x64 + path: ui/desktop/out/Goose-darwin-x64/Goose.zip + + - name: Quick launch test (macOS) + if: ${{ inputs.quick_test }} + run: | + # Ensure no quarantine attributes (if needed) + xattr -cr "ui/desktop/out/Goose-darwin-x64/Goose.app" + echo "Opening Goose.app..." + open -g "ui/desktop/out/Goose-darwin-x64/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 + # Kill the app to clean up + pkill -f "Goose.app/Contents/MacOS/Goose" \ No newline at end of file diff --git a/.github/workflows/bundle-desktop.yml b/.github/workflows/bundle-desktop.yml index 36929e38..a637d689 100644 --- a/.github/workflows/bundle-desktop.yml +++ b/.github/workflows/bundle-desktop.yml @@ -45,6 +45,10 @@ jobs: runs-on: macos-latest name: Bundle Desktop App on macOS steps: + # Check initial disk space + - name: Check initial disk space + run: df -h + # Validate Signing Secrets if signing is enabled - name: Validate Signing Secrets if: ${{ inputs.signing }} @@ -86,6 +90,21 @@ jobs: cd ui/desktop npm version ${{ inputs.version }} --no-git-tag-version --allow-same-version + # Pre-build cleanup to ensure enough disk space + - name: Pre-build cleanup + run: | + echo "Performing pre-build cleanup..." + # Clean npm cache + npm cache clean --force || true + # Clean any previous build artifacts + rm -rf target || true + # Clean Homebrew cache + brew cleanup || true + # Remove unnecessary large directories + rm -rf ~/Library/Caches/* || true + # Check disk space after cleanup + df -h + - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: @@ -115,10 +134,23 @@ jobs: restore-keys: | ${{ runner.os }}-cargo-build- - # Rest of the workflow remains the same... + # Build the project - name: Build goosed run: cargo build --release -p goose-server + # Post-build cleanup to free space + - name: Post-build cleanup + run: | + echo "Performing post-build cleanup..." + # Remove debug artifacts + rm -rf target/debug || true + # Keep only what's needed for the next steps + rm -rf target/release/deps || true + rm -rf target/release/build || true + rm -rf target/release/incremental || true + # Check disk space after cleanup + df -h + - name: Copy binary into Electron folder run: cp target/release/goosed ui/desktop/src/bin/goosed @@ -139,6 +171,10 @@ jobs: run: npm ci working-directory: ui/desktop + # Check disk space before bundling + - name: Check disk space before bundling + run: df -h + - name: Make Unsigned App if: ${{ !inputs.signing }} run: | @@ -177,6 +213,14 @@ jobs: APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + - name: Final cleanup before artifact upload + run: | + echo "Performing final cleanup..." + # Remove build artifacts that are no longer needed + rm -rf target || true + # Check disk space after cleanup + df -h + - name: Upload Desktop artifact uses: actions/upload-artifact@v4 with: @@ -202,4 +246,4 @@ jobs: exit 1 fi # Kill the app to clean up - pkill -f "Goose.app/Contents/MacOS/Goose" + pkill -f "Goose.app/Contents/MacOS/Goose" \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 34e5f7ef..1e183a46 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,6 +76,31 @@ jobs: cargo test working-directory: crates + # Add disk space cleanup before linting + - name: Check disk space before cleanup + run: df -h + + - name: Clean up disk space + run: | + echo "Cleaning up disk space..." + # Remove debug artifacts that are no longer needed after tests + rm -rf target/debug/deps + rm -rf target/debug/build + rm -rf target/debug/incremental + # Clean npm cache if it exists + npm cache clean --force || true + # Clean apt cache + sudo apt-get clean + # Remove unnecessary large directories + rm -rf ~/.cargo/registry/index || true + # Remove docker images if any + docker system prune -af || true + # Remove unused packages + sudo apt-get autoremove -y || true + + - name: Check disk space after cleanup + run: df -h + - name: Lint run: cargo clippy -- -D warnings @@ -104,4 +129,4 @@ jobs: uses: ./.github/workflows/bundle-desktop.yml if: github.event_name == 'pull_request' with: - signing: false + signing: false \ No newline at end of file diff --git a/.github/workflows/pr-comment-bundle-desktop.yml b/.github/workflows/pr-comment-bundle-desktop.yml deleted file mode 100644 index 32b30037..00000000 --- a/.github/workflows/pr-comment-bundle-desktop.yml +++ /dev/null @@ -1,96 +0,0 @@ -# This workflow is triggered by a comment on an issue or PR with the text ".bundle" -# It bundles the Desktop App, then creates a PR comment with a link to download the app. - -# IMPORTANT: issue_comment workflows only use files found on "main" branch to run. -# Do NOT allow on: pull_request since that allows a user to alter a file in a PR and exfil secrets for example. -# Only using issue_comment is the suggested workflow type. Comments on pull requests, and issues will trigger the issue_comment workflow event. -on: - issue_comment: - types: [created] - -# permissions needed for reacting to IssueOps commands on PRs -permissions: - pull-requests: write - checks: read - # issues: write - -name: Workflow to Bundle Desktop App - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - trigger-on-command: - name: Trigger on ".bundle" PR comment - runs-on: ubuntu-latest - outputs: - continue: ${{ steps.command.outputs.continue }} - # Cannot use github.event.pull_request.number since the trigger is 'issue_comment' - pr_number: ${{ steps.command.outputs.issue_number }} - steps: - - uses: github/command@v1.3.0 - id: command - with: - command: ".bundle" - skip_reviews: true - reaction: "eyes" - allowed_contexts: pull_request - - bundle-desktop: - # Only run this if ".bundle" command is detected. - needs: [trigger-on-command] - if: ${{ needs.trigger-on-command.outputs.continue == 'true' }} - uses: ./.github/workflows/bundle-desktop.yml - with: - signing: true - 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 }} - - bundle-desktop-windows: - # Only run this if ".bundle" command is detected. - needs: [trigger-on-command] - if: ${{ needs.trigger-on-command.outputs.continue == 'true' }} - uses: ./.github/workflows/bundle-desktop-windows.yml - with: - signing: true - secrets: - WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }} - WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} - - pr-comment: - name: PR Comment with Desktop App - runs-on: ubuntu-latest - needs: [trigger-on-command, bundle-desktop, bundle-desktop-windows] - permissions: - pull-requests: write - - steps: - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - merge-multiple: true - - - name: Comment on PR with download link - uses: peter-evans/create-or-update-comment@v4 - with: - issue-number: ${{ needs.trigger-on-command.outputs.pr_number }} - body: | - ### Desktop App for this PR - - The following builds are available for testing: - - - [📱 macOS Desktop App (arm64, signed)](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/Goose-darwin-arm64.zip) - - [🪟 Windows Desktop App (x64, signed)](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/desktop-windows-dist.zip) - - **macOS Instructions:** - After downloading, unzip the file and drag the Goose.app to your Applications folder. The app is signed and notarized for macOS. - - **Windows Instructions:** - After downloading, unzip the file and run Goose.exe. The app is signed for Windows. - - These links are provided by nightly.link and will work even if you're not logged into GitHub. diff --git a/.github/workflows/pr-comment-bundle-intel.yml b/.github/workflows/pr-comment-bundle-intel.yml new file mode 100644 index 00000000..217d51bc --- /dev/null +++ b/.github/workflows/pr-comment-bundle-intel.yml @@ -0,0 +1,83 @@ +# This workflow is triggered by a comment on an issue or PR with the text ".bundle-intel" +# It bundles the Intel Desktop App, then creates a PR comment with a link to download the app. + +on: + issue_comment: + types: [created] + workflow_dispatch: + inputs: + pr_number: + description: 'PR number to comment on' + required: true + type: string + +# permissions needed for reacting to IssueOps commands on PRs +permissions: + pull-requests: write + checks: read + +name: Bundle Intel Desktop App + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + trigger-on-command: + name: Trigger on ".bundle-intel" PR comment + runs-on: ubuntu-latest + outputs: + continue: ${{ steps.command.outputs.continue || github.event_name == 'workflow_dispatch' }} + # Cannot use github.event.pull_request.number since the trigger is 'issue_comment' + pr_number: ${{ steps.command.outputs.issue_number || github.event.inputs.pr_number }} + steps: + - if: ${{ github.event_name == 'issue_comment' }} + uses: github/command@v1.3.0 + id: command + with: + command: ".bundle-intel" + skip_reviews: true + reaction: "eyes" + allowed_contexts: pull_request + + bundle-desktop-intel: + # Only run this if ".bundle-intel" command is detected. + needs: [trigger-on-command] + if: ${{ needs.trigger-on-command.outputs.continue == 'true' }} + uses: ./.github/workflows/bundle-desktop-intel.yml + with: + signing: true + 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 }} + + pr-comment-intel: + name: PR Comment with macOS Intel App + runs-on: ubuntu-latest + needs: [trigger-on-command, bundle-desktop-intel] + permissions: + pull-requests: write + + steps: + - name: Download Intel artifact + uses: actions/download-artifact@v4 + with: + name: Goose-darwin-x64 + path: intel-dist + + - name: Comment on PR with Intel download link + uses: peter-evans/create-or-update-comment@v4 + with: + issue-number: ${{ needs.trigger-on-command.outputs.pr_number }} + body: | + ### macOS Intel Desktop App (x64) + + [💻 Download macOS Desktop App (Intel x64, signed)](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/Goose-darwin-x64.zip) + + **Instructions:** + 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. \ No newline at end of file diff --git a/.github/workflows/pr-comment-bundle-windows.yml b/.github/workflows/pr-comment-bundle-windows.yml new file mode 100644 index 00000000..aa835706 --- /dev/null +++ b/.github/workflows/pr-comment-bundle-windows.yml @@ -0,0 +1,80 @@ +# This workflow is triggered by a comment on an issue or PR with the text ".bundle-windows" +# It bundles the Windows Desktop App, then creates a PR comment with a link to download the app. + +on: + issue_comment: + types: [created] + workflow_dispatch: + inputs: + pr_number: + description: 'PR number to comment on' + required: true + type: string + +# permissions needed for reacting to IssueOps commands on PRs +permissions: + pull-requests: write + checks: read + +name: Bundle Windows Desktop App + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + trigger-on-command: + name: Trigger on ".bundle-windows" PR comment + runs-on: ubuntu-latest + outputs: + continue: ${{ steps.command.outputs.continue || github.event_name == 'workflow_dispatch' }} + # Cannot use github.event.pull_request.number since the trigger is 'issue_comment' + pr_number: ${{ steps.command.outputs.issue_number || github.event.inputs.pr_number }} + steps: + - if: ${{ github.event_name == 'issue_comment' }} + uses: github/command@v1.3.0 + id: command + with: + command: ".bundle-windows" + skip_reviews: true + reaction: "eyes" + allowed_contexts: pull_request + + bundle-desktop-windows: + # Only run this if ".bundle-windows" command is detected. + needs: [trigger-on-command] + if: ${{ needs.trigger-on-command.outputs.continue == 'true' }} + uses: ./.github/workflows/bundle-desktop-windows.yml + with: + signing: false # false for now as we don't have a cert yet + secrets: + WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }} + WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} + + pr-comment-windows: + name: PR Comment with Windows App + runs-on: ubuntu-latest + needs: [trigger-on-command, bundle-desktop-windows] + permissions: + pull-requests: write + + steps: + - name: Download Windows artifact + uses: actions/download-artifact@v4 + with: + name: desktop-windows-dist + path: windows-dist + + - name: Comment on PR with Windows download link + uses: peter-evans/create-or-update-comment@v4 + with: + issue-number: ${{ needs.trigger-on-command.outputs.pr_number }} + body: | + ### Windows Desktop App + + [🪟 Download Windows Desktop App (x64, signed)](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/desktop-windows-dist.zip) + + **Instructions:** + After downloading, unzip the file and run Goose.exe. The app is signed for Windows. + + This link is provided by nightly.link and will work even if you're not logged into GitHub. \ No newline at end of file diff --git a/.github/workflows/pr-comment-bundle.yml b/.github/workflows/pr-comment-bundle.yml new file mode 100644 index 00000000..04221ee8 --- /dev/null +++ b/.github/workflows/pr-comment-bundle.yml @@ -0,0 +1,83 @@ +# This workflow is triggered by a comment on an issue or PR with the text ".bundle" +# It bundles the ARM64 Desktop App, then creates a PR comment with a link to download the app. + +on: + issue_comment: + types: [created] + workflow_dispatch: + inputs: + pr_number: + description: 'PR number to comment on' + required: true + type: string + +# permissions needed for reacting to IssueOps commands on PRs +permissions: + pull-requests: write + checks: read + +name: Bundle ARM64 Desktop App + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + trigger-on-command: + name: Trigger on ".bundle" PR comment + runs-on: ubuntu-latest + outputs: + continue: ${{ steps.command.outputs.continue || github.event_name == 'workflow_dispatch' }} + # Cannot use github.event.pull_request.number since the trigger is 'issue_comment' + pr_number: ${{ steps.command.outputs.issue_number || github.event.inputs.pr_number }} + steps: + - if: ${{ github.event_name == 'issue_comment' }} + uses: github/command@v1.3.0 + id: command + with: + command: ".bundle" + skip_reviews: true + reaction: "eyes" + allowed_contexts: pull_request + + bundle-desktop: + # Only run this if ".bundle" command is detected. + needs: [trigger-on-command] + if: ${{ needs.trigger-on-command.outputs.continue == 'true' }} + uses: ./.github/workflows/bundle-desktop.yml + with: + signing: true + 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 }} + + pr-comment-arm64: + name: PR Comment with macOS ARM64 App + runs-on: ubuntu-latest + needs: [trigger-on-command, bundle-desktop] + permissions: + pull-requests: write + + steps: + - name: Download ARM64 artifact + uses: actions/download-artifact@v4 + with: + name: Goose-darwin-arm64 + path: arm64-dist + + - name: Comment on PR with ARM64 download link + uses: peter-evans/create-or-update-comment@v4 + with: + issue-number: ${{ needs.trigger-on-command.outputs.pr_number }} + body: | + ### macOS ARM64 Desktop App (Apple Silicon) + + [📱 Download macOS Desktop App (arm64, signed)](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/Goose-darwin-arm64.zip) + + **Instructions:** + 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. \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0eb1b4e3..4db0a897 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -46,8 +46,22 @@ jobs: APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + # ------------------------------------------------------------ + # 4) Bundle Desktop App (macOS) + # ------------------------------------------------------------ + bundle-desktop-intel: + uses: ./.github/workflows/bundle-desktop-intel.yml + with: + signing: true + 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) Bundle Desktop App (Windows) +# # 5) Bundle Desktop App (Windows) # # ------------------------------------------------------------ # bundle-desktop-windows: # uses: ./.github/workflows/bundle-desktop-windows.yml @@ -60,7 +74,7 @@ jobs: # # WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} # ------------------------------------ - # 4) Create/Update GitHub Release + # 6) Create/Update GitHub Release # ------------------------------------ release: name: Release diff --git a/Cargo.lock b/Cargo.lock index c2faa4eb..21e8093a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -147,9 +147,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" [[package]] name = "arbitrary" @@ -165,7 +165,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -192,9 +192,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.18" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" +checksum = "310c9bcae737a48ef5cdee3174184e6d548b292739ede61a1f955ef76a738861" dependencies = [ "brotli", "flate2", @@ -225,7 +225,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -236,7 +236,7 @@ checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -267,18 +267,18 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" +checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e" dependencies = [ "arrayvec", ] [[package]] name = "aws-config" -version = "1.5.16" +version = "1.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50236e4d60fe8458de90a71c0922c761e41755adf091b1b03de1cef537179915" +checksum = "490aa7465ee685b2ced076bb87ef654a47724a7844e2c7d3af4e749ce5b875dd" dependencies = [ "aws-credential-types", "aws-runtime", @@ -343,9 +343,9 @@ dependencies = [ [[package]] name = "aws-sdk-bedrockruntime" -version = "1.74.0" +version = "1.75.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6938541d1948a543bca23303fec4cff9c36bf0e63b8fa3ae1b337bcb9d5b81af" +checksum = "2ddf7475b6f50a1a5be8edb1bcdf6e4ae00feed5b890d14a3f1f0e14d76f5a16" dependencies = [ "aws-credential-types", "aws-runtime", @@ -367,9 +367,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.59.0" +version = "1.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00a35fc7e74f5be45839eb753568535c074a592185dd0a2d406685018d581c43" +checksum = "60186fab60b24376d3e33b9ff0a43485f99efd470e3b75a9160c849741d63d56" dependencies = [ "aws-credential-types", "aws-runtime", @@ -389,9 +389,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.60.0" +version = "1.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fa655b4f313124ce272cbc38c5fef13793c832279cec750103e5e6b71a54b8" +checksum = "7033130ce1ee13e6018905b7b976c915963755aef299c1521897679d6cd4f8ef" dependencies = [ "aws-credential-types", "aws-runtime", @@ -411,9 +411,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.60.0" +version = "1.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1cfe5e16b90421ea031f4c6348b534ef442e76f6bf4a1b2b592c12cc2c6af9" +checksum = "c5c1cac7677179d622b4448b0d31bcb359185295dc6fca891920cfb17e2b5156" dependencies = [ "aws-credential-types", "aws-runtime", @@ -745,7 +745,7 @@ checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -856,7 +856,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.96", + "syn 2.0.98", "which", ] @@ -941,9 +941,9 @@ dependencies = [ [[package]] name = "built" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" +checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" [[package]] name = "bumpalo" @@ -971,9 +971,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "bytes-utils" @@ -987,9 +987,9 @@ dependencies = [ [[package]] name = "bytesize" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" +checksum = "2d2c12f985c78475a6b8d629afd0c360260ef34cfef52efccdcfd31972f81c2e" [[package]] name = "cast" @@ -999,9 +999,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.10" +version = "1.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" +checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" dependencies = [ "jobserver", "libc", @@ -1047,9 +1047,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", @@ -1057,7 +1057,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -1122,9 +1122,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.27" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" +checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" dependencies = [ "clap_builder", "clap_derive", @@ -1132,9 +1132,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" dependencies = [ "anstream", "anstyle", @@ -1145,14 +1145,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1478,7 +1478,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1502,7 +1502,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1513,14 +1513,14 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "data-encoding" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "dbus" @@ -1592,7 +1592,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1602,7 +1602,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1672,7 +1672,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1686,9 +1686,9 @@ dependencies = [ [[package]] name = "document-features" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" dependencies = [ "litrs", ] @@ -1707,15 +1707,15 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" [[package]] name = "either" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" [[package]] name = "encode_unicode" @@ -1740,9 +1740,9 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" @@ -1839,9 +1839,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" dependencies = [ "crc32fast", "miniz_oxide", @@ -1871,7 +1871,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1951,7 +1951,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2052,7 +2052,7 @@ checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2076,9 +2076,9 @@ checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "globset" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" +checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" dependencies = [ "aho-corasick", "bstr", @@ -2337,9 +2337,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" dependencies = [ "atomic-waker", "bytes", @@ -2547,7 +2547,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.7", + "h2 0.4.8", "http 1.2.0", "http-body 1.0.1", "httparse", @@ -2591,7 +2591,7 @@ dependencies = [ "tokio", "tokio-rustls 0.26.1", "tower-service", - "webpki-roots 0.26.7", + "webpki-roots 0.26.8", ] [[package]] @@ -2763,7 +2763,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2916,7 +2916,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3103,9 +3103,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libdbus-sys" @@ -3190,9 +3190,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "litemap" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "litrs" @@ -3212,9 +3212,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.25" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] name = "loop9" @@ -3331,7 +3331,7 @@ dependencies = [ "schemars", "serde", "serde_json", - "syn 2.0.96", + "syn 2.0.98", "tokio", ] @@ -3377,9 +3377,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ "adler2", "simd-adler32", @@ -3440,7 +3440,7 @@ checksum = "a7ce64b975ed4f123575d11afd9491f2e37bbd5813fbfbc0f09ae1fbddea74e0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3587,7 +3587,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3675,9 +3675,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "onig" @@ -3841,7 +3841,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3895,22 +3895,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3987,9 +3987,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "powerfmt" @@ -4039,7 +4039,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ "proc-macro2", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4091,7 +4091,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" dependencies = [ "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4153,7 +4153,7 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "rustls 0.23.23", "socket2", "thiserror 2.0.11", @@ -4171,7 +4171,7 @@ dependencies = [ "getrandom 0.2.15", "rand", "ring", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "rustls 0.23.23", "rustls-pki-types", "slab", @@ -4183,9 +4183,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" dependencies = [ "cfg_aliases", "libc", @@ -4333,9 +4333,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" dependencies = [ "bitflags 2.8.0", ] @@ -4469,7 +4469,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.4.7", + "h2 0.4.8", "http 1.2.0", "http-body 1.0.1", "http-body-util", @@ -4501,7 +4501,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.26.7", + "webpki-roots 0.26.8", "windows-registry", ] @@ -4516,15 +4516,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73" dependencies = [ "cc", "cfg-if", "getrandom 0.2.15", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] @@ -4565,9 +4564,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" @@ -4734,9 +4733,9 @@ dependencies = [ [[package]] name = "scc" -version = "2.3.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e1c91382686d21b5ac7959341fcb9780fa7c03773646995a87c950fa7be640" +checksum = "ea091f6cac2595aa38993f04f4ee692ed43757035c36e67c180b6828356385b1" dependencies = [ "sdd", ] @@ -4752,9 +4751,9 @@ dependencies = [ [[package]] name = "schemars" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" dependencies = [ "dyn-clone", "schemars_derive", @@ -4764,14 +4763,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4792,9 +4791,9 @@ dependencies = [ [[package]] name = "sdd" -version = "3.0.5" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478f121bb72bbf63c52c93011ea1791dca40140dfe13f8336c4c5ac952c33aa9" +checksum = "b07779b9b918cc05650cb30f404d4d7835d26df37c235eded8a6832e2fb82cca" [[package]] name = "seahash" @@ -4846,22 +4845,22 @@ checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4872,14 +4871,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.138" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" dependencies = [ "itoa", "memchr", @@ -4945,7 +4944,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4983,7 +4982,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5107,9 +5106,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "smawk" @@ -5127,12 +5126,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - [[package]] name = "spm_precompiled" version = "0.1.4" @@ -5181,9 +5174,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -5213,7 +5206,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5318,9 +5311,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.16.0" +version = "3.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" +checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if", "fastrand", @@ -5395,7 +5388,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5406,7 +5399,7 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "test-case-core", ] @@ -5447,7 +5440,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5458,7 +5451,7 @@ checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5627,7 +5620,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5688,9 +5681,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -5709,9 +5702,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap 2.7.1", "serde", @@ -5812,7 +5805,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5894,9 +5887,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ucd-trie" @@ -5956,9 +5949,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "unicode-linebreak" @@ -6074,16 +6067,16 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "uuid" -version = "1.12.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b" +checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.3.1", ] [[package]] @@ -6183,7 +6176,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "wasm-bindgen-shared", ] @@ -6218,7 +6211,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6290,9 +6283,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -6427,7 +6420,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -6438,7 +6431,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -6449,7 +6442,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -6460,9 +6453,15 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] +[[package]] +name = "windows-link" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" + [[package]] name = "windows-registry" version = "0.2.0" @@ -6718,9 +6717,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.25" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad699df48212c6cc6eb4435f35500ac6fd3b9913324f938aea302022ce19d310" +checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" dependencies = [ "memchr", ] @@ -6855,7 +6854,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "synstructure", ] @@ -6904,27 +6903,27 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "synstructure", ] @@ -6945,7 +6944,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -6967,32 +6966,32 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "zstd" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.2.1" +version = "7.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" +version = "2.0.14+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" dependencies = [ "cc", "pkg-config", diff --git a/Justfile b/Justfile index 6ab6f4d6..d7f01387 100644 --- a/Justfile +++ b/Justfile @@ -37,6 +37,12 @@ release-windows: fi echo "Windows executable and required DLLs created at ./target/x86_64-pc-windows-gnu/release/" +# Build for Intel Mac +release-intel: + @echo "Building release version for Intel Mac..." + cargo build --release --target x86_64-apple-darwin + @just copy-binary-intel + copy-binary BUILD_MODE="release": @if [ -f ./target/{{BUILD_MODE}}/goosed ]; then \ echo "Copying goosed binary from target/{{BUILD_MODE}}..."; \ @@ -46,6 +52,16 @@ copy-binary BUILD_MODE="release": exit 1; \ fi +# Copy binary command for Intel build +copy-binary-intel: + @if [ -f ./target/x86_64-apple-darwin/release/goosed ]; then \ + echo "Copying Intel goosed binary to ui/desktop/src/bin with permissions preserved..."; \ + cp -p ./target/x86_64-apple-darwin/release/goosed ./ui/desktop/src/bin/; \ + else \ + echo "Intel release binary not found."; \ + exit 1; \ + fi + # Copy Windows binary command copy-binary-windows: @powershell.exe -Command "if (Test-Path ./target/x86_64-pc-windows-gnu/release/goosed.exe) { \ @@ -111,6 +127,11 @@ make-ui-windows: exit 1; \ fi +# make GUI with latest binary +make-ui-intel: + @just release-intel + cd ui/desktop && npm run bundle:intel + # Setup langfuse server langfuse-server: #!/usr/bin/env bash diff --git a/ui/desktop/forge.config.ts b/ui/desktop/forge.config.ts index eec46b53..6ba21347 100644 --- a/ui/desktop/forge.config.ts +++ b/ui/desktop/forge.config.ts @@ -54,8 +54,9 @@ module.exports = { name: '@electron-forge/maker-zip', platforms: ['darwin', 'win32'], config: { - options: { - icon: 'src/images/icon.ico' + arch: process.env.ELECTRON_ARCH === 'x64' ? ['x64'] : ['arm64'], + options: { + icon: 'src/images/icon.ico' } } }, diff --git a/ui/desktop/package.json b/ui/desktop/package.json index 42483098..5a3ff8ab 100644 --- a/ui/desktop/package.json +++ b/ui/desktop/package.json @@ -13,6 +13,7 @@ "make": "electron-forge make", "bundle:default": "npm run make && cd out/Goose-darwin-arm64 && ditto -c -k --sequesterRsrc --keepParent Goose.app Goose.zip", "bundle:windows": "npm run make -- --platform=win32 --arch=x64 && node scripts/copy-windows-dlls.js", + "bundle:intel": " npm run make -- --arch=x64 && cd out/Goose-darwin-x64 && ditto -c -k --sequesterRsrc --keepParent Goose.app Goose_intel_mac.zip", "debug": "echo 'run --remote-debugging-port=8315' && lldb out/Goose-darwin-arm64/Goose.app", "test-e2e": "electron-forge start > /tmp/out.txt & ELECTRON_PID=$! && sleep 12 && if grep -q 'renderer: ChatWindow loaded' /tmp/out.txt; then echo 'process is running'; pkill -f electron; else echo 'not starting correctly'; cat /tmp/out.txt; pkill -f electron; exit 1; fi", "lint": "eslint \"src/**/*.{ts,tsx}\" --fix",