AGENTS.md@.github · git:20260801.8d4eb8d · 2026-08-01 · sha256 7066d2024a3ba371

AGENTS.md@.github git:20260801.8d4eb8dA

Immutable. This exact content is served forever at /api/v1/blob/7066d2024a3ba371.

# GitHub Actions operations

## Self-hosted macOS runner

Native macOS jobs use the repo-specific runner labeled `mac-mini`:

- `ci.yml` routes the Swift build/test job to `[self-hosted, mac-mini]`.
  Fork pull requests stay on GitHub-hosted infrastructure; only same-repository
  pull requests and trusted pushes can use the Mini.
- `release-macapp.yml` routes the signed, notarized macOS app release to
  `[self-hosted, mac-mini]`.
- `release.yml` routes only the Darwin CLI matrix entries to the Mini.
  Linux and Windows artifacts remain on GitHub-hosted runners.

The Mini runner runs in the logged-in Aqua session. Its job environment uses:

```text
JAVA_HOME=/opt/homebrew/opt/openjdk@21
ANDROID_HOME=/Users/nikhilanand/Library/Android/sdk
ANDROID_SDK_ROOT=/Users/nikhilanand/Library/Android/sdk
DEVELOPER_DIR=/Volumes/NVMe/Xcode.app/Contents/Developer
```

The external NVMe volume must be mounted. Each Xcode job also checks the
`DEVELOPER_DIR` path before building. There is one Mini runner, so native jobs
queue rather than running concurrently.

### Signing

The Mini's logged-in `login` keychain already contains the Developer ID
Application identity. Do not add `apple-actions/import-codesign-certs` to these
Mini jobs: importing the same certificate into a temporary keychain can produce
an ambiguous signing identity. Notarization still uses the repository secrets
`APPLE_ID`, `APPLE_TEAM_ID`, and `APPLE_APP_SPECIFIC_PASSWORD`.

If signing reports `errSecInternalComponent`, unlock the login keychain once
from an interactive Terminal in the Mini's logged-in GUI session, then grant
the signing tools access:

```bash
security unlock-keychain "$HOME/Library/Keychains/login.keychain-db"
security set-key-partition-list -S apple-tool:,apple:,codesign: -s \
  "$HOME/Library/Keychains/login.keychain-db"
```

Enter the password only at the interactive prompt. Never place it in a
workflow, command argument, environment variable, or log. Do not guess an
empty password and do not import a duplicate P12.

### Operations

The runner is installed separately from runners for other repositories:

```bash
ssh nikhilanand@192.168.1.11
cd ~/actions-runner-nikships-skills-registry
./svc.sh status
./svc.sh stop
./svc.sh start
```

Check registration from a machine with `gh`:

```bash
gh api repos/nikships/skills-registry/actions/runners
```

Never retarget, stop, remove, or reconfigure another repository's runner,
LaunchAgent, work directory, or registration. In particular, leave
`~/actions-runner` and the `ghostty-vibe-xr` LaunchAgent untouched.