I've built the mac-runner installer and committed it locally as 5933f97. #1

Merged
Joel merged 1 commit from build/affa852d into develop 2026-10-17 12:48:48 +00:00
Owner

What changed

code: 6 source files; .forgejo/workflows/gate.yml and .gitignore; run cases; 1 more kind(s) (+1054/−0)

build/affa852d → develop — 10 file(s), +1054/−0.

  • source: 6 file(s), +512/−0

  • other: 2 file(s), +45/−0

  • tests: 1 file(s), +367/−0

  • docs: 1 file(s), +130/−0

  • .forgejo/workflows/gate.yml

  • .gitignore

  • README.md

  • install.sh

  • lib/common.sh

  • lib/pins.sh

  • status.sh

  • tests/run.sh

  • tooling/gate/run.sh

  • uninstall.sh

Commits this build made itself

1 commit(s) came from the build's own working copy and are pushed as they are, not re-committed. The build committed them on its own branch develop; they ship as build/affa852d, the name this door chose. Measured against 15bec551 — the sha this working copy was cut at.

  • 5933f977 Add native Forgejo runner installer for the Apple Silicon Mac (#1000)

Why

I've built the mac-runner installer and committed it locally as 5933f97. The whole gate is green: 22 tests ran and passed. One thing works differently from the brief: code.forgejo.org publishes no darwin-arm64 binary, so install.sh builds the runner on your Mac from its checksum-pinned source archive. Nothing has run on a real Mac yet. Your first ./install.sh is the first real end-to-end run.

There is no macOS binary, so the installer builds one

I checked the last 50 forgejo-runner releases. All of them, up to the current v13.2.0, ship only Linux amd64 and arm64 binaries. So install.sh downloads two things and checks each against a SHA-256 pinned in lib/pins.sh. If either doesn't match, nothing is installed. The two downloads are:

  • The runner's source archive for v13.2.0 from code.forgejo.org. Its checksum matches the one Homebrew records independently for the same file.
  • Go 1.26.9 for darwin-arm64 from go.dev, used only to build the runner and kept in ~/Library/Caches/forgejo-runner.

The first install takes a few minutes. Later runs skip the build unless the pinned version changes. I cross-compiled the real v13.2.0 source here with the installer's exact build line. It produced an arm64 Mach-O binary that reports forgejo-runner version v13.2.0, which is the string the installer checks for.

What the scripts do

install.sh is safe to re-run. It works in this order: […]

Gate

./tooling/gate/run.sh ran 22 tests in 1.6s and exited 0 — green.

Flow engine

⚠ Not reviewed by the flow engine. The engine errored, so this change took the direct path: no flow engine command is set (flow.route_command)

Built by Connor's backend backburner (dispatch affa852d) in an isolated clone; shipped deterministically by ship.py. The full build notes were spoken in conversation and stored in memory (agent-dispatch:affa852d). Review is the gate.


The brief this build was given

Kept for provenance. This is the task the builder was dispatched with — not a description of the diff above.

Requested: For item #1000. In ZSDev/mac-runner (new, develop holds only an initial commit), build a pull-and-run installer for a native Forgejo Actions runner on Joel's MacBook Pro (Apple Silicon, macOS Tahoe 26.6+). Deliver: (1) install.sh — idempotent; checks macOS version, Apple Silicon and that Xcode 27.1 is selected (xcode-select -p, xcodebuild -version), refusing with a clear message otherwise; downloads the current forgejo-runner darwin-arm64 release from code.forgejo.org and verifies its checksum; registers it against https://git.zeinestone.me with a registration token Joel pastes at a prompt (never stored in the repo or echoed), labels macos-arm64 and xcode-27.1 using the host executor (no Docker); writes config under ~/Library/Application Support/forgejo-runner; installs a launchd LaunchAgent so it starts at login and restarts if it dies; logs to ~/Library/Logs/forgejo-runner. (2) uninstall.sh that unloads the agent and removes binary and config. (3) status.sh showing whether the agent is loaded and the runner is online. (4) README.md: what it is, the one-time steps (get a repo-level runner registration token from ZSDev/connor-ios Settings → Actions → Runners so the runner serves only that repo, clone, run ./install.sh), how to update, uninstall, and that builds only run while the Mac is awake. (5) a .gitignore covering any local config/token files, and a CI check on the Linux runner that runs shellcheck on the scripts. Ship no credentials. Scripts must run under macOS's /bin/bash 3.2 or declare zsh explicitly.

### What changed code: 6 source files; .forgejo/workflows/gate.yml and .gitignore; run cases; 1 more kind(s) (+1054/−0) `build/affa852d` → `develop` — 10 file(s), +1054/−0. - **source**: 6 file(s), +512/−0 - **other**: 2 file(s), +45/−0 - **tests**: 1 file(s), +367/−0 - **docs**: 1 file(s), +130/−0 - `.forgejo/workflows/gate.yml` - `.gitignore` - `README.md` - `install.sh` - `lib/common.sh` - `lib/pins.sh` - `status.sh` - `tests/run.sh` - `tooling/gate/run.sh` - `uninstall.sh` ### Commits this build made itself 1 commit(s) came from the build's own working copy and are pushed as they are, not re-committed. The build committed them on its own branch `develop`; they ship as `build/affa852d`, the name this door chose. Measured against `15bec551` — the sha this working copy was cut at. - `5933f977` Add native Forgejo runner installer for the Apple Silicon Mac (#1000) ### Why I've built the mac-runner installer and committed it locally as 5933f97. The whole gate is green: 22 tests ran and passed. One thing works differently from the brief: **code.forgejo.org publishes no darwin-arm64 binary**, so `install.sh` builds the runner on your Mac from its checksum-pinned source archive. Nothing has run on a real Mac yet. Your first `./install.sh` is the first real end-to-end run. ## There is no macOS binary, so the installer builds one I checked the last 50 forgejo-runner releases. All of them, up to the current v13.2.0, ship only Linux amd64 and arm64 binaries. So `install.sh` downloads two things and checks each against a SHA-256 pinned in `lib/pins.sh`. If either doesn't match, nothing is installed. The two downloads are: - **The runner's source archive** for v13.2.0 from code.forgejo.org. Its checksum matches the one Homebrew records independently for the same file. - **Go 1.26.9** for darwin-arm64 from go.dev, used only to build the runner and kept in `~/Library/Caches/forgejo-runner`. The first install takes a few minutes. Later runs skip the build unless the pinned version changes. I cross-compiled the real v13.2.0 source here with the installer's exact build line. It produced an arm64 Mach-O binary that reports `forgejo-runner version v13.2.0`, which is the string the installer checks for. ## What the scripts do `install.sh` is safe to re-run. It works in this order: […] ### Gate `./tooling/gate/run.sh` ran 22 tests in 1.6s and exited 0 — green. ### Flow engine > ⚠ **Not reviewed by the flow engine.** The engine errored, so this change took the direct path: no flow engine command is set (flow.route_command) Built by Connor's backend backburner (dispatch `affa852d`) in an isolated clone; shipped deterministically by `ship.py`. The full build notes were spoken in conversation and stored in memory (`agent-dispatch:affa852d`). Review is the gate. --- ### The brief this build was given _Kept for provenance. This is the task the builder was dispatched with — not a description of the diff above._ > Requested: For item #1000. In ZSDev/mac-runner (new, develop holds only an initial commit), build a pull-and-run installer for a native Forgejo Actions runner on Joel's MacBook Pro (Apple Silicon, macOS Tahoe 26.6+). Deliver: (1) install.sh — idempotent; checks macOS version, Apple Silicon and that Xcode 27.1 is selected (xcode-select -p, xcodebuild -version), refusing with a clear message otherwise; downloads the current forgejo-runner darwin-arm64 release from code.forgejo.org and verifies its checksum; registers it against https://git.zeinestone.me with a registration token Joel pastes at a prompt (never stored in the repo or echoed), labels macos-arm64 and xcode-27.1 using the host executor (no Docker); writes config under ~/Library/Application Support/forgejo-runner; installs a launchd LaunchAgent so it starts at login and restarts if it dies; logs to ~/Library/Logs/forgejo-runner. (2) uninstall.sh that unloads the agent and removes binary and config. (3) status.sh showing whether the agent is loaded and the runner is online. (4) README.md: what it is, the one-time steps (get a repo-level runner registration token from ZSDev/connor-ios Settings → Actions → Runners so the runner serves only that repo, clone, run ./install.sh), how to update, uninstall, and that builds only run while the Mac is awake. (5) a .gitignore covering any local config/token files, and a CI check on the Linux runner that runs shellcheck on the scripts. Ship no credentials. Scripts must run under macOS's /bin/bash 3.2 or declare zsh explicitly.
Add native Forgejo runner installer for the Apple Silicon Mac (#1000)
All checks were successful
gate / gate (pull_request) Successful in 13s
5933f97723
install.sh checks macOS 26.6+, Apple Silicon and a selected Xcode 27.1,
builds forgejo-runner v13.2.0 from its checksum-pinned source archive with a
checksum-pinned Go (upstream ships no darwin binary), registers it for
ZSDev/connor-ios with host labels macos-arm64 and xcode-27.1 using a token
read hidden and passed on stdin, and loads a KeepAlive LaunchAgent.
uninstall.sh and status.sh manage and report on it. A stub-driven test
suite and shellcheck run in tooling/gate/run.sh and in CI.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
reviewer-bot left a comment

HELD FOR HUMAN INDEPENDENT REVIEW

reviewer-bot withholds auto-approval on this PR (trust-surface: touches trust surface ['.forgejo/workflows/gate.yml']). Per ADR-0007 D3 / ADR-0008 D4 the independence axis on high-tier / trust-surface changes must be closed by a human independent principal, not the local-model reviewer. Holding for human review — this bot will not post APPROVED here.

**HELD FOR HUMAN INDEPENDENT REVIEW** `reviewer-bot` withholds auto-approval on this PR (trust-surface: touches trust surface ['.forgejo/workflows/gate.yml']). Per ADR-0007 D3 / ADR-0008 D4 the independence axis on high-tier / trust-surface changes must be closed by a **human** independent principal, not the local-model reviewer. Holding for human review — this bot will not post APPROVED here.
Joel approved these changes 2026-10-17 12:48:42 +00:00
Joel merged commit b1a2ba00fb into develop 2026-10-17 12:48:48 +00:00
Joel deleted branch build/affa852d 2026-10-17 12:48:48 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
ZSDev/mac-runner!1
No description provided.