Artemis City ships with three long-lived environment branches that map 1:1 to GitHub Environments and deploy targets. Use them to separate integration work from pre-production rehearsals and production traffic, and to keep production credentials unreachable from lower environments. The namesDocumentation Index
Fetch the complete documentation index at: https://artemiscity.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
dev, staging, and prod are kept identical across the branch, the GitHub Environment, and the file under config/environments/ so there is no mapping layer to forget.
When to use this
- You are deploying Artemis City from a fork or self-hosted clone and need a promotion path between dev, staging, and prod.
- You want CI to run on every push and PR to each environment branch, with the active config validated automatically.
- You want production secrets and approvals enforced by GitHub Environments rather than living in repo-wide secrets.
ARTEMIS_ENV=dev (the default) when loading config.
Branches and approvals
| Branch | GitHub Environment | Purpose | Approvals |
|---|---|---|---|
dev | dev | Integration of feature work | 0 |
staging | staging | Pre-production rehearsal, synthetic data | 1 |
prod | prod | Production. Default branch. | 2 |
dev. Promote dev → staging and staging → prod either by opening a PR manually or by running the Promote workflow from the Actions tab, which opens a draft PR with the right base and head.
Configuration files
Each environment has a YAML file underconfig/environments/:
config/environments/dev.yamlconfig/environments/staging.yamlconfig/environments/prod.yaml
dev.yaml looks like this:
Selecting the active environment
The active environment is selected by theARTEMIS_ENV variable. Valid values are dev, staging, and prod; unset defaults to dev.
load_environment() raises ValueError if ARTEMIS_ENV is set to anything outside the valid set, and FileNotFoundError if the YAML file for the requested environment is missing — both surface early in CI.
Workflows
The repo ships three workflows wired to the environment branches:ci.yml— runs on every push and PR todev,staging,prod. Runs the test suite and asserts the env loader can round-trip all three configs.deploy.yml— runs on push to an env branch and deploys to the matching GitHub Environment. The deploy step is a provider-agnostic placeholder; wire your container build oraws/az/gclouddeploy action there.promote.yml— manual workflow that opens a draft promotion PR (dev → stagingorstaging → prod) on demand.
apisec-scan and jscrambler-code-integrity workflows have been removed. API security scanning and JavaScript code protection should be handled through alternative mechanisms outside the default workflow set.
One-time setup after merge
- Default branch. Settings → Branches: rename
main→prod, setprodas the default branch, and delete the oldmainref. - GitHub Environments. Settings → Environments: create
dev,staging, andprod. Attach required reviewers, wait timers, and per-environment secrets (cloud credentials belong here, not in repo-wide secrets). - Branch protection. Require CI green and the approval counts above on
dev,staging, andprodbefore merging. These rules live under Settings → Rules → Rulesets asProtect dev,Protect staging, andProtect prod. - Provider wiring. Replace the placeholder
Deploystep indeploy.ymlwith the chosen provider action (AWS, Azure, GCP, etc.).
Secrets model
Secrets are scoped per GitHub Environment, not per repo, so production credentials are unreachable fromdev or staging deploys. A workflow that targets the dev environment can only read dev secrets, even if it runs from a branch with write access to the repo. Required approvals are configured on the Environment itself in repo Settings, so promotion to prod always passes through reviewer gates regardless of who opens the PR.