Skip to content

Commit 665f63a

Browse files
committed
Tooling: add self-hosted macOS gh runner
The one they have has been getting expensive.
1 parent 233c8dd commit 665f63a

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ permissions:
1111
jobs:
1212
build:
1313
name: Build (${{ matrix.arch }})
14-
runs-on: macos-latest
14+
runs-on: [self-hosted, macOS, ARM64]
1515
timeout-minutes: 30
1616
strategy:
1717
fail-fast: false

CONTRIBUTING.md

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ For an universal installer:
126126
127127
- `rustup target add x86_64-apple-darwin` once
128128
- Then `cd apps/desktop && pnpm tauri build --target universal-apple-darwin` each time.
129-
- Then the binary is at `apps/desktop/src-tauri/target/universal-apple-darwin/release/bundle/dmg/Cmdr_0.1.0_universal.dmg`
129+
- Then the binary is at
130+
`apps/desktop/src-tauri/target/universal-apple-darwin/release/bundle/dmg/Cmdr_0.1.0_universal.dmg`
130131
131132
## Agent integration (MCP)
132133
@@ -149,12 +150,15 @@ This snippet will likely come handy:
149150
150151
```json
151152
{
152-
"mcpServers": {
153-
"tauri": {
154-
"command": "npx",
155-
"args": ["-y", "@hypothesi/tauri-mcp-server"]
156-
}
153+
"mcpServers": {
154+
"tauri": {
155+
"command": "npx",
156+
"args": [
157+
"-y",
158+
"@hypothesi/tauri-mcp-server"
159+
]
157160
}
161+
}
158162
}
159163
```
160164
@@ -233,6 +237,27 @@ To run the license server locally (for testing license activation, generating te
233237
file with Paddle and Resend secrets. See the [license server README](apps/license-server/README.md#local-development)
234238
for the full setup. Ask a maintainer for the current values if you don't have dashboard access.
235239

240+
## Self-hosted GitHub Actions macOS runner (maintainers)
241+
242+
The release workflow runs on a self-hosted macOS runner and can save a bunch of GitHub Actions credits.
243+
244+
To set one up:
245+
246+
1. Go to [repo](https://github.com/vdavid/cmdr) → **Settings****Actions****Runners****New self-hosted runner**
247+
2. Select **macOS** and **ARM64**
248+
3. Follow GitHub's instructions to download, configure, and register the runner, and run it to test it works.
249+
4. Quit it, then install it as a launchd service so it starts on boot:
250+
```bash
251+
./svc.sh install
252+
./svc.sh start
253+
```
254+
5. Make sure the runner has all build dependencies: Rust (`rustup`), Node, pnpm, Go (all via `mise install`), and Xcode
255+
CLI tools. You need these to build the app anyway.
256+
6. Prevent sleep in **System Settings → Energy** so the runner stays available during releases.
257+
258+
The runner auto-receives the labels `self-hosted`, `macOS`, `ARM64`, which the release workflow matches on. Apple
259+
Silicon can cross-compile x86_64 and universal builds, so a single ARM64 runner handles all three architectures. Yay!
260+
236261
## Infrastructure access (maintainers)
237262
238263
If you have SSH access to the production server (`ssh hetzner`) and credentials for services like Umami, Cloudflare,

0 commit comments

Comments
 (0)