Skip to content

Commit 7ca2d9b

Browse files
feat: feat: Prism-based OpenAPI mock server for contract verification in CI
1 parent bad7139 commit 7ca2d9b

1 file changed

Lines changed: 47 additions & 39 deletions

File tree

.github/workflows/prism-mock.yml

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,47 @@
1-
name: Prism OpenAPI Mock Verification
2-
3-
on:
4-
workflow_dispatch:
5-
pull_request:
6-
paths:
7-
- 'openapi/**'
8-
- 'tests/pact/**'
9-
10-
jobs:
11-
prism-contract:
12-
runs-on: ubuntu-latest
13-
steps:
14-
- uses: actions/checkout@v4
15-
16-
- name: Start Prism mock server
17-
run: |
18-
docker run -d --name prism -p 4010:4010 -v "$PWD/openapi:/spec" stoplight/prism:5 mock -h 0.0.0.0 /spec/openapi.yaml
19-
20-
- name: Wait for Prism
21-
run: |
22-
for i in $(seq 1 30); do
23-
if curl -sf http://localhost:4010/api/health >/dev/null 2>&1; then
24-
echo "Prism ready"
25-
break
26-
fi
27-
sleep 2
28-
done
29-
30-
- name: Replay recorded request corpus
31-
run: |
32-
python3 scripts/prism_replay.py tests/pact/prism-replay-corpus.json http://localhost:4010
33-
34-
- name: Upload coverage report
35-
if: always()
36-
uses: actions/upload-artifact@v4
37-
with:
38-
name: prism-coverage
39-
path: prism-coverage.json
1+
name: Prism Contract Verification
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- 'openapi/**'
7+
- 'tests/pact/**'
8+
- '.github/workflows/prism-mock.yml'
9+
push:
10+
branches: [main]
11+
paths:
12+
- 'openapi/**'
13+
- 'tests/pact/**'
14+
15+
jobs:
16+
prism-contract:
17+
name: Verify OpenAPI contract with Prism mock
18+
runs-on: ubuntu-latest
19+
steps:
20+
- name: Checkout
21+
uses: actions/checkout@v4
22+
23+
- name: Start Prism mock server
24+
run: |
25+
docker run --rm -d --name prism \
26+
-p 4010:4010 \
27+
-v "$PWD/openapi:/tmp/openapi:ro" \
28+
stoplight/prism:5 mock -h 0.0.0.0 /tmp/openapi/openapi.yaml
29+
echo "Waiting for Prism to become ready..."
30+
for i in $(seq 1 30); do
31+
if curl -sf http://127.0.0.1:4010/ >/dev/null 2>&1; then
32+
echo "Prism is ready"
33+
break
34+
fi
35+
sleep 2
36+
if [ "$i" = "30" ]; then
37+
echo "::error::Prism failed to start within 60s"
38+
docker logs prism
39+
exit 1
40+
fi
41+
done
42+
43+
- name: Replay recorded request corpus against Prism
44+
run: |
45+
node tests/pact/replay-prism.mjs tests/pact
46+
env:
47+
PRISM_URL: http://127.0.0.1:4010

0 commit comments

Comments
 (0)