Skip to content

HEL-4: CI for hello — install, lint, typecheck, build, smoke - #1

Merged
lmanualm merged 2 commits into
mainfrom
feature/hel-4-ci
May 20, 2026
Merged

lmanualm merged 2 commits into
mainfrom
feature/hel-4-ci

Conversation

@lmanualm

Copy link
Copy Markdown
Owner

Summary

  • Adds GitHub Actions CI workflow (.github/workflows/ci.yml) that runs npm ci, lint, typecheck, build, and a smoke test on every push to main and every PR.
  • Records the rationale in docs/decisions/ci.md.
  • Points the README CI badge at the now-provisioned remote (lmanualm/hello).

Closes HEL-4 once this PR is green + branch protection is configured (HEL-8).

Test plan

  • CI workflow runs on this PR and all five steps pass (install, lint, typecheck, build, smoke).
  • Badge in README resolves once workflow lands on main.
  • A separate intentionally-failing PR (HEL-8) confirms the ci check blocks merge.

Engineer (hello) and others added 2 commits May 20, 2026 17:02
Adds the GitHub Actions workflow that gates merges into main:

- `.github/workflows/ci.yml`: single `ci` job on Node 20 that runs
  `npm ci`, `npm run lint`, `npm run typecheck`, `npm run build`,
  and `npm run smoke`, with `actions/setup-node` npm cache. 5-minute
  timeout; expected wall-clock ~60-80s.
- `.eslintrc.json`: extends `next/core-web-vitals` so `next lint`
  runs non-interactively in CI (without a config file Next prompts
  with a TTY-only wizard).
- `scripts/smoke.mjs`: end-to-end smoke. Picks a free port from the
  kernel (so it doesn't clash with the local dev server or the
  Paperclip control plane on 3100), starts `next start`, fetches
  `/`, and asserts the landing-page markers `<h1>hello</h1>` and
  "Something small is on the way." are present. Exits non-zero on
  any failure; cleans up the child server in `finally`.
- `package.json` / `package-lock.json`: add `eslint` and
  `eslint-config-next` as devDependencies, plus the `smoke` script.
- `docs/decisions/ci.md`: rationale for the workflow (why Actions,
  why these five steps, why the smoke boots a server, wall-clock
  budget, what's deliberately out of scope).
- `README.md`: CI status badge (uses a placeholder
  github.com/hello-co/hello URL — see HEL-4 thread for the unblock
  owner who provisions the real remote) and a CI section pointing
  at the workflow and decision doc.

Verified locally on this branch:
- `npm run lint` / `typecheck` / `build` / `smoke` all green.
- Deliberate typescript regression in app/page.tsx makes typecheck
  exit 2 with "Type 'string' is not assignable to type 'number'".
- Deliberate landing-page regression (h1 swapped) makes the smoke
  script exit 1 with "response missing required marker:
  \"<h1>hello</h1>\"".

Deploy is intentionally not part of this workflow — it lives on
HEL-6.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
@lmanualm
lmanualm merged commit 7f9a244 into main May 20, 2026
1 check passed
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