pact-cavemod-adapter
v1.0.0
Published
PACT contract and test runner for mod APIs; writes pact-results.json and defines pactStatus for mod index
Readme
pact-cavemod-adapter
PACT contract and test runner for mod APIs. Declares the Mod Index API contract (consumer: ModApiConsumer, provider: ModIndexProvider), and writes pact-results.json after running consumer Pact tests so build/CI can record status as "good" or "fail" in the mod index.
Contract
- Consumer:
ModApiConsumer(e.g. node-mod-editor mod-api-client) - Provider:
ModIndexProvider(e.g. kotlin-mod-index) - Endpoints: GET /api/mods, GET /api/mods/:modId
Mod index contract extension
A mod entry in the index may include:
- pactStatus (optional):
"good"|"fail"|"unknown"— set when PACT consumer tests are run and verified in build/CI. - pactVerifiedAt (optional): ISO timestamp of last PACT verification.
The mod index (e.g. kotlin-mod-index) may read pact-results.json or receive status via API and include these fields in GET /api/mods and GET /api/mods/:id responses.
Writing results
After running consumer Pact tests (e.g. npm run test:pact in node-mod-editor):
npx pact-cavemod-write-results pass
# or
npx pact-cavemod-write-results failOr programmatically:
import { writePactResults } from 'pact-cavemod-adapter';
writePactResults({ status: 'pass', outputPath: 'pact-results.json' });Output format: { "consumer": "ModApiConsumer", "provider": "ModIndexProvider", "status": "pass"|"fail", "timestamp": "..." }.
Build and CI
- Mod build: Run
test:pactthenpact-cavemod-write-results <pass|fail>sopact-results.jsonis produced. - CI: Run mod build (including pact step); optionally run provider verification and publish pact status to the mod index.
Monorepo usage (log-view-machine)
The mod workspace (log-view-machine/mod) depends on this package via devDependencies: { "pact-cavemod-adapter": "file:../packages/pact-cavemod-adapter" }. From repo root, install mod’s deps then run pact build:
cd mod && npm install && npm run build:pactFrom repo root (with mod in workspaces): npm run build:mod:pact or npm run build:pact --workspace=mod. The build:pact script runs node-mod-editor’s test:pact and then writes pact-results.json (pass or fail) into mod/.
