Skip to content

Commit 5bd8707

Browse files
committed
ci: add agent-runner type check + Docker image workflow
- ci.yml: add agent-runner job (npm ci + tsc --noEmit) - agent-runner-image.yml: build and push Docker image to ghcr.io - Dockerfile: multi-stage build, bundles agent-runner + mcp-server - .dockerignore: exclude node_modules, dist, config secrets
1 parent cf71923 commit 5bd8707

4 files changed

Lines changed: 137 additions & 0 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Agent Runner Image
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
branches: [main]
7+
paths:
8+
- "agent-runner/**"
9+
- "mcp-server/**"
10+
- ".github/workflows/agent-runner-image.yml"
11+
12+
permissions:
13+
contents: read
14+
packages: write
15+
16+
jobs:
17+
build-and-push:
18+
name: Build and push agent-runner image
19+
runs-on: ubuntu-latest
20+
21+
steps:
22+
- name: Checkout
23+
uses: actions/checkout@v4
24+
25+
- name: Setup Docker Buildx
26+
uses: docker/setup-buildx-action@v3
27+
28+
- name: Login to GitHub Container Registry
29+
uses: docker/login-action@v3
30+
with:
31+
registry: ghcr.io
32+
username: ${{ github.actor }}
33+
password: ${{ secrets.GITHUB_TOKEN }}
34+
35+
- name: Set image name and short SHA
36+
run: |
37+
echo "IMAGE_NAME=ghcr.io/${GITHUB_REPOSITORY,,}/agent-runner" >> "$GITHUB_ENV"
38+
echo "SHORT_SHA=${GITHUB_SHA::7}" >> "$GITHUB_ENV"
39+
40+
- name: Build and push
41+
uses: docker/build-push-action@v6
42+
with:
43+
context: .
44+
file: agent-runner/Dockerfile
45+
push: true
46+
tags: |
47+
${{ env.IMAGE_NAME }}:latest
48+
${{ env.IMAGE_NAME }}:sha-${{ env.SHORT_SHA }}
49+
cache-from: type=gha
50+
cache-to: type=gha,mode=max

.github/workflows/ci.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,48 @@ jobs:
5151
- name: Build
5252
run: npx next build
5353

54+
agent-runner:
55+
name: Agent Runner
56+
runs-on: ubuntu-latest
57+
defaults:
58+
run:
59+
working-directory: agent-runner
60+
steps:
61+
- uses: actions/checkout@v4
62+
63+
- uses: actions/setup-node@v4
64+
with:
65+
node-version: 20
66+
cache: npm
67+
cache-dependency-path: agent-runner/package-lock.json
68+
69+
- name: Install dependencies
70+
run: npm ci
71+
72+
- name: Type check
73+
run: npx tsc --noEmit
74+
75+
agent-runner:
76+
name: Agent Runner
77+
runs-on: ubuntu-latest
78+
defaults:
79+
run:
80+
working-directory: agent-runner
81+
steps:
82+
- uses: actions/checkout@v4
83+
84+
- uses: actions/setup-node@v4
85+
with:
86+
node-version: 20
87+
cache: npm
88+
cache-dependency-path: agent-runner/package-lock.json
89+
90+
- name: Install dependencies
91+
run: npm ci
92+
93+
- name: Type check
94+
run: npx tsc --noEmit
95+
5496
mcp-server:
5597
name: MCP Server
5698
runs-on: ubuntu-latest

agent-runner/.dockerignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
node_modules
2+
dist
3+
config/*.toml
4+
config/*.env
5+
*.env

agent-runner/Dockerfile

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
FROM node:20-alpine AS builder
2+
3+
WORKDIR /app
4+
5+
# Build mcp-server (agent-runner spawns it as a child process)
6+
COPY mcp-server/package.json mcp-server/package-lock.json ./mcp-server/
7+
RUN cd mcp-server && npm ci
8+
9+
COPY mcp-server/tsconfig.json ./mcp-server/
10+
COPY mcp-server/src ./mcp-server/src
11+
RUN cd mcp-server && npx tsc
12+
13+
# Build agent-runner
14+
COPY agent-runner/package.json agent-runner/package-lock.json ./agent-runner/
15+
RUN cd agent-runner && npm ci
16+
17+
COPY agent-runner/tsconfig.json ./agent-runner/
18+
COPY agent-runner/src ./agent-runner/src
19+
RUN cd agent-runner && npx tsc
20+
21+
# ── Production stage ──
22+
FROM node:20-alpine
23+
24+
WORKDIR /app
25+
26+
# mcp-server: prod deps + compiled JS
27+
COPY mcp-server/package.json mcp-server/package-lock.json ./mcp-server/
28+
RUN cd mcp-server && npm ci --omit=dev
29+
COPY --from=builder /app/mcp-server/dist ./mcp-server/dist
30+
31+
# agent-runner: prod deps + compiled JS + accounts
32+
COPY agent-runner/package.json agent-runner/package-lock.json ./agent-runner/
33+
RUN cd agent-runner && npm ci --omit=dev
34+
COPY --from=builder /app/agent-runner/dist ./agent-runner/dist
35+
COPY agent-runner/accounts.json ./agent-runner/
36+
37+
WORKDIR /app/agent-runner
38+
39+
ENTRYPOINT ["node", "dist/index.js"]
40+
CMD ["--config", "config/config.toml"]

0 commit comments

Comments
 (0)