flora is a fast and secure runtime that lets you write discord bots for your servers, with a rich TypeScript SDK, without worrying about running infrastructure. [mirror]
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(build-service): dockerize

+87 -2
+14
.dockerignore
··· 1 + .git 2 + node_modules 3 + **/node_modules 4 + dist 5 + **/dist 6 + build-workspace 7 + **/build-workspace 8 + buck-out 9 + **/buck-out 10 + target 11 + **/target 12 + .tmp 13 + **/.tmp 14 + .env
+6
apps/build-service/.dockerignore
··· 1 + node_modules 2 + dist 3 + build-workspace 4 + pnpm-store 5 + *.log 6 + .env
+26
apps/build-service/Dockerfile
··· 1 + FROM node:20-slim AS base 2 + 3 + WORKDIR /app 4 + ENV NODE_ENV=production 5 + 6 + FROM base AS build 7 + RUN corepack enable 8 + COPY pnpm-workspace.yaml ./ 9 + COPY tsconfig.json /tsconfig.json 10 + COPY apps/build-service/package.json apps/build-service/pnpm-lock.yaml ./ 11 + COPY apps/build-service/tsconfig.json apps/build-service/tsdown.config.ts ./ 12 + RUN pnpm install --frozen-lockfile 13 + COPY apps/build-service/src ./src 14 + RUN pnpm run build 15 + 16 + FROM base AS runtime 17 + RUN corepack enable 18 + COPY pnpm-workspace.yaml ./ 19 + COPY apps/build-service/package.json apps/build-service/pnpm-lock.yaml ./ 20 + RUN pnpm install --frozen-lockfile --prod 21 + COPY --from=build /app/dist ./dist 22 + RUN mkdir -p /app/build-workspace \ 23 + && chown -R node:node /app 24 + USER node 25 + EXPOSE 3001 26 + CMD ["node", "dist/index.mjs"]
+4
apps/build-service/src/env.ts
··· 17 17 return port 18 18 } 19 19 20 + export function getHost(): string { 21 + return process.env.BUILD_SERVICE_HOST ?? '0.0.0.0' 22 + } 23 + 20 24 export function getBuildWorkspaceDir(): string { 21 25 const configured = process.env.BUILD_SERVICE_WORKSPACE_DIR 22 26 if (configured) return path.resolve(configured)
+2 -2
apps/build-service/src/index.ts
··· 2 2 import { H3, HTTPError, serve } from 'h3' 3 3 4 4 import { bearerAuth } from './auth' 5 - import { getPort, requireEnv } from './env' 5 + import { getHost, getPort, requireEnv } from './env' 6 6 import { logger } from './lib/logger' 7 7 import { handleCreateBuild } from './routes/create-build' 8 8 import { handleGetBuild } from './routes/get-build' ··· 43 43 44 44 app.get('/health', () => ({ status: 'ok' })) 45 45 46 - serve(app, { port, hostname: '127.0.0.1' }) 46 + serve(app, { port, hostname: getHost() }) 47 47 48 48 function formatRequestLog( 49 49 method: string,
+35
docker-compose.yaml
··· 1 + services: 2 + build-service: 3 + build: 4 + context: . 5 + dockerfile: apps/build-service/Dockerfile 6 + image: flora-build-service:latest 7 + ports: 8 + - '3001:3001' 9 + environment: 10 + BUILD_SERVICE_SECRET: ${BUILD_SERVICE_SECRET?set BUILD_SERVICE_SECRET} 11 + BUILD_SERVICE_HOST: 0.0.0.0 12 + BUILD_SERVICE_PORT: 3001 13 + BUILD_SERVICE_WORKSPACE_DIR: /app/build-workspace 14 + volumes: 15 + - build_service_workspace:/app/build-workspace 16 + networks: 17 + - flora 18 + healthcheck: 19 + test: [ 20 + 'CMD', 21 + 'node', 22 + '-e', 23 + "fetch('http://localhost:3001/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))", 24 + ] 25 + interval: 10s 26 + timeout: 5s 27 + retries: 5 28 + restart: unless-stopped 29 + 30 + volumes: 31 + build_service_workspace: 32 + 33 + networks: 34 + flora: 35 + name: flora