Conversation
Brings up the full production-shaped stack (postgres + migrate +
helldiversbot) from working-tree builds and asserts:
- migrate exits 0 (catches Dockerfile.migrate / seed regressions)
- app reaches healthy and /api/healthcheck returns sensible JSON
(catches Dockerfile.app / runtime regressions)
Scoped to `pull_request: branches: [main]` only — runs on release and
hotfix PRs, not on the develop integration loop where the cost
(~7min cold-cache) would slow iteration.
Closes the gap exposed by the v0.47.1 hotfix: lint, typecheck,
test:unit, and build all passed locally while the migrate container
crashed at the seed step on a jsconfig-alias import that only fails
under raw Node. Local tooling resolves `@/*` (Next/Vitest); raw Node
doesn't. Only actually running the container catches that class.
New files:
- docker-compose.ci.yml — standalone (not an override of
docker-compose.yml), swaps `image:` for `build:` and `env_file:`
for inline `environment:` so the workflow can inject stub creds.
Also usable locally with
`docker compose -f docker-compose.ci.yml up --build`.
- .github/workflows/main-pr-docker-smoke.yml — uses
`docker compose up --wait` so compose's healthcheck-gated startup
is the assertion, plus a host-side curl on the published port.
Dumps grouped container logs on failure, tears down always.
No GHA build cache configured yet; revisit if 7min/main-PR stings.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ci: Docker smoke test for main PRs
Version-on-merge bump for #380 (merged via GitHub UI, which doesn't carry the package.json + CHANGELOG rename). Pure CI tooling addition, no runtime change — patch bump per the 0.46.2 / 0.46.3 / 0.46.4 chore precedent. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
# Conflicts: # CHANGELOG.md # package.json
Remediates GHSA-qx2v-qp2m-jg93 / CVE-2026-41305 (PostCSS XSS via unescaped </style> in stringified CSS output, < 8.5.10). The vulnerable copy came in transitively via next@16.2.6 → postcss@8.4.31. Tailwind 4 already pulled postcss@8.5.14 independently, so we have prior evidence the 8.5.x line works in our build pipeline. After `npm install`, all three postcss consumers (Tailwind, Next, Vite) dedupe to 8.5.15. `npm install` reports 0 vulnerabilities. Real-world exploit risk is essentially zero for this app — the vuln requires processing user-submitted CSS through PostCSS's stringifier and embedding the output in an HTML <style> tag, and we author all CSS ourselves via Tailwind utilities and design tokens. Fix is hygiene. Verified end-to-end: - The four JS gates (lint, typecheck, 1320 unit tests, build) — all green - docker compose -f docker-compose.ci.yml up --build --wait → exit 0 in 1m 11s; migrate exited 0, app reached healthy, curl /api/healthcheck returned {"alive":true,...} Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Release v0.47.4 to production. Rolls up two changes since
v0.47.3:0.47.4 —
postcsspinned viapackage.json#overrides(security)Remediates GHSA-qx2v-qp2m-jg93 / CVE-2026-41305 (PostCSS XSS via unescaped
</style>in stringified CSS, < 8.5.10). The vulnerable copy came in transitively vianext@16.2.6 → postcss@8.4.31; Tailwind 4 already pulledpostcss@8.5.14independently, proving the 8.5.x line works in our pipeline.After install all three postcss consumers (Tailwind, Next, Vite) dedupe to
8.5.15.npm installreports 0 vulnerabilities. Real-world exploit risk for this app is essentially zero (the vuln requires processing user-submitted CSS through PostCSS's stringifier — we author all our own CSS via Tailwind utilities and design tokens), but the override drops us from 1 moderate dependabot alert to 0.Also picks up a stray dependabot bump that landed on main directly (PR #382):
brace-expansion 5.0.5 → 5.0.6(CVE-flagged ReDoS, also low real-world risk for us).0.47.2 — Docker smoke CI for main PRs
New
.github/workflows/main-pr-docker-smoke.yml(scoped topull_request: branches: [main]) brings up the full production-shaped stack (postgres + migrate + helldiversbot, all built from working-tree Dockerfiles) and asserts both that migrate exits 0 and that the app's/api/healthcheckreturns sensible JSON. Backed by a standalonedocker-compose.ci.yml. Cold-cache cost ~7 minutes per main PR.This PR should be the first one where that workflow actually runs in CI — assuming GitHub's PR workflow resolution picks up the file from the head ref. If it doesn't trigger here (because main doesn't yet have the workflow file), it'll start working on the next main PR.
Verification (local, on develop @ HEAD)
npm run lint— cleannpm run typecheck— cleannpm run test:unit— 1320 tests passnpm run build— succeedsdocker compose -f docker-compose.ci.yml up --build --wait— exit 0 in 1m 11s; migrate seeded all 156 seasons, app reached healthy, curl/api/healthcheck→{"alive":true,...}Post-merge actions
mainasv0.47.4and push the tag — triggers production Docker build viarelease.docker.yml.mainback intodevelopsodevelopcarries the merge commit.Test plan
v0.47.4tag pushed,release.docker.ymlproduces new imagessudo docker compose pull && sudo docker compose up— migrate completes, app reaches healthymainmerged back intodevelop🤖 Generated with Claude Code