CI/CD Documentation¶
This documentation describes the different CI/CD workflows of the project and what happens in each use case.
Creating or updating a Pull Request¶
When a Pull Request is created or updated (events opened or synchronize), the Review workflow (review.yml) is triggered.
Tests and linters are run and it is possible to deploy the PR branch to the preprod environment.
Review workflow flow¶
graph TD
B[Review workflow triggered] --> C
subgraph C["CI execution"]
C1[Backend linter<br/>formatting, ruff, tofu, terragrunt]
C2[Frontend linter<br/>prettier]
C3["Backend tests<br/>Migration checks<br/>unit, integration, data"]
C4[Frontend tests]
C5[E2E tests<br/>if main branch or frontend label]
end
subgraph E[Airflow deployment]
E1[Webserver deployment]
E2[Scheduler deployment]
end
C --> D{Confirm deployment to preprod?}
D -->|Yes| F[Webapp deployment to preprod]
D -->|Yes| G[Build & push of the Airflow Docker image]
G --> E[Deployment of Airflow on Scaleway]
F --> H[Update of the Draft release]
Merging a PR into main¶
When a Pull Request is merged into the main branch, the CD workflow (cd.yml) is triggered.
The workflow is very similar to the review workflow: tests and linters are run and it is possible to deploy the main branch to the preprod environment.
CD workflow flow¶
graph TD
B[CD workflow triggered] --> C
subgraph C["CI execution"]
C1[Backend linter<br/>formatting, ruff, tofu, terragrunt]
C2[Frontend linter<br/>prettier]
C3["Backend tests<br/>Migration checks<br/>unit, integration, data"]
C4[Frontend tests]
C5[E2E tests]
end
subgraph E[Airflow deployment]
E1[Webserver deployment]
E2[Scheduler deployment]
end
C --> D{Confirm deployment to preprod?}
D -->|Yes| F[Webapp deployment to preprod]
D -->|Yes| G[Build & push of the Airflow Docker image]
G --> E[Deployment of Airflow on Scaleway]
F --> H[Update of the Draft release]
Publishing a release¶
When a release is published on GitHub (event published), the Deploy workflow (deploy.yml) is triggered to deploy to production.
The tagged version of the code is deployed to the prod environment.
Deploy workflow flow¶
graph TD
C[Deployment of the webapp release version to production]
F[Build Airflow Docker images<br/>The image is tagged with the version number<br/>This tagged image is used for the production deployment]
F --> H[Deployment of the Scheduler on Scaleway in production]
F --> I[Deployment of the Webserver on Scaleway in production]
Scheduled workflows¶
Database synchronization¶
The sync_databases.yml workflow synchronizes production data to preproduction.
Schedule: Every Sunday at midnight (cron: 0 0 * * SUN)
Actions performed:
Restore the production database to preproduction
Run migrations in a one-off container
Reset the suggestions table
Create the remote database server between webapp and warehouse
Synchronize S3 buckets (copy from prod to preprod)
Dependabot¶
The dependabot.yml file configures automatic dependency updates.
Schedule: Every Tuesday at 06:00 UTC
Ecosystems monitored:
uv: Python dependencies (weekly)
npm: JavaScript dependencies (weekly, grouped by categories: parcel, jest, eslint)
GitHub Actions: Actions used in the workflows (weekly)
Terraform: Terraform modules in
/infrastructure(weekly)
Documentation publication¶
The publish-docs.yml workflow automatically publishes the documentation to GitHub Pages.
Trigger: On every push to the main branch
The documentation is available here: https://incubateur-ademe.github.io/quefairedemesobjets/README.html
Environments¶
The project uses several GitHub environments to store environment variables specific to each of them: preprod and prod.
Notifications¶
Production deployments trigger Mattermost notifications in the lvao-tour-de-controle channel:
Deployment start notification
Success notification with URL
Failure notification with a link to the logs
Notification if the site is down after deployment