Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
13 kB ยท 303 lines
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304effective: | 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:0e0ff40c39bc087845bfb27465a0df4ea419520094bc35842ff83dd8cbe6f9b6 label: org.opencontainers.image.base.name: docker.io/node:24-slim org.opencontainers.image.stage: install org.opencontainers.image.base.digest: sha256:0e0ff40c39bc087845bfb27465a0df4ea419520094bc35842ff83dd8cbe6f9b6 workdir: /app/ run: - corepack enable pnpm - pnpm install --prod --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/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: denoland/deno digest: sha256:fa335acdf6b72106eda2cb6a8cb5f4187e7630e357467489db4b2e7352d5e432 label: org.opencontainers.image.base.name: docker.io/denoland/deno:2.9.7 org.opencontainers.image.stage: build org.opencontainers.image.base.digest: sha256:fa335acdf6b72106eda2cb6a8cb5f4187e7630e357467489db4b2e7352d5e432 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: - mkdir -p /tmp/sc - deno eval 'const p="/app/node_modules/.pnpm";const v=(x)=>{for(const e of Deno.readDirSync(p))if(e.name.startsWith(x+"@"))return e.name.slice(x.length+1).split("_")[0]};Deno.writeTextFileSync("/tmp/sc/package.json",JSON.stringify({dependencies:{"@libsql/client":v("@libsql+client"),libsql:v("libsql"),"@google-cloud/tasks":v("@google-cloud+tasks")}}))' - cd /tmp/sc && deno install --node-modules-dir=auto --allow-scripts - cd /app/apps/workflows && deno bundle --platform=deno --minify --sloppy-imports --node-modules-dir=manual --external '@libsql/client' --external 'libsql' --external '@google-cloud/tasks' --output /tmp/sc/_serve.bundle.mjs src/serve.ts - cd /tmp/sc && deno compile --no-check -A --node-modules-dir=manual --output /app/apps/workflows/app /tmp/sc/_serve.bundle.mjs - mkdir -p /app/data fromImage: host: registry.access.redhat.com port: 443 path: hi/curl digest: sha256:848b81ab5d5e55371d7193fd4f1ea7b605d14dbb039344ffad34a4c1f0d880f4 label: org.opencontainers.image.source: https://github.com/openstatusHQ/openstatus org.opencontainers.image.base.digest: sha256:848b81ab5d5e55371d7193fd4f1ea7b605d14dbb039344ffad34a4c1f0d880f4 io.dofigen.version: 2.8.0 org.opencontainers.image.description: Background job processing and probe scheduling for OpenStatus org.opencontainers.image.authors: OpenStatus Team org.opencontainers.image.title: OpenStatus Workflows org.opencontainers.image.vendor: OpenStatus user: user: '1000' group: '1000' workdir: /app/ copy: - fromBuilder: build paths: - /app/apps/workflows/app target: /app/apps/workflows/ chmod: '555' - fromBuilder: build paths: - /app/data target: /app/data entrypoint: - /app/apps/workflows/app expose: - port: 3000 healthcheck: cmd: '["curl", "-f", "http://localhost:3000/ping"]' interval: 1m timeout: 10s start: 30s retries: 3images: docker.io: library: node: 24-slim: digest: sha256:0e0ff40c39bc087845bfb27465a0df4ea419520094bc35842ff83dd8cbe6f9b6 denoland: deno: 2.9.7: digest: sha256:fa335acdf6b72106eda2cb6a8cb5f4187e7630e357467489db4b2e7352d5e432resources: dofigen.yml: hash: bb33793c4b91222bc9d01de4911a4150c33290039ddf20f78f594ac96d3677e1 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:24-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/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 so node_modules โ and the binary that embeds it โ stays small) run: - corepack enable pnpm - pnpm install --prod --frozen-lockfile --filter=@openstatus/workflows... --loglevel debug cache: - /root/.local/share/pnpm/store # Stage 4: Build application (compile to binary with Deno) build: fromImage: denoland/deno:2.9.7 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 # Bundle the app to self-contained JS, EXTERNALISING the 3 packages that can't be inlined: # @libsql/client + libsql (native .node loader) and @google-cloud/tasks (google-proto-files reads # files via CJS __dirname). They ship as a minimal side-car node_modules (deno install, ~46MB, # platform-aware so Fly amd64 works) instead of embedding all node_modules. Binary ~146MB vs ~360MB. run: - mkdir -p /tmp/sc - deno eval 'const p="/app/node_modules/.pnpm";const v=(x)=>{for(const e of Deno.readDirSync(p))if(e.name.startsWith(x+"@"))return e.name.slice(x.length+1).split("_")[0]};Deno.writeTextFileSync("/tmp/sc/package.json",JSON.stringify({dependencies:{"@libsql/client":v("@libsql+client"),libsql:v("libsql"),"@google-cloud/tasks":v("@google-cloud+tasks")}}))' - cd /tmp/sc && deno install --node-modules-dir=auto --allow-scripts - cd /app/apps/workflows && deno bundle --platform=deno --minify --sloppy-imports --node-modules-dir=manual --external '@libsql/client' --external 'libsql' --external '@google-cloud/tasks' --output /tmp/sc/_serve.bundle.mjs src/serve.ts - cd /tmp/sc && deno compile --no-check -A --node-modules-dir=manual --output /app/apps/workflows/app /tmp/sc/_serve.bundle.mjs - mkdir -p /app/data # Runtime: distroless glibc base that already ships curl + CA certs (Deno's HTTPS works on it; no apt needed). # Pinned to the multi-arch index digest of hi/curl:latest โ dofigen mis-resolves this registry's tag to an unpullable digest. fromImage: registry.access.redhat.com/hi/curl@sha256:848b81ab5d5e55371d7193fd4f1ea7b605d14dbb039344ffad34a4c1f0d880f4 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 # Copy the self-contained compiled binary (native addon embedded by deno compile) copy: - fromBuilder: build source: /app/apps/workflows/app target: /app/apps/workflows/ chmod: "555" - fromBuilder: build source: /app/data target: /app/data user: "1000:1000" expose: "3000" # Health check โ exec form (JSON array) because the base has no shell for CMD-SHELL healthcheck: interval: 1m timeout: 10s start: 30s retries: 3 cmd: '["curl", "-f", "http://localhost:3000/ping"]' entrypoint: /app/apps/workflows/app