Skip to main content

Build Pipelines

All container images and the installer bundle are built by GitHub Actions. No builds happen on production servers — zynctl.sh deploy only pulls pre-built images.


Container Images

#ImageSource RepoWorkflowArch
1zynomi/zynexactms-webdocker-build.ymlamd64
2zynomi/ctms-api-gatewayctms.devopsbuild-ctms-api-gateway.ymlamd64 + arm64
3zynomi/ctms-initctms.devopsbuild-ctms-init.ymlamd64 + arm64
4zynomi/ctms-supabase-seedctms.devopsbuild-ctms-supabase-seed.ymlamd64 + arm64
5zynomi/frappe-marley-healthctms.devopsbuild-frappe-marley-health.ymlamd64
6zynomi/ctms-cubectms-data-pipeline-ai-analyticsdocker-build-ctms-cube.ymlamd64
7zynomi/ctms-dbtctms-data-pipeline-ai-analyticsdocker-build-ctms-dbt.ymlamd64
8zynomi/ctms-ingesterctms-data-pipeline-ai-analyticsdocker-build-ctms-ingester.ymlamd64
9zynomi/ctms-mcp-serverctms-data-pipeline-ai-analyticsdocker-build-ctms-mcp-server.ymlamd64
10zynomi/ctms-odm-apictms-data-pipeline-ai-analyticsdocker-build-ctms-odm-api.ymlamd64
11zynomi/product-docsdocs.zynomi.comdocker-build.ymlamd64
12zynomi/sublinksublinkdocker-build.ymlamd64
13zynomi/comp-websitezynomi-comp-web-sitedocker-build.ymlamd64

Installer Bundle

ArtifactWorkflowSource RepoOutput
zynctl-bundle-*.tar.gzbuild-install-bundle.ymlctms.devopsGitHub Release tarball + SHA256 checksum

See Installer Bundle for contents and deployment instructions.

Data Pipeline Runner

WorkflowSource RepoPurposeSchedule
dbt-lakehouse-pipeline.ymlctms-data-pipeline-ai-analyticsRuns Ingester → DBT on CI infraDaily 2 AM UTC + manual

This workflow builds throwaway images locally (push: false) and executes the ETL pipeline against the remote database. It does not publish images — those are handled by the dedicated build workflows above.


Trigger Strategies

Every build workflow supports three trigger modes:

TriggerWhen it firesWhat happens
Path-filtered pushPush to main (or develop) touching relevant pathsBuilds and pushes latest + auto-increment tag
Git tagPush a semver tag (e.g. v1.2.0)Builds and pushes immutable semver tags
Manual dispatchTriggered from Actions UIBuilds on demand with optional inputs

Path Filters by Repo

RepoPaths that trigger builds
ctms.devopsPer-service: ctms-api-gateway/**, scripts/frappe-seed/**, scripts/supabase-seed/**, frappe-marley-health/**
ctms-data-pipeline-ai-analyticsPer-service: ctms-cube/**, ctms-dbt/**, ctms-ingester/**, ctms-mcp-server/**, ctms-odm-xml-pdf-generator/**
ctms-webAny push to main or develop
docs.zynomi.comAny push to main or develop
sublinkAny push to main or develop
zynomi-comp-web-siteAny push to main or develop

PR Behaviour

Pull requests to main/develop trigger a build-only step (compile + lint) but never push images.


Secrets & Variables

Registry Credentials

Required in every repo that builds images:

SecretDescription
DOCKER_USERNAMEContainer registry username
DOCKER_PASSWORDContainer registry access token

Application Build Args (ctms-web only)

The Zynexa app bakes environment values at build time via --build-arg:

TypeVariablePurpose
SecretDATABASE_URLPrisma connection string
SecretDIRECT_URLPrisma direct connection
SecretSUPABASE_URLSupabase API endpoint
SecretSUPABASE_ANON_KEYSupabase public key
SecretSUPABASE_SERVICE_ROLE_KEYSupabase admin key
SecretAPI_BASE_URLBackend API URL
SecretNEXT_PUBLIC_API_BASE_URLClient-side API URL
SecretNEXT_PUBLIC_DEFAULT_PRACTITIONER_IDDefault practitioner
SecretNEXT_PUBLIC_PUBLIC_ROUTESPublic route list
SecretNEXT_PUBLIC_STUDY_PARTICIPATION_CONCENTConsent form URL
VarNEXT_PUBLIC_CUBE_API_URLCube.dev endpoint
VarNEXT_PUBLIC_MCP_API_ENDPOINTMCP server endpoint
VarNEXT_PUBLIC_ODM_API_ENDPOINTODM API endpoint
VarNEXT_PUBLIC_BRAND_NAMEBrand display name
VarNEXT_PUBLIC_SITE_URLPublic site URL
VarNEXT_PUBLIC_SITE_DESCRIPTIONSEO description
VarNEXT_PUBLIC_OG_IMAGESocial share image
VarNEXT_PUBLIC_LOGO_PREFIXLogo asset prefix
VarNEXT_PUBLIC_LOGO_EXTLogo file extension
VarNEXT_PUBLIC_STUDY_PERSONNEL_ROLESPersonnel role list
VarNEXT_PUBLIC_USER_ROLESUser role list
VarNEXT_PUBLIC_MCP_CHAT_TITLEAI chat title
VarNEXT_PUBLIC_MCP_CHAT_SUBTITLEAI chat subtitle
VarNEXT_PUBLIC_MCP_CHAT_ENABLEDAI chat feature flag
VarNEXT_PUBLIC_MCP_CHAT_THEMEAI chat theme

Data Pipeline Secrets (dbt-lakehouse-pipeline only)

SecretPurpose
FRAPPE_BASE_URLFrappe API endpoint for ingestion
TARGET_DB_HOSTTarget PostgreSQL host
TARGET_DB_PORTTarget PostgreSQL port
TARGET_DB_NAMETarget database name
TARGET_DB_USERDatabase username
TARGET_DB_PASSWORDDatabase password
TARGET_DB_SSLMODESSL mode (require, disable)

Versioning

For the full versioning strategy, tag conventions, and image tag matrix, see CI/CD & Versioning.