Run development GitOps and UAT
Use this how-to after an implementation pull request has passed its delivery gates. It separates image production, development deployment, acceptance testing, and production promotion.
What you will need
- The exact application commit and successful image-publication evidence
- Immutable Nebula and Singularity image digests
- Access to the rendered GitOps repository and its review workflow
- The required journey IDs for the Feature or release candidate
- The development endpoint after Argo CD reconciliation
Repository contract
| Repository | Responsibility | Argo CD deploys it |
|---|---|---|
corp-v1-aerosim | Application source, local tests, CI, OCI images | No |
gondor-v1-tmpl-aerosim | Single-environment Copier/Jinja source, rendered separately for each environment | No |
gondor-v1-aerosim-dev | Rendered development desired state only | Yes — development only |
gondor-v1-aerosim | Rendered production desired state only | Yes — production only |
corp-v1-aerosim-e2e | pnpm/Playwright journeys and evidence contract | No |
The template represents one environment. Render it once with development inputs into gondor-v1-aerosim-dev, and render it separately with approved production inputs into gondor-v1-aerosim. Do not combine both environments in one rendered repository or copy rendered output between them.
The two targets are isolated on the Gondor Kubernetes cluster:
| Environment | Rendered repository | Namespace | Host |
|---|---|---|---|
| Development | gondor-v1-aerosim-dev | aerosim-development | https://aerosim-dev.apps.lego-cloud.eu |
| Production | gondor-v1-aerosim | aerosim | https://aerosim.apps.lego-cloud.eu |
Argo CD reconciles development through foundation Application 0630-aerosim-development-foundation and runtime Application 0640-aerosim-development. Development keeps its separate disposable PostgreSQL emptyDir and ExternalSecrets references to the existing Bitwarden ClusterSecretStore. Delivery owns development updates and applies them immediately after immutable images and exact-head evidence are available. Delivery must not modify gondor-v1-aerosim. Releases alone owns production promotion.
Deploy to development
- Verify the application PR merged and the exact default-head CI and image-publication jobs succeeded.
- Resolve the full source commit and immutable image digests from the publication evidence.
- Set the development Copier inputs to the source revision and the Nebula and Singularity digests.
- Run the authoritative single-environment Copier render into
gondor-v1-aerosim-dev. - Confirm the development repository equals that render and no production repository change is present.
- Validate template tests, rendered YAML, immutable-selection tests, Argo reconciliation tests, policy checks, and
git diff --check. - If the reusable template changed, merge its reviewed pull request first. Merge the reviewed
gondor-v1-aerosim-devpull request without waiting for UAT or a production release request. - Let Argo CD reconcile. Do not run routine
kubectl applyorhelm upgradefrom CI or a contributor shell. - Verify both development Applications report
SyncedandHealthy, the workloads are ready, the observed image IDs equal the selected digests, and the endpoint health check succeeds.
Freeze the UAT deployment tuple
Record one immutable tuple before a journey starts:
application_commit
image_digests
rendered_GitOps_commit
rendered_GitOps_repository=corp-v1-aerosim/gondor-v1-aerosim-dev
ArgoCD_application
ArgoCD_sync_revision
ArgoCD_sync_status=Synced
ArgoCD_health_status=Healthy
environment=development
base_url
E2E_commit
required_journey_ids
If Argo CD reconciles a different revision while a run is active, invalidate the run and start again against the new tuple.
Execute UAT
UAT tests only the deployment reconciled from gondor-v1-aerosim-dev; production is not a substitute for the development entry gate.
- Hand the tuple from
corp-v1-aerosim-deliverytocorp-v1-aerosim-uat. - Fetch the exact E2E revision and run
task validate. - Execute the required smoke or regression journey set with
UAT_BASE_URLset to the verified endpoint. - Preserve JUnit and JSON results plus traces and screenshots for failures.
- Classify each failure as product, environment, test, or unresolved.
- Return product or environment failures to Kanban/Delivery. Delivery publishes a corrected immutable image set and a new GitOps revision before retest.
- Send
UAT_PASSEDevidence to Releases only when every required journey passed against one tuple.
Authenticated journeys use a runtime-generated Playwright storage-state path. Never commit cookies, credentials, tokens, .env files, or generated evidence containing personal data.
Promote through Releases
A UAT pass does not authorize production. Releases additionally requires RootAtSkic's explicit release request and validates that the UAT tuple matches the intended candidate. Releases then renders the same single-environment Copier template with production inputs into gondor-v1-aerosim, promotes that reviewed revision, and independently verifies https://aerosim.apps.lego-cloud.eu plus rollback readiness before final DONE.
Channel path
general → scope → architecture → kanban → delivery → uat → releases → general
A failed journey returns through uat → kanban/delivery; it does not bypass the approved Task lifecycle.