Real install smoke via polylane.com right after each release - #65
Conversation
There was a problem hiding this comment.
Reviewed. No blocking issues found in the diff (.github/workflows/install-smoke.yml +149, .github/workflows/release.yml +16). Verified head SHA 91697dd against the PR API exactly, base not stale, diff stats match claimed (+165/-0, 2 files).
Correctness, traced against the live production install.sh:
- Trigger is correct:
install-smoke.ymlisworkflow_call'd fromrelease.yml's newinstall-smokejob (needs: release), notrelease: published— right call, since a release created with the defaultGITHUB_TOKENwouldn't fire that event. - Hits the real
https://polylane.com/installendpoint and runs the actual production installer end-to-end (confirmed by fetching the live script) — not a mock. - Would have caught #176: traced the exact digest-lookup regression class through the live
install.sh(lines ~316-395) on both the primary API-digest path and thechecksums.txt-fallback path (forced via a PATH-shimmed curl blockingapi.github.com) — both assertions fail loudly (sha256 mismatch→ no "sha256 verified" string → smoke step exits 1) on that failure mode. - Fails loudly: every assertion is a hard
exit 1; a Slack alert to #polylane-notifications onfailure()includes actionable mitigation text and itself asserts the POST succeeded. - Tests/lint/typecheck all green on head (335/335 tests, lint clean, typecheck clean, after the repo's own documented codegen step). CI (3x Test & typecheck) green. Author is justinhelmer (human) — self-approval pattern doesn't apply.
Non-blocking nits:
install-smoke.yml:64— the outercurlfetching the installer script itself has no--retry/timeout, unlike every other network call in this workflow; a one-off blip there pages the team as "installer endpoint unreachable" indistinguishable from a real outage.install-smoke.yml:108-115— 1Password CLI installed viasudowith no checksum/signature verification (mirrors an existing pattern in the siblinginstall-bytes.yml, not new here — worth a follow-up ticket across both).install-smoke.yml:39-40—permissions:at workflow level vs.release.yml's job-level convention; cosmetic only.- The new workflow hasn't been exercised by any CI run yet (only fires post-release or via manual dispatch) — the PR body's promised post-merge dispatch receipts (a real
version=run and atest_alert=truerun) are still outstanding; worth confirming those land before considering this fully proven in production.
Generated by Claude Code
…ishing The GitHub release's asset list is a contract with the installer: shipping checksums.txt in v0.2.20 broke every curl install for 15 minutes while all stubbed suites stayed green (RCA: coreplanelabs/polylanedotcom#176). Add a reusable install-smoke workflow that installs the just-published release through the PRODUCTION installer in a throwaway HOME — API-digest and API-blocked (checksums.txt) legs both — and alerts Slack on failure. release.yml calls it right after the release job, so a release that breaks the installer pages within minutes instead of at polylanedotcom's daily install-bytes cron (which gains the same real-install legs as the backstop). Trigger is workflow_call, not `on: release` — releases created with the default GITHUB_TOKEN never trigger other workflows. workflow_dispatch smokes any version on demand and validates the alert path (test_alert). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Addressed all four non-blocking nits (amended into the single commit):
|
91697dd to
20b94d3
Compare
There was a problem hiding this comment.
Re-reviewed at new head 20b94d395af958be45ba686d7aa016731fcfefe2 (base still cbca730..., not stale). Diff since my last review is scoped to exactly the 4 nits, nothing else — .github/workflows/install-smoke.yml only, +9/-5, release.yml untouched.
All 4 addressed, verified concretely:
- Retry/timeout:
install-smoke.yml:64nowcurl -fsSL --retry 3 --connect-timeout 10 -m 60 https://polylane.com/install -o /tmp/install.sh— fixed. - 1Password CLI checksum: new
ONEPASSWORD_CLI_SHA256env +sha256sum -c -check before install. I independently downloaded the realop_linux_amd64_v2.38.0-beta.01.zipfromcache.agilebits.comand computed its sha256 myself — it matches the pinned value (ab5617d2...4315857) exactly. Real checksum, not a placeholder. - Permissions scope:
permissions: contents: readmoved from workflow-level to job-level underjobs.smoke, matchingrelease.yml's existing per-job convention. Confirmed via YAML parse. - Dispatch receipts: no code change claims this is solved — PR body still correctly describes the
workflow_dispatchreceipts and the next-release confirmation as outstanding post-merge follow-up. Nothing broken.
Checks on the new head: CI green (3x Test & typecheck, 20.x/22.x/24.x). Locally: lint clean, typecheck clean, 340/340 tests pass (after npm run codegen), YAML valid.
No new issues found. This resolves all four prior nits.
Generated by Claude Code
There was a problem hiding this comment.
LGTM: all four non-blocking nits from the earlier review are addressed at head 20b94d395af958be45ba686d7aa016731fcfefe2 and the re-review found no new issues. Posting the LGTM: verdict token at Justin's request, since the re-review above omitted it and the auto-approve workflow keyed on it did not fire.
Generated by Claude Code
There was a problem hiding this comment.
Auto-approved: Claude reviewed this PR and posted an LGTM verdict (see its review). A repo admin enabled this via the auto-approve workflow.
Generated by Claude Code
|
Post-merge receipts:
|
Resolved: Slack alerting removed by design (see #76)Outcome. This repo is public, and paging #polylane-notifications requires the What was verified along the way. The failure was cli-specific and purely an access difference: the identical Net design. Detection stays here (a broken release fails install-smoke as a red check on the release run, within minutes); Slack paging lives in polylanedotcom's private install-bytes backstop, which runs the same real-install legs daily and holds Prod access legitimately. No prod credential ever sits in this public repo. |
|
Superseded by #76: removing the Slack alert path (public repo must not hold prod secrets — access withheld by design). Detection stays as the red-check install-smoke run; paging stays in polylanedotcom's private backstop. See the updated follow-up comment above. |
Every published release is now immediately installed for real through the production installer (polylane.com/install) in a throwaway HOME — on both verification paths — with a Slack alert on failure. A release that breaks the installer pages within minutes instead of surfacing at the daily cron or from users.
What & why
Prevention item 2 of 2 from the v0.2.20 incident RCA (15m of broken installs; caught by a manual pre-deploy smoke, not by CI — every suite stubs curl, so only a real download exercises the release↔installer contract). Item 1, the daily backstop with the same real-install legs in
install-bytes.yml, is polylanedotcom#178.Changes
install-smoke.yml(workflow_call+workflow_dispatch): fetches the production installer, runs a real install pinned to the given version in a fresh HOME (POLYLANE_NO_PATH=1 DO_NOT_TRACK=1 … --no-setup, piped), assertingsha256 verified, a completed install, and the sign-in stop; then repeats it withapi.github.comblocked, proving the release ships a workingchecksums.txt. Failure posts to #polylane-notifications via the same 1Password → Slack pattern as polylanedotcom's install-bytes alert.release.ymlcalls it (needs: release,secrets: inherit) with the just-published version.Decisions
workflow_callfrom release.yml, noton: release: the release is created with the defaultGITHUB_TOKEN, and events caused by that token never trigger other workflows — anon: releaseversion would silently never run.OP_SERVICE_ACCOUNT_TOKENagainst the same 1Password environment install-bytes uses; whether this repo's service account can read it is unverified from here — thetest_alertdispatch input exists to validate exactly that (human/receipt-gated below).Validation
sha256 verified, install completed, sign-in stop) — the exact commands the workflow runs.workflow_dispatchrun withversion=0.2.20green on both legs, and atest_alert=truedispatch proving Slack delivery (validates the OP-environment access assumption). Human-gated final receipt: the next release cut shows theinstall-smokejob green in its release run.🤖 Generated with Claude Code