Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 111 additions & 0 deletions .github/workflows/build-all-platforms.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: Build All Platforms

on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
tag:
description: "Tag to release (e.g., v0.1.2). Leave empty to use current ref."
required: false
type: string

permissions:
contents: write

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: Build (${{ matrix.platform }})
strategy:
fail-fast: false
matrix:
include:
# Windows
- platform: windows-latest
target: x86_64-pc-windows-msvc
args: ""

# macOS Intel
- platform: macos-13
target: x86_64-apple-darwin
args: "--target x86_64-apple-darwin"

# macOS Apple Silicon
- platform: macos-14
target: aarch64-apple-darwin
args: "--target aarch64-apple-darwin"

# Linux
- platform: ubuntu-22.04
target: x86_64-unknown-linux-gnu
args: ""

runs-on: ${{ matrix.platform }}
timeout-minutes: 60

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set release tag
shell: bash
run: |
set -euo pipefail
TAG_INPUT="${{ inputs.tag }}"
if [ -n "$TAG_INPUT" ]; then
if [[ "$TAG_INPUT" == v* ]]; then
TAG="$TAG_INPUT"
else
TAG="v$TAG_INPUT"
fi
else
TAG="${GITHUB_REF_NAME}"
fi
echo "RELEASE_TAG=$TAG" >> "$GITHUB_ENV"

# Linux dependencies
- name: Install Linux dependencies
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.27.0

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}

- name: Build Tauri app
uses: tauri-apps/tauri-action@v0.5.17
env:
CI: true
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: ${{ env.RELEASE_TAG }}
releaseName: OpenWork ${{ env.RELEASE_TAG }}
releaseBody: |
## Downloads
- **Windows**: `.exe` or `.msi` installer
- **macOS**: `.dmg` disk image
- **Linux**: `.AppImage` or `.deb` package
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
19 changes: 8 additions & 11 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,17 +97,14 @@ This captures OpenWork’s preferred reactivity + UI state patterns (avoid globa

## Skill: Trigger a Release

OpenWork releases are built by GitHub Actions (`Release App`). A release is triggered by pushing a `v*` tag (e.g. `v0.1.6`).
OpenWork releases are built by GitHub Actions (`Release App`) and publish signed + notarized macOS DMGs to the GitHub Release for a tag.

### Standard release (recommended)

1. Ensure `main` is green and up to date.
2. Bump versions (keep these in sync):
- `apps/openwork/package.json` (`version`)
- `apps/openwork/src-tauri/tauri.conf.json` (`version`)
- `apps/openwork/src-tauri/Cargo.toml` (`version`)
3. Merge the version bump to `main`.
4. Create and push a tag:
1. Bump versions (at minimum `apps/openwork/package.json`, and keep Tauri/Rust versions in sync).
2. Merge to `main`.
3. Create and push a version tag:

- `git tag vX.Y.Z`
- `git push origin vX.Y.Z`

Expand All @@ -121,7 +118,7 @@ If the workflow needs to be re-run for an existing tag (e.g. notarization retry)

### Verify

- Runs: `gh run list --repo different-ai/openwork --workflow "Release App" --limit 5`
- Release: `gh release view vX.Y.Z --repo different-ai/openwork`
- `gh run list --repo different-ai/openwork --workflow "Release App" --limit 5`
- `gh release view vX.Y.Z --repo different-ai/openwork`

Confirm the DMG assets are attached and versioned correctly.
Confirm the DMG assets are attached and versioned correctly.
2 changes: 1 addition & 1 deletion src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading