Skip to content

Commit b230dd8

Browse files
committed
add api build pipeline
1 parent 37daf72 commit b230dd8

File tree

2 files changed

+104
-9
lines changed

2 files changed

+104
-9
lines changed

.github/workflows/apps-api.yaml

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
name: Apps / API
2+
3+
on:
4+
workflow_dispatch:
5+
pull_request:
6+
branches: ["*"]
7+
paths:
8+
- apps/api/**
9+
- packages/**
10+
- .github/workflows/apps-api.yaml
11+
- pnpm-lock.yaml
12+
push:
13+
branches: ["main"]
14+
paths:
15+
- apps/api/**
16+
- packages/**
17+
- .github/workflows/apps-api.yaml
18+
- pnpm-lock.yaml
19+
20+
jobs:
21+
build:
22+
runs-on: ubuntu-latest
23+
24+
permissions:
25+
contents: read
26+
id-token: write
27+
28+
strategy:
29+
matrix:
30+
platform: [linux/amd64]
31+
32+
steps:
33+
- uses: actions/checkout@v4
34+
35+
- name: Set up QEMU
36+
uses: docker/setup-qemu-action@v3
37+
38+
- name: Set up Docker Buildx
39+
uses: docker/setup-buildx-action@v3
40+
41+
- name: Check if Docker Hub secrets are available
42+
run: |
43+
if [ -z "${{ secrets.DOCKERHUB_USERNAME }}" ] || [ -z "${{ secrets.DOCKERHUB_TOKEN }}" ]; then
44+
echo "DOCKERHUB_LOGIN=false" >> $GITHUB_ENV
45+
else
46+
echo "DOCKERHUB_LOGIN=true" >> $GITHUB_ENV
47+
fi
48+
49+
- name: Login to Docker Hub
50+
uses: docker/login-action@v3
51+
if: env.DOCKERHUB_LOGIN == 'true'
52+
with:
53+
username: ${{ secrets.DOCKERHUB_USERNAME }}
54+
password: ${{ secrets.DOCKERHUB_TOKEN }}
55+
56+
- name: Extract metadata (tags, labels) for Docker
57+
id: meta
58+
uses: docker/metadata-action@v4
59+
with:
60+
images: ctrlplane/api
61+
tags: |
62+
type=sha,format=short,prefix=
63+
64+
- name: Build
65+
uses: docker/build-push-action@v6
66+
if: github.ref != 'refs/heads/main'
67+
with:
68+
push: false
69+
file: apps/api/Dockerfile
70+
platforms: ${{ matrix.platform }}
71+
tags: ${{ steps.meta.outputs.tags }}
72+
73+
- name: Build and Push
74+
uses: docker/build-push-action@v6
75+
if: github.ref == 'refs/heads/main' && env.DOCKERHUB_LOGIN == 'true'
76+
with:
77+
push: true
78+
file: apps/api/Dockerfile
79+
platforms: ${{ matrix.platform }}
80+
tags: ${{ steps.meta.outputs.tags }}

apps/api/Dockerfile

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
ARG NODE_VERSION=22
22
FROM node:${NODE_VERSION}-alpine
33

4-
RUN apk add --no-cache libc6-compat python3 make g++ bash nano
4+
FROM base AS builder
5+
6+
RUN apk add --no-cache libc6-compat python3 make g++
57

68
ENV PNPM_HOME="/pnpm"
79
ENV PATH="$PNPM_HOME:$PATH"
@@ -10,6 +12,8 @@ RUN npm install -g turbo
1012
RUN npm install -g corepack@latest
1113
RUN corepack enable pnpm
1214

15+
FROM builder AS installer
16+
1317
WORKDIR /app
1418

1519
COPY .gitignore .gitignore
@@ -19,34 +23,45 @@ RUN pnpm add -g turbo
1923
COPY package.json package.json
2024
COPY pnpm-*.yaml .
2125

26+
COPY tooling/tailwind/package.json ./tooling/tailwind/package.json
2227
COPY tooling/prettier/package.json ./tooling/prettier/package.json
2328
COPY tooling/eslint/package.json ./tooling/eslint/package.json
24-
COPY tooling/typescript/package.json ./tooling/typescript/package.json
29+
COPY tooling/typescript ./tooling/typescript
2530

31+
COPY packages/trpc/package.json ./packages/trpc/package.json
32+
COPY packages/auth/package.json ./packages/auth/package.json
2633
COPY packages/db/package.json ./packages/db/package.json
2734
COPY packages/validators/package.json ./packages/validators/package.json
28-
COPY packages/secrets/package.json ./packages/secrets/package.json
29-
COPY packages/auth/package.json ./packages/auth/package.json
30-
COPY packages/logger/package.json ./packages/logger/package.json
3135
COPY packages/job-dispatch/package.json ./packages/job-dispatch/package.json
36+
COPY packages/logger/package.json ./packages/logger/package.json
37+
COPY packages/secrets/package.json ./packages/secrets/package.json
3238
COPY packages/events/package.json ./packages/events/package.json
3339
COPY packages/rule-engine/package.json ./packages/rule-engine/package.json
3440
COPY packages/workspace-engine-sdk/package.json ./packages/workspace-engine-sdk/package.json
3541

36-
COPY apps/pty-proxy/package.json ./apps/pty-proxy/package.json
42+
COPY apps/api/package.json ./apps/api/package.json
3743

3844
RUN pnpm install --frozen-lockfile
3945

4046
COPY . .
4147

42-
RUN turbo build --filter=...@ctrlplane/pty-proxy
48+
RUN turbo build --filter=...@ctrlplane/api
49+
50+
FROM base AS runner
51+
WORKDIR /app
4352

4453
RUN addgroup --system --gid 1001 nodejs
4554
RUN adduser --system --uid 1001 nodejs
4655
USER nodejs
4756

57+
COPY --from=installer --chown=nodejs:nodejs /app/apps/api/dist ./apps/api/dist
58+
59+
EXPOSE 8081
60+
4861
ENV NODE_ENV=production
62+
ENV HOSTNAME=0.0.0.0
63+
ENV AUTH_TRUST_HOST=true
4964

50-
WORKDIR /app/apps/pty-proxy/dist/
65+
WORKDIR /app/apps/api/dist/
5166

52-
CMD ["node", "index.js"]
67+
CMD ["node", "apps/api/dist/index.js"]

0 commit comments

Comments
 (0)