Skip to content

Prepare v1.0.0 - #25

Merged
jaisonerick merged 10 commits into
mainfrom
feat/v1-readiness
Apr 22, 2026
Merged

jaisonerick merged 10 commits into
mainfrom
feat/v1-readiness

Conversation

@jaisonerick

Copy link
Copy Markdown
Owner

Summary

Closes the punch list for cutting v1.0.0:

  • fix: retract v0.1.1 / v0.1.2 in go.mod — both shipped a Mach‑O pinned to macOS 15.0 and refuse to launch on the documented macOS 13/14 floor.
  • ci: matrix the macOS helper job across macos-13, macos-14, macos-latest. Adds a macOS helper aggregator so the existing required status check stays valid without re-pinning branch protection.
  • test: smoke-test the Client exec + loopback path (New → Close × 2) end-to-end. Doesn't trigger Location Services or Keychain.
  • build: bump scanner/Info.plist CFBundleShortVersionString/CFBundleVersion to 1.0.0. Companion will rebuild + re-sign automatically because Info.plist is in its trigger paths.
  • docs: declare v1 API stability (Versioning section in README) and replace the stale manual "Releasing the Helper" section with a description of the now-automated CI flow. The local make release notarytool path moves to a small "Local helper rebuild (development only)" note.

v1.0.0 cut

The README commit's body carries Release-As: 1.0.0. When this PR merges to main, Release Please will open a Release PR proposing v1.0.0 (instead of the next 0.1.x), update CHANGELOG.md, and bump embed.go's embeddedVersion constant via the existing release-please marker.

If you want to land these fixes without cutting v1 yet, amend that commit to drop the Release-As: 1.0.0 footer before merge — Release Please will then propose the usual semver-derived bump (likely 0.2.0 from the feat-equivalent semantics or 0.1.5 from fix).

Test plan

Local on this machine (macOS):

  • make fmt-check vet test-race build — clean
  • make swift-check — clean (target arm64-apple-macos13.0)
  • make swift-test — all helper unit tests pass
  • make scanner-ci — ad-hoc bundle builds, VersionMin=851968 (0xD0000=13.0)
  • go test -run TestClientLifecycle -count=1 ./... — passes (~1s; launches signed embedded helper, sends close_request, waits for clean exit)
  • plutil -lint scanner/Info.plist — OK

Expected on CI:

  • CI matrix (macos-13, macos-14, macos-latest) — all three pass
  • macOS helper aggregator — green (required for branch protection)
  • Signed Companion — runs because Info.plist changed; rebuilds, signs, notarizes, staples, commits new embedded/WifiScanner.app back to this branch
  • After companion commit lands: codesign -dv embedded/WifiScanner.app | grep VersionMin shows 851968

Both bundles were compiled without an explicit Swift target, so the
helper Mach-O is pinned to macOS 15.0 minimum and refuses to launch on
macOS 13 or 14 — directly contradicting the README's macOS 13+ promise.
v0.1.3 was the first tag built with `-target arm64-apple-macos13.0`
in scripts/build-wifi-scanner-app.sh.

Extending the retract block steers `go get` and Dependabot away from
both broken versions in addition to v0.1.0 (which was already
retracted).
The Go module advertises macOS 13+ as the support floor, but CI was
only exercising `macos-latest`, so 13/14 compatibility was unverified
and could regress silently between releases.

Run the helper job across `macos-13`, `macos-14`, and `macos-latest`
and add a `macos-helper` aggregator that keeps the existing required
status check name ("macOS helper") intact, so branch protection
doesn't need re-pinning every time the matrix changes.
Wire-protocol decoding is well-covered in protocol_test.go, but the
exec/socket path in macwifi.go (extract embedded bundle, launch via
`open -W`, accept loopback callback, send close_request, wait for
process exit) had no test coverage. A regression there would only
surface in downstream consumers.

The new test runs `New` then `Close` (twice, to cover Close
idempotency) without ever calling Scan or Password, so it never
trips Location Services or Keychain prompts on interactive machines.
Skipped under -short for the same reason `make ci-go` skips the
full helper bring-up.
Align CFBundleVersion and CFBundleShortVersionString with the upcoming
module version. The bundle version surfaces in System Settings →
Location Services and was a stale placeholder ("1" / "1.0") that
didn't track the module.

The signed companion will rebuild and re-sign the embedded helper for
this PR because Info.plist is one of its trigger paths.
Adds a "Versioning" section to the README committing the exported
`macwifi` Go API to backward compatibility under semver across the
v1.x line, with the helper wire protocol explicitly excluded.

Replaces the manual "Releasing the Helper" section, which described a
local Developer-ID + notarytool workflow that consumers will never
need. The reality is now end-to-end automated:

  conventional commits → Release Please PR →
  signed companion rebuild → merge →
  tag + GitHub Release + signed bundle zip attached.

The local helper rebuild snippet is preserved as a "development only"
note for Swift iteration via `MACWIFI_APP`.

Release-As: 1.0.0
github-actions Bot and others added 2 commits April 22, 2026 01:55
`scanner/Sources/WifiScanner.swift` and the helper tests had trailing
commas in function arg lists, which is a Swift 6.1 feature (SE-0439).
The macOS 13 (Swift 5.9) and macOS 14 (Swift 5.10) CI matrix runners
fail typecheck because of this — the bug was hidden until the matrix
expansion forced compilation on older Swift toolchains.

Drop the trailing commas. The remaining code is portable across Swift
5.9 → 6.x.
github-actions Bot and others added 2 commits April 22, 2026 02:02
GitHub Actions retired the `macos-13` hosted runner label in
December 2025 (actions/runner-images#13402, #13413). Jobs scheduled
on it queue indefinitely without ever picking up a runner — confirmed
on PR #25 where macos-13 sat queued for 14+ minutes while macos-14
and macos-latest finished in under a minute each.

Drop macos-13 from the CI matrix so PRs are not blocked on a runner
pool that no longer exists. The shipped helper is still pinned to
`-target arm64-apple-macos13.0` in scripts/build-wifi-scanner-app.sh,
which means the Mach-O LC_BUILD_VERSION pins macOS 13 minimum and the
binary runs on macOS 13 (we just can't verify that on a runner). The
macos-14 row preserves coverage of the Swift 5.10 toolchain, which
was the row that caught the trailing-comma regression earlier today.
@jaisonerick
jaisonerick merged commit 183ee92 into main Apr 22, 2026
7 checks passed
@jaisonerick
jaisonerick deleted the feat/v1-readiness branch April 22, 2026 02:23
jaisonerick added a commit that referenced this pull request Apr 22, 2026
GitHub Actions retired the `macos-13` hosted runner label in
December 2025 (actions/runner-images#13402, #13413). Jobs scheduled
on it queue indefinitely without ever picking up a runner — confirmed
on PR #25 where macos-13 sat queued for 14+ minutes while macos-14
and macos-latest finished in under a minute each.

Drop macos-13 from the CI matrix so PRs are not blocked on a runner
pool that no longer exists. The shipped helper is still pinned to
`-target arm64-apple-macos13.0` in scripts/build-wifi-scanner-app.sh,
which means the Mach-O LC_BUILD_VERSION pins macOS 13 minimum and the
binary runs on macOS 13 (we just can't verify that on a runner). The
macos-14 row preserves coverage of the Swift 5.10 toolchain, which
was the row that caught the trailing-comma regression earlier today.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant