Skip to content

← Back to standards

Branches

Sacred branches (staging, uat, main) each map to one Fly config file, one GitHub Actions workflow, and one Fly org—so the branch name is always the file name.


These branches are sacred—protected in GitHub, tied to a Fly org tier, and almost always paired with a matching config and workflow:

Git branchFly configGitHub workflowFly org
stagingfly.staging.tomlfly-deploy-staging.ymlStaging
uatfly.uat.tomlfly-deploy-uat.ymlUAT
mainfly.main.tomlfly-deploy-main.ymlProduction

main deploys to the production Fly org, but the file name stays fly.main.toml—never fly.production.toml or fly.prod.toml.

If you know the branch, you know the Fly config and the workflow—no special “production” filenames.

Never use: fly.production.toml, fly.prod.toml, fly.stag.toml, deploy-production.yml, deploy-prod.yml.

Each API repo has one shared Dockerfile. The same container image is deployed to staging, UAT, and production; each fly.*.toml defines app name, target org, env vars, and tunnel settings for that tier.

Some services only run in production today. Those repos may have only fly.main.toml and fly-deploy-main.yml—do not add fake staging/UAT files until those tiers exist.

Naming patterns: Naming conventions · Deploy rules: GitHub · Fly