Skip to content

Commit 92e17da

Browse files
Merge pull request #12 from fiveonecode/release/homebrew-notarized-npm
Add Homebrew formula, cask, and packable simbroker npm CLI
2 parents ab1d25e + bb07242 commit 92e17da

23 files changed

Lines changed: 584 additions & 39 deletions

.agents/manifests/specs.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ globs:
1515
- examples/**/.simulator-broker/*.json
1616
- spec/**
1717
- references/**
18+
- Casks/**
19+
- Formula/**
20+
- packages/simbroker/**
1821
- scripts/package_cli.sh
22+
- scripts/package_npm.sh
23+
- scripts/sync_homebrew_tap.sh
1924
owner: spec-steward
2025
required_skills:
2126
- harness-engineering
@@ -44,7 +49,12 @@ allowed_paths:
4449
- examples/**/.simulator-broker/*.json
4550
- spec/**
4651
- references/**
52+
- Casks/**
53+
- Formula/**
54+
- packages/simbroker/**
4755
- scripts/package_cli.sh
56+
- scripts/package_npm.sh
57+
- scripts/sync_homebrew_tap.sh
4858
forbidden_paths: []
4959
required_evidence:
5060
- structured-git-commit

.agents/verify/spec-only.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ covers_scenarios: []
44
covers_boundaries: []
55
commands:
66
- id: spec-diff-check
7-
run: git diff --check -- WORKFLOW.md AGENTS.md CLAUDE.md README.md LICENSE SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md CHANGELOG.md docs spec .agents agent-harness package.json package-lock.json .gitignore .github .codex script scripts references app broker-core client && git diff --cached --check -- WORKFLOW.md AGENTS.md CLAUDE.md README.md LICENSE SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md CHANGELOG.md docs spec .agents agent-harness package.json package-lock.json .gitignore .github .codex script scripts references app broker-core client
7+
run: git diff --check -- WORKFLOW.md AGENTS.md CLAUDE.md README.md LICENSE SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md CHANGELOG.md docs spec .agents agent-harness package.json package-lock.json .gitignore .github .codex script scripts references app broker-core client Formula Casks packages && git diff --cached --check -- WORKFLOW.md AGENTS.md CLAUDE.md README.md LICENSE SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md CHANGELOG.md docs spec .agents agent-harness package.json package-lock.json .gitignore .github .codex script scripts references app broker-core client Formula Casks packages
88
- id: public-front-door-check
99
run: node --test docs/test/*.test.mjs
1010
- id: instruction-parity-check

.github/ISSUE_TEMPLATE/feature.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ body:
77
attributes:
88
value: |
99
Simulator Broker is **Alpha**, **macOS-only**, and needs **Xcode**.
10-
It is maintenance-only infrastructure. There is no Homebrew formula,
11-
notarized app, or npm package yet.
10+
It is maintenance-only infrastructure. The CLI installs through
11+
Homebrew or the packable `simbroker` npm package. A signed,
12+
notarized operator app zip is not attached to the current Alpha
13+
release.
1214
1315
Maintainers may decline requests that add a feature, commercialization,
1416
or UX roadmap.

.github/ISSUE_TEMPLATE/install-failure.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ body:
77
attributes:
88
value: |
99
Simulator Broker is **Alpha**, **macOS-only**, and needs **Xcode** to
10-
create or run iOS Simulators. There is no Homebrew formula, notarized
11-
app, or npm package yet.
10+
create or run iOS Simulators. Install the CLI with
11+
`brew install fiveonecode/simulator-broker/simbroker` or
12+
`npm install -g` of the `simbroker-0.1.0-alpha.1.tgz` from GitHub
13+
Releases. A signed, notarized operator app zip is not attached to
14+
this Alpha release.
1215
1316
Do not paste credentials, private home paths, customer data, or
1417
live lease files. Redact logs first. Security reports go through
@@ -19,6 +22,8 @@ body:
1922
attributes:
2023
label: What install path did you use?
2124
options:
25+
- Homebrew (`brew install fiveonecode/simulator-broker/simbroker`)
26+
- npm (`npm install -g` of `simbroker-0.1.0-alpha.1.tgz` from GitHub Releases)
2227
- CLI-only (`bash scripts/install_local.sh --cli-only`)
2328
- Contributor app + CLI (`npm run install:local`)
2429
- Alpha CLI tarball from GitHub Releases

.github/workflows/release.yml

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Publish the Alpha CLI tarball when a version tag is pushed.
2-
# After merge, create the matching tag (example: v0.1.0-alpha.1).
3-
# This workflow does not build or attach the macOS app.
1+
# Publish the Alpha CLI tarball and the packable npm CLI when a version
2+
# tag is pushed. After merge, create the matching tag (example:
3+
# v0.1.0-alpha.1). This workflow does not build or attach the macOS app.
44
name: Release CLI
55

66
on:
@@ -13,7 +13,7 @@ permissions:
1313

1414
jobs:
1515
release:
16-
name: attach CLI tarball
16+
name: attach CLI and npm packages
1717
runs-on: ubuntu-latest
1818
timeout-minutes: 30
1919
steps:
@@ -38,8 +38,10 @@ jobs:
3838
npm run test:client
3939
npm run test:harness-adoption
4040
41-
- name: Package CLI tarball
42-
run: npm run package:cli
41+
- name: Package CLI tarball and npm CLI
42+
run: |
43+
npm run package:cli
44+
npm run package:npm
4345
4446
- name: Create GitHub Release
4547
env:
@@ -48,13 +50,15 @@ jobs:
4850
version="$(node -p "require('./package.json').version")"
4951
asset="artifacts/cli/simulator-broker-${version}-cli.tar.gz"
5052
checksum="${asset}.sha256"
53+
npm_asset="artifacts/npm/simbroker-${version}.tgz"
5154
prerelease_args=()
5255
if [[ "$version" == *alpha* || "$version" == *beta* || "$version" == *rc* ]]; then
5356
prerelease_args+=(--prerelease)
5457
fi
5558
gh release create "${GITHUB_REF_NAME}" \
5659
--title "Simulator Broker ${GITHUB_REF_NAME}" \
57-
--notes "Alpha CLI tarball. Extract it and run \`./bin/simbroker --help\`. Node.js 20 or newer is required. macOS and Xcode are still required to create and run iOS Simulators. This release is not a Homebrew formula, notarized app, or npm package. See CHANGELOG.md." \
60+
--notes "Alpha CLI. Install with \`brew install fiveonecode/simulator-broker/simbroker\` or \`npm install -g\` the attached \`simbroker-${version}.tgz\`. Node.js 20 or newer is required. macOS and Xcode are still required to create and run iOS Simulators. A signed, notarized operator app is not attached. See CHANGELOG.md." \
5861
"${prerelease_args[@]}" \
5962
"$asset" \
60-
"$checksum"
63+
"$checksum" \
64+
"$npm_asset"

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,22 @@ All notable changes to Simulator Broker are documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [Unreleased]
9+
10+
### Added
11+
12+
- Homebrew formula `Formula/simbroker.rb` installs the Alpha CLI tarball
13+
(`brew install fiveonecode/simulator-broker/simbroker`). Homebrew clones
14+
[`fiveonecode/homebrew-simulator-broker`](https://github.com/fiveonecode/homebrew-simulator-broker)
15+
for that tap name. `Formula/` and `Casks/` here stay the source of truth.
16+
- Homebrew cask `Casks/simulator-broker.rb` installs `Simulator Broker.app`
17+
from the signed, notarized GitHub Release zip `Simulator-Broker-<version>.zip`
18+
when that zip is attached.
19+
- Packable npm CLI `packages/simbroker` (`npm run package:npm`) with a `bin`
20+
field. The repo-root package stays private. Tag-driven
21+
`.github/workflows/release.yml` attaches that tarball and no longer
22+
claims the release is not a Homebrew formula or npm package.
23+
824
## [0.1.0-alpha.1] - 2026-08-18
925

1026
First tagged Alpha. The CLI, local `brokerd` service, and macOS operator app

Casks/simulator-broker.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
cask "simulator-broker" do
2+
version "0.1.0-alpha.1"
3+
sha256 :no_check
4+
5+
url "https://github.com/fiveonecode/simulator-broker/releases/download/v#{version}/Simulator-Broker-#{version}.zip"
6+
name "Simulator Broker"
7+
desc "macOS operator app for the local iOS Simulator control plane"
8+
homepage "https://github.com/fiveonecode/simulator-broker"
9+
10+
depends_on macos: :ventura
11+
12+
app "Simulator Broker.app"
13+
14+
caveats <<~EOS
15+
This cask installs Simulator Broker.app from the signed, notarized
16+
GitHub Release zip Simulator-Broker-#{version}.zip. Produce that zip
17+
with npm run package:distribution (Developer ID Application + notarytool),
18+
using payload/app/Simulator Broker.app from the distribution bundle.
19+
The current Alpha GitHub Release attaches the CLI tarball, not this zip.
20+
EOS
21+
end

Formula/simbroker.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Simbroker < Formula
2+
desc "Local iOS Simulator control plane CLI"
3+
homepage "https://github.com/fiveonecode/simulator-broker"
4+
url "https://github.com/fiveonecode/simulator-broker/releases/download/v0.1.0-alpha.1/simulator-broker-0.1.0-alpha.1-cli.tar.gz"
5+
sha256 "699695bc65a5bcb25b9c9b5d01494fcc3f25a40dcc90b8b5bf1ec61ea87a8522"
6+
license "MIT"
7+
8+
depends_on :macos
9+
depends_on "node"
10+
11+
def install
12+
libexec.install Dir["*"]
13+
(bin/"simbroker").write <<~SH
14+
#!/bin/bash
15+
exec "#{formula_opt_bin("node")}/node" "#{libexec}/client/bin/simbroker.mjs" "$@"
16+
SH
17+
end
18+
19+
test do
20+
assert_match "simbroker", shell_output("#{bin}/simbroker --help")
21+
end
22+
end

README.md

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ A local control plane so humans, AI agents, and CI jobs can share iOS Simulators
44
on one Mac without stealing devices from each other.
55

66
> **Alpha.** macOS only. Xcode is required to create or run iOS Simulators.
7-
> Interfaces can change. There is no Homebrew formula, notarized app, or npm
8-
> package yet.
7+
> Interfaces can change. Install the CLI with Homebrew or the `simbroker`
8+
> npm package. A signed, notarized operator app is not attached to this
9+
> Alpha release yet.
910
1011
[![Node tests](https://github.com/fiveonecode/simulator-broker/actions/workflows/ci.yml/badge.svg)](https://github.com/fiveonecode/simulator-broker/actions/workflows/ci.yml)
1112

@@ -27,29 +28,47 @@ If you only ever use one simulator by hand, you may not need this yet.
2728

2829
## Use it
2930

30-
From a clone, with Node.js 20+ on `PATH`:
31+
One-line CLI install on macOS, with Node.js 20+ still required at runtime:
32+
33+
```bash
34+
brew install fiveonecode/simulator-broker/simbroker
35+
simbroker --help
36+
```
37+
38+
Homebrew clones
39+
[`fiveonecode/homebrew-simulator-broker`](https://github.com/fiveonecode/homebrew-simulator-broker)
40+
for that tap name. `Formula/` and `Casks/` in this repository stay the
41+
source of truth.
42+
43+
```bash
44+
npm install -g https://github.com/fiveonecode/simulator-broker/releases/download/v0.1.0-alpha.1/simbroker-0.1.0-alpha.1.tgz
45+
simbroker --help
46+
```
47+
48+
From a clone:
3149

3250
```bash
3351
bash scripts/install_local.sh --cli-only
3452
command -v simbroker
3553
simbroker --help
3654
```
3755

38-
That copies the CLI runtime only. It does not run XcodeGen or build the macOS
39-
app. If Homebrew is installed, `simbroker` lands in `$(brew --prefix)/bin`.
40-
Otherwise the installer writes `~/.local/bin/simbroker` and one guarded
41-
login-shell PATH line. Open a new terminal if this shell still cannot resolve
42-
`simbroker`. `source .../env.sh` remains a fallback.
56+
The clone installer copies the CLI runtime only. It does not run XcodeGen or
57+
build the macOS app. If Homebrew is installed, `simbroker` lands in
58+
`$(brew --prefix)/bin`. Otherwise the installer writes `~/.local/bin/simbroker`
59+
and one guarded login-shell PATH line. Open a new terminal if this shell still
60+
cannot resolve `simbroker`. `source .../env.sh` remains a fallback.
4361

44-
To try a tagged build without cloning, download
45-
`simulator-broker-<version>-cli.tar.gz` from
46-
[Releases](https://github.com/fiveonecode/simulator-broker/releases), extract
47-
it, and run `./bin/simbroker --help`. Node.js 20+ is still required.
62+
The Homebrew cask `fiveonecode/simulator-broker/simulator-broker` installs
63+
`Simulator Broker.app` from the signed, notarized GitHub Release zip
64+
`Simulator-Broker-<version>.zip`. That zip is not attached to the current
65+
Alpha release. Produce it with `npm run package:distribution` after Developer
66+
ID signing and notarytool notarization.
4867

4968
Xcode is still required to create and run iOS Simulators. Alpha CLI tarballs
5069
are attached to
5170
[GitHub Releases](https://github.com/fiveonecode/simulator-broker/releases).
52-
There is no Homebrew formula or npm package yet.
71+
Extract a tarball and run `./bin/simbroker --help`.
5372

5473
`simbroker` help and `simbroker doctor` print human-readable text by default.
5574
Pass `--json` for machine-readable payloads.

SECURITY.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55
Security fixes are considered for the current `main` branch and for the latest
66
tagged Alpha (`0.1.0-alpha.1`). Older Alpha tags are not supported. The
7-
published artifact is the CLI tarball on GitHub Releases, not a Homebrew
8-
formula, notarized app, or npm package.
7+
published CLI artifacts are the GitHub Release tarball, the Homebrew
8+
formula that installs that tarball, and the packable `simbroker` npm
9+
package. A signed, notarized operator app zip is not attached to this
10+
Alpha release.
911

1012
## Reporting A Vulnerability
1113

0 commit comments

Comments
 (0)