effective: | ignore: - node_modules - /apps/docs - /apps/screenshot-service - /apps/web - /apps/dashboard - /apps/status-page - /apps/workflows - /packages/api - /packages/integrations/vercel builders: build: fromImage: path: oven/bun digest: sha256:f20d9cf365ab35529384f1717687c739c92e6f39157a35a95ef06f4049a10e4a label: org.opencontainers.image.base.digest: sha256:f20d9cf365ab35529384f1717687c739c92e6f39157a35a95ef06f4049a10e4a org.opencontainers.image.stage: build org.opencontainers.image.base.name: docker.io/oven/bun:1.3.6 workdir: /app/apps/server env: NODE_ENV: production copy: - paths: - . target: /app/ - fromBuilder: install paths: - /app/node_modules target: /app/node_modules run: - bun build --compile --sourcemap src/index.ts --outfile=app install: fromImage: path: oven/bun digest: sha256:f20d9cf365ab35529384f1717687c739c92e6f39157a35a95ef06f4049a10e4a label: org.opencontainers.image.base.name: docker.io/oven/bun:1.3.6 org.opencontainers.image.stage: install org.opencontainers.image.base.digest: sha256:f20d9cf365ab35529384f1717687c739c92e6f39157a35a95ef06f4049a10e4a workdir: /app/ run: - bun install --production --frozen-lockfile --verbose cache: - target: /root/.bun/install/cache bind: - target: bunfig.toml source: bunfig.toml - target: package.json source: package.json - target: apps/server/package.json source: apps/server/package.json - target: packages/analytics/package.json source: packages/analytics/package.json - target: packages/db/package.json source: packages/db/package.json - target: packages/emails/package.json source: packages/emails/package.json - target: packages/error/package.json source: packages/error/package.json - target: packages/regions/package.json source: packages/regions/package.json - target: packages/tinybird/package.json source: packages/tinybird/package.json - target: packages/tracker/package.json source: packages/tracker/package.json - target: packages/upstash/package.json source: packages/upstash/package.json - target: packages/utils/package.json source: packages/utils/package.json - target: packages/tsconfig/package.json source: packages/tsconfig/package.json - target: packages/assertions/package.json source: packages/assertions/package.json - target: packages/theme-store/package.json source: packages/theme-store/package.json fromImage: path: debian digest: sha256:c5f48c942c667e70d7e64b124cfc939c25a4a43207c0d14b45844d762dc1d50f label: org.opencontainers.image.source: https://github.com/openstatusHQ/openstatus org.opencontainers.image.base.name: docker.io/debian:bullseye-slim org.opencontainers.image.description: REST API server with Hono framework for OpenStatus org.opencontainers.image.authors: OpenStatus Team org.opencontainers.image.vendor: OpenStatus org.opencontainers.image.base.digest: sha256:c5f48c942c667e70d7e64b124cfc939c25a4a43207c0d14b45844d762dc1d50f io.dofigen.version: 2.6.0 org.opencontainers.image.title: OpenStatus Server user: user: '1000' group: '1000' copy: - fromBuilder: build paths: - /app/apps/server/app target: /bin/ chmod: '555' root: run: - apt-get update - apt-get install -y --no-install-recommends curl - rm -rf /var/lib/apt/lists/* entrypoint: - /bin/app expose: - port: 3000 healthcheck: cmd: curl -f http://localhost:3000/ping || exit 1 interval: 30s timeout: 10s start: 30s retries: 3 images: docker.io: library: debian: bullseye-slim: digest: sha256:c5f48c942c667e70d7e64b124cfc939c25a4a43207c0d14b45844d762dc1d50f oven: bun: 1.3.6: digest: sha256:f20d9cf365ab35529384f1717687c739c92e6f39157a35a95ef06f4049a10e4a resources: dofigen.yml: hash: 9517fa6af63764e1066de654bdbee489a77f4d9ce57858a451a8abae505bf27a content: | # Files to exclude from Docker context ignore: - node_modules - /apps/docs - /apps/screenshot-service - /apps/web - /apps/dashboard - /apps/status-page - /apps/workflows - /packages/api - /packages/integrations/vercel builders: # Stage 1: Install production dependencies install: fromImage: oven/bun:1.3.6 workdir: /app/ labels: org.opencontainers.image.stage: install bind: - bunfig.toml - package.json - apps/server/package.json - packages/analytics/package.json - packages/db/package.json - packages/emails/package.json - packages/error/package.json - packages/regions/package.json - packages/tinybird/package.json - packages/tracker/package.json - packages/upstash/package.json - packages/utils/package.json - packages/tsconfig/package.json - packages/assertions/package.json - packages/theme-store/package.json run: bun install --production --frozen-lockfile --verbose cache: - /root/.bun/install/cache # Stage 2: Build application (compile to binary) build: fromImage: oven/bun:1.3.6 workdir: /app/apps/server labels: org.opencontainers.image.stage: build env: NODE_ENV: production copy: - . /app/ - fromBuilder: install source: /app/node_modules target: /app/node_modules run: bun build --compile --sourcemap src/index.ts --outfile=app # Runtime stage fromImage: debian:bullseye-slim # Metadata labels labels: org.opencontainers.image.title: OpenStatus Server org.opencontainers.image.description: REST API server with Hono framework for OpenStatus org.opencontainers.image.source: https://github.com/openstatusHQ/openstatus org.opencontainers.image.vendor: OpenStatus org.opencontainers.image.authors: OpenStatus Team # Copy compiled binary copy: - fromBuilder: build source: /app/apps/server/app target: /bin/ chmod: "555" # Install curl for health checks root: run: - apt-get update - apt-get install -y --no-install-recommends curl - rm -rf /var/lib/apt/lists/* # Security: run as non-root user user: "1000:1000" # Expose port expose: "3000" # Health check healthcheck: interval: 30s timeout: 10s start: 30s retries: 3 cmd: curl -f http://localhost:3000/ping || exit 1 # Start application entrypoint: /bin/app