effective: | ignore: - node_modules - /apps/docs - /apps/screenshot-service - /apps/server - /apps/web - /apps/dashboard - /apps/status-page - /packages/analytics - /packages/api - /packages/error - /packages/tracker builders: install: fromImage: path: node digest: sha256:c0753125a3789977aefe869cbebccf70e3cfd7ea84ca48547458f02e4f1d7146 label: org.opencontainers.image.base.digest: sha256:c0753125a3789977aefe869cbebccf70e3cfd7ea84ca48547458f02e4f1d7146 org.opencontainers.image.stage: install org.opencontainers.image.base.name: docker.io/node:26.8.1-slim workdir: /app/ run: - npm install -g corepack@0.36.0 - corepack enable pnpm - pnpm install --frozen-lockfile --filter=@openstatus/workflows... --loglevel debug cache: - target: /root/.local/share/pnpm/store bind: - target: pnpm-workspace.yaml source: pnpm-workspace.yaml - target: pnpm-lock.yaml source: pnpm-lock.yaml - target: package.json source: package.json - target: apps/workflows/package.json source: apps/workflows/package.json - target: packages/assertions/package.json source: packages/assertions/package.json - target: packages/db/package.json source: packages/db/package.json - target: packages/emails/package.json source: packages/emails/package.json - target: packages/notifications/base/package.json source: packages/notifications/base/package.json - target: packages/notifications/discord/package.json source: packages/notifications/discord/package.json - target: packages/notifications/email/package.json source: packages/notifications/email/package.json - target: packages/notifications/grafana-oncall/package.json source: packages/notifications/grafana-oncall/package.json - target: packages/notifications/google-chat/package.json source: packages/notifications/google-chat/package.json - target: packages/notifications/ms-teams/package.json source: packages/notifications/ms-teams/package.json - target: packages/notifications/ntfy/package.json source: packages/notifications/ntfy/package.json - target: packages/notifications/opsgenie/package.json source: packages/notifications/opsgenie/package.json - target: packages/notifications/pagerduty/package.json source: packages/notifications/pagerduty/package.json - target: packages/notifications/slack/package.json source: packages/notifications/slack/package.json - target: packages/notifications/telegram/package.json source: packages/notifications/telegram/package.json - target: packages/notifications/bird-whatsapp/package.json source: packages/notifications/bird-whatsapp/package.json - target: packages/notifications/twillio-sms/package.json source: packages/notifications/twillio-sms/package.json - target: packages/notifications/webhook/package.json source: packages/notifications/webhook/package.json - target: packages/importers/package.json source: packages/importers/package.json - target: packages/regions/package.json source: packages/regions/package.json - target: packages/services/package.json source: packages/services/package.json - target: packages/subscriptions/package.json source: packages/subscriptions/package.json - target: packages/utils/package.json source: packages/utils/package.json - target: packages/tsconfig/package.json source: packages/tsconfig/package.json - target: packages/test-utils/package.json source: packages/test-utils/package.json - target: packages/tinybird/package.json source: packages/tinybird/package.json - target: packages/upstash/package.json source: packages/upstash/package.json - target: packages/theme-store/package.json source: packages/theme-store/package.json - target: packages/locales/package.json source: packages/locales/package.json - target: packages/status-fetcher/package.json source: packages/status-fetcher/package.json build: fromImage: path: node digest: sha256:c0753125a3789977aefe869cbebccf70e3cfd7ea84ca48547458f02e4f1d7146 label: org.opencontainers.image.base.digest: sha256:c0753125a3789977aefe869cbebccf70e3cfd7ea84ca48547458f02e4f1d7146 org.opencontainers.image.stage: build org.opencontainers.image.base.name: docker.io/node:26.8.1-slim workdir: /app/apps/workflows env: NODE_ENV: production copy: - paths: - . target: /app/ - fromBuilder: install paths: - /app/node_modules target: /app/node_modules - fromBuilder: install paths: - /app/apps/workflows/node_modules target: /app/apps/workflows/node_modules - fromBuilder: install paths: - /app/packages target: /app/packages run: - ./node_modules/.bin/tsdown - mkdir -p /tmp/sc /app/data - node scripts/sidecar-package.mjs /tmp/sc/package.json - npm install --prefix /tmp/sc --omit=dev --no-package-lock --no-audit --no-fund fromImage: path: node digest: sha256:c0753125a3789977aefe869cbebccf70e3cfd7ea84ca48547458f02e4f1d7146 label: org.opencontainers.image.source: https://github.com/openstatusHQ/openstatus org.opencontainers.image.title: OpenStatus Workflows org.opencontainers.image.vendor: OpenStatus io.dofigen.version: 2.8.0 org.opencontainers.image.authors: OpenStatus Team org.opencontainers.image.description: Background job processing and probe scheduling for OpenStatus org.opencontainers.image.base.digest: sha256:c0753125a3789977aefe869cbebccf70e3cfd7ea84ca48547458f02e4f1d7146 org.opencontainers.image.base.name: docker.io/node:26.8.1-slim user: user: '1000' group: '1000' workdir: /app/ env: NODE_ENV: production copy: - fromBuilder: build paths: - /app/apps/workflows/dist target: /app/apps/workflows/dist chmod: '555' - fromBuilder: build paths: - /tmp/sc/node_modules target: /app/apps/workflows/node_modules chmod: '555' - fromBuilder: build paths: - /app/data target: /app/data root: run: - apt-get update && apt-get install -y --no-install-recommends curl ca-certificates && rm -rf /var/lib/apt/lists/* entrypoint: - node - /app/apps/workflows/dist/serve.mjs expose: - port: 3000 healthcheck: cmd: '["curl", "-f", "http://localhost:3000/ping"]' interval: 1m timeout: 10s start: 30s retries: 3 images: docker.io: library: node: 26.8.1-slim: digest: sha256:c0753125a3789977aefe869cbebccf70e3cfd7ea84ca48547458f02e4f1d7146 resources: dofigen.yml: hash: 31d39f4cb1231466bc802222e029bfad8f7447f8e35013f5a222c3cf5499c10b content: | ignore: - node_modules - /apps/docs - /apps/screenshot-service - /apps/server - /apps/web - /apps/dashboard - /apps/status-page - /packages/analytics - /packages/api - /packages/error - /packages/tracker builders: install: fromImage: node:26.8.1-slim workdir: /app/ labels: org.opencontainers.image.stage: install bind: - pnpm-workspace.yaml - pnpm-lock.yaml - package.json - apps/workflows/package.json - packages/assertions/package.json - packages/db/package.json - packages/emails/package.json - packages/notifications/base/package.json - packages/notifications/discord/package.json - packages/notifications/email/package.json - packages/notifications/grafana-oncall/package.json - packages/notifications/google-chat/package.json - packages/notifications/ms-teams/package.json - packages/notifications/ntfy/package.json - packages/notifications/opsgenie/package.json - packages/notifications/pagerduty/package.json - packages/notifications/slack/package.json - packages/notifications/telegram/package.json - packages/notifications/bird-whatsapp/package.json - packages/notifications/twillio-sms/package.json - packages/notifications/webhook/package.json - packages/importers/package.json - packages/regions/package.json - packages/services/package.json - packages/subscriptions/package.json - packages/utils/package.json - packages/tsconfig/package.json - packages/test-utils/package.json - packages/tinybird/package.json - packages/upstash/package.json - packages/theme-store/package.json - packages/locales/package.json - packages/status-fetcher/package.json # Install dependencies scoped to the workflows subgraph (dev included: the build stage needs tsdown) run: # Node 25+ no longer bundles corepack - npm install -g corepack@0.36.0 - corepack enable pnpm - pnpm install --frozen-lockfile --filter=@openstatus/workflows... --loglevel debug cache: - /root/.local/share/pnpm/store # Stage 4: Bundle the app with tsdown into dist/ build: fromImage: node:26.8.1-slim workdir: /app/apps/workflows labels: org.opencontainers.image.stage: build copy: - . /app/ - fromBuilder: install source: /app/node_modules target: /app/node_modules - fromBuilder: install source: /app/apps/workflows/node_modules target: /app/apps/workflows/node_modules - fromBuilder: install source: /app/packages target: /app/packages env: NODE_ENV: production # Everything is inlined except the 3 packages that can't be (see tsdown.config.ts). They ship as # a minimal side-car node_modules, installed by npm on the build platform so Fly amd64 gets the # right libsql native binary, at the exact versions pnpm resolved. run: - ./node_modules/.bin/tsdown - mkdir -p /tmp/sc /app/data - node scripts/sidecar-package.mjs /tmp/sc/package.json - npm install --prefix /tmp/sc --omit=dev --no-package-lock --no-audit --no-fund # Runtime stage: Node plus curl (healthcheck) and the system CA store, which libsql's native # TLS reads — Node's own fetch bundles its CAs, the addon does not. fromImage: node:26.8.1-slim root: run: # One chained command: dofigen emits a heredoc RUN, which doesn't stop on a failed line - apt-get update && apt-get install -y --no-install-recommends curl ca-certificates && rm -rf /var/lib/apt/lists/* workdir: /app/ # Metadata labels labels: org.opencontainers.image.title: OpenStatus Workflows org.opencontainers.image.description: Background job processing and probe scheduling for OpenStatus org.opencontainers.image.source: https://github.com/openstatusHQ/openstatus org.opencontainers.image.vendor: OpenStatus org.opencontainers.image.authors: OpenStatus Team env: NODE_ENV: production # The bundle resolves its externals from the side-car node_modules one level up from dist/ copy: - fromBuilder: build source: /app/apps/workflows/dist target: /app/apps/workflows/dist chmod: "555" - fromBuilder: build source: /tmp/sc/node_modules target: /app/apps/workflows/node_modules chmod: "555" - fromBuilder: build source: /app/data target: /app/data user: "1000:1000" expose: "3000" healthcheck: interval: 1m timeout: 10s start: 30s retries: 3 cmd: '["curl", "-f", "http://localhost:3000/ping"]' entrypoint: ["node", "/app/apps/workflows/dist/serve.mjs"]