Skip to content

ci: execution-based test gate for all sample apps (PIN-57)#80

Open
jhamon wants to merge 1 commit into
mainfrom
ci/execution-test-gate
Open

ci: execution-based test gate for all sample apps (PIN-57)#80
jhamon wants to merge 1 commit into
mainfrom
ci/execution-test-gate

Conversation

@jhamon

@jhamon jhamon commented Jul 11, 2026

Copy link
Copy Markdown

What

Establishes the reusable execution-based test gate for this repo (PIN-57, DevRel First Assignment #2). Every sample app is now built and then driven while running, wired into GitHub Actions CI. Pinecone is mocked or gated with a dummy key — CI needs no live Pinecone connection and no real API key (per AGENTS.md).

Before this PR, sample-apps had zero tests and no CI — the highest-traffic in-scope repo with no check at all (per the DevRel OSS inventory, PIN-52).

The gate (.github/workflows/ci.yml)

One job per app, in parallel. Each builds (compile + typecheck) then runs a per-app smoke/behavior check:

App Build Smoke
legal-semantic-search next build boot next start, expect HTTP 200 on /
namespace-notes/client next build boot next start, expect HTTP 200 on /
namespace-notes/server tsc boot node dist/index.js, expect any HTTP response (alive + routing; handler 500s because Pinecone is gated)
pinecone-assistant next build (pnpm) boot next start, expect HTTP 200 on /
shop-the-look/web next build boot next start, expect HTTP 200 on /
shop-the-look/api pip install pytest boots FastAPI with pinecone.Pinecone mocked; asserts root route serves

All six were verified green locally before pushing (builds + smokes + pytest).

Pinecone mocked / gated (AGENTS.md)

  • Node apps: dummy PINECONE_API_KEY=pclocal-ci-dummy-key (client only needs a non-empty string to construct; homepage smokes never make a live call).
  • Python: pinecone.Pinecone mocked + dummy env in shop-the-look/tests/test_smoke.py.

Reusable pieces

  • scripts/ci/smoke_http.sh — boot-and-poll HTTP smoke helper (<url> <200|any> -- <cmd>), reusable across example repos.
  • TESTING.md — documents the pattern, the manual run-against-real-Pinecone path, and the PIN-50-blocked live lane.

Also fixed

  • namespace-notes/package.json: install:server/start:server pointed at server/node (doesn't exist) -> server, so the documented commands actually run.

Out of scope / follow-ups

  • Live CI lane (real Pinecone via a PINECONE_API_KEY secret): deliberately deferred, blocked on PIN-50 (owner jhamon@pinecone.io).
  • Client currency: apps are on old clients (^4.1.0/^2.1.0, Python pinecone-client==4.1.0). This PR keeps them as-is and only proves they still build/run; upgrades are First Assignment Add Legal Semantic Search sample app #3.
  • GitHub reports 53 Dependabot vulns on the default branch — to be triaged in the currency/security pass.

🤖 Generated with Claude Code

Establishes the reusable build+drive test gate for this repo (PIN-57): every
app is compiled and then driven while running, with Pinecone mocked or gated
by a dummy key so CI needs no live Pinecone connection (per AGENTS.md).

- .github/workflows/ci.yml: one job per app —
    legal-semantic-search, namespace-notes/{client,server},
    pinecone-assistant, shop-the-look/{web,api}.
  Each builds (next build / tsc / pip) then runs a per-app smoke check.
- scripts/ci/smoke_http.sh: reusable boot-and-poll HTTP smoke helper.
- shop-the-look/tests/test_smoke.py + requirements-dev.txt: FastAPI boots
  under pytest with pinecone.Pinecone mocked; asserts the root route serves.
- TESTING.md: documents the pattern, the manual "run against real Pinecone"
  path, and the PIN-50-blocked live CI lane.
- namespace-notes/package.json: fix install:server/start:server paths
  (server/node -> server) so the documented commands actually run.

Live validation against real Pinecone is intentionally deferred to a
secret-gated job, blocked on PIN-50 (PINECONE_API_KEY, owner jhamon@pinecone.io).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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