Skip to content

Commit 9b3c32a

Browse files
committed
fix: unignore workflow YAML files, add CI pipeline
.gitignore was blocking *.yaml including .github/workflows/ci.yaml. Added exceptions for .github/**/*.yaml and .github/**/*.yml.
1 parent d3b1d59 commit 9b3c32a

2 files changed

Lines changed: 229 additions & 0 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
8+
permissions:
9+
contents: read
10+
11+
jobs:
12+
validate:
13+
name: Validate Samples
14+
runs-on: ubuntu-latest
15+
strategy:
16+
fail-fast: false
17+
matrix:
18+
sample:
19+
- name: mcp-workflow
20+
config: ai-agents/mcp-workflow/mockd.yaml
21+
test: ai-agents/mcp-workflow/test.sh
22+
- name: ci-testing
23+
config: ci-testing/github-actions/mockd.yaml
24+
test: ci-testing/github-actions/test.sh
25+
- name: microservices
26+
config: microservices/docker-compose/mockd.yaml
27+
test: microservices/docker-compose/test.sh
28+
29+
steps:
30+
- name: Checkout
31+
uses: actions/checkout@v4
32+
33+
- name: Install mockd
34+
run: |
35+
gh release download --repo getmockd/mockd --pattern 'mockd-linux-amd64' --dir /tmp/mockd-dl
36+
chmod +x /tmp/mockd-dl/mockd-linux-amd64
37+
sudo mv /tmp/mockd-dl/mockd-linux-amd64 /usr/local/bin/mockd
38+
mockd version
39+
env:
40+
GH_TOKEN: ${{ github.token }}
41+
42+
- name: Validate config loads
43+
run: |
44+
mockd start -c ${{ matrix.sample.config }} --no-auth -d
45+
for i in $(seq 1 30); do
46+
curl -sf http://localhost:4290/health > /dev/null 2>&1 && break
47+
sleep 1
48+
done
49+
curl -sf http://localhost:4290/health
50+
echo ""
51+
mockd list --json | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'Loaded {len(d)} mocks')"
52+
53+
- name: Run test script
54+
run: |
55+
MOCKD_BIN=mockd bash ${{ matrix.sample.test }}
56+
57+
- name: Stop mockd
58+
if: always()
59+
run: mockd stop 2>/dev/null || true
60+
61+
validate-digital-twins:
62+
name: Validate Digital Twins
63+
runs-on: ubuntu-latest
64+
strategy:
65+
fail-fast: false
66+
matrix:
67+
sample:
68+
- name: stripe
69+
config: third-party-apis/stripe-api/mockd.yaml
70+
port: 4280
71+
- name: twilio
72+
config: third-party-apis/twilio-api/mockd.yaml
73+
port: 4280
74+
- name: openai
75+
config: third-party-apis/openai-api/mockd.yaml
76+
port: 4280
77+
78+
steps:
79+
- name: Checkout
80+
uses: actions/checkout@v4
81+
82+
- name: Install mockd
83+
run: |
84+
gh release download --repo getmockd/mockd --pattern 'mockd-linux-amd64' --dir /tmp/mockd-dl
85+
chmod +x /tmp/mockd-dl/mockd-linux-amd64
86+
sudo mv /tmp/mockd-dl/mockd-linux-amd64 /usr/local/bin/mockd
87+
mockd version
88+
env:
89+
GH_TOKEN: ${{ github.token }}
90+
91+
- name: Start mockd with config
92+
run: |
93+
mockd start -c ${{ matrix.sample.config }} --no-auth -d
94+
for i in $(seq 1 30); do
95+
curl -sf http://localhost:4290/health > /dev/null 2>&1 && break
96+
sleep 1
97+
done
98+
curl -sf http://localhost:4290/health
99+
echo ""
100+
mockd list --json | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'Loaded {len(d)} mocks')"
101+
102+
- name: Smoke test — Stripe
103+
if: matrix.sample.name == 'stripe'
104+
run: |
105+
BASE=http://localhost:${{ matrix.sample.port }}
106+
# Create customer
107+
CUS=$(curl -sf -X POST $BASE/v1/customers -d "name=CI&email=ci@test.com")
108+
CUS_ID=$(echo "$CUS" | jq -r '.id')
109+
echo "Created customer: $CUS_ID"
110+
[[ "$CUS_ID" == cus_* ]] || (echo "Missing cus_ prefix" && exit 1)
111+
# List
112+
curl -sf $BASE/v1/customers | jq -e '.object == "list"' > /dev/null
113+
# Delete
114+
curl -sf -X DELETE $BASE/v1/customers/$CUS_ID | jq -e '.deleted == true' > /dev/null
115+
echo "✓ Stripe CRUD passed"
116+
117+
- name: Smoke test — Twilio
118+
if: matrix.sample.name == 'twilio'
119+
run: |
120+
BASE=http://localhost:${{ matrix.sample.port }}
121+
# Create message
122+
MSG=$(curl -sf -X POST $BASE/2010-04-01/Accounts/AC_test/Messages.json \
123+
-d "From=%2B15551234567&To=%2B15559876543&Body=CI+test")
124+
SID=$(echo "$MSG" | jq -r '.sid')
125+
echo "Created message: $SID"
126+
[[ "$SID" == SM* ]] || (echo "Missing SM prefix" && exit 1)
127+
# List
128+
curl -sf $BASE/2010-04-01/Accounts/AC_test/Messages.json | jq -e '.messages | length > 0' > /dev/null
129+
echo "✓ Twilio CRUD passed"
130+
131+
- name: Smoke test — OpenAI
132+
if: matrix.sample.name == 'openai'
133+
run: |
134+
BASE=http://localhost:${{ matrix.sample.port }}
135+
# List models (seeded)
136+
MODELS=$(curl -sf $BASE/models)
137+
COUNT=$(echo "$MODELS" | jq '.data | length')
138+
echo "Models: $COUNT"
139+
[ "$COUNT" -ge 3 ] || (echo "Expected 3+ seeded models" && exit 1)
140+
# Create assistant
141+
ASST=$(curl -sf -X POST $BASE/assistants \
142+
-H "Content-Type: application/json" \
143+
-d '{"name":"CI Bot","model":"gpt-4o"}')
144+
ASST_ID=$(echo "$ASST" | jq -r '.id')
145+
echo "Created assistant: $ASST_ID"
146+
[[ "$ASST_ID" == asst_* ]] || (echo "Missing asst_ prefix" && exit 1)
147+
# Delete
148+
curl -sf -X DELETE $BASE/assistants/$ASST_ID | jq -e '.deleted == true' > /dev/null
149+
echo "✓ OpenAI CRUD passed"
150+
151+
- name: Stop mockd
152+
if: always()
153+
run: mockd stop 2>/dev/null || true
154+
155+
docker:
156+
name: Docker Compose
157+
runs-on: ubuntu-latest
158+
steps:
159+
- name: Checkout
160+
uses: actions/checkout@v4
161+
162+
- name: Start microservices sample
163+
working-directory: microservices/docker-compose
164+
run: |
165+
docker compose up -d
166+
for i in $(seq 1 30); do
167+
curl -sf http://localhost:4290/health > /dev/null 2>&1 && break
168+
sleep 1
169+
done
170+
curl -sf http://localhost:4290/health
171+
172+
- name: Verify endpoints
173+
run: |
174+
# Users
175+
curl -sf http://localhost:4280/users | jq -e '.data | length == 2' > /dev/null
176+
echo "✓ Users seed data present"
177+
USR=$(curl -sf -X POST http://localhost:4280/users \
178+
-H "Content-Type: application/json" \
179+
-d '{"name":"Docker CI","email":"ci@docker.test"}')
180+
echo "Created user: $(echo $USR | jq -r '.id')"
181+
# Payments
182+
curl -sf http://localhost:4280/payments | jq -e '.data | length == 2' > /dev/null
183+
echo "✓ Payments seed data present"
184+
echo "✓ Docker Compose validated"
185+
186+
- name: Tear down
187+
if: always()
188+
working-directory: microservices/docker-compose
189+
run: docker compose down
190+
191+
mcp-sdk:
192+
name: MCP SDK
193+
runs-on: ubuntu-latest
194+
steps:
195+
- name: Checkout
196+
uses: actions/checkout@v4
197+
198+
- name: Install mockd
199+
run: |
200+
gh release download --repo getmockd/mockd --pattern 'mockd-linux-amd64' --dir /tmp/mockd-dl
201+
chmod +x /tmp/mockd-dl/mockd-linux-amd64
202+
sudo mv /tmp/mockd-dl/mockd-linux-amd64 /usr/local/bin/mockd
203+
mockd version
204+
env:
205+
GH_TOKEN: ${{ github.token }}
206+
207+
- name: Setup Python
208+
uses: actions/setup-python@v5
209+
with:
210+
python-version: "3.12"
211+
212+
- name: Install MCP SDK
213+
run: pip install mcp httpx
214+
215+
- name: Start mockd
216+
run: |
217+
mockd serve --no-auth --log-level error &
218+
for i in $(seq 1 15); do
219+
curl -sf http://localhost:4290/health > /dev/null 2>&1 && break
220+
sleep 1
221+
done
222+
curl -sf http://localhost:4290/health
223+
224+
- name: Run MCP SDK test
225+
run: |
226+
MOCKD_BIN=mockd MOCKD_ADMIN_URL=http://localhost:4290 \
227+
python3 ai-agents/mcp-workflow/test_mcp_sdk.py

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Downloaded OpenAPI specs (setup.sh downloads them fresh)
22
*.yaml
33
!mockd.yaml
4+
!.github/**/*.yaml
5+
!.github/**/*.yml
46

57
# OS
68
.DS_Store

0 commit comments

Comments
 (0)