CI - Continuous Integration
We use GitHub Actions for CI.
Workflows
ci.ymlruns on every pull request (and is also called bycd-staging.ymlbefore a staging deploy). It has four jobs:ci-brakeman— Brakeman static security analysis onuala-mainci-check-database-schema-sync— checksdb/schema.rbis in sync with migrationsci-lint— RuboCop, run as a matrix across every Ruby sub-app (connect-integration,store-integration,tw-integration,uala-admin,uala-auth,uala-brands,uala-core,uala-graph,uala-internal-tools,uala-main,uala-statistics)ci-tests-coverage— RSpec + Undercover coverage, same matrix, against Postgres/Redis/Kafka/ ClickHouse/OpenSearch service containers
ci-actionlint.ymllints any change under.github/**via the sharedci-actionlint.ymlreusable workflow.
Deployment (CD) is a separate set of workflows — see
CD - Continuous Deployment, covering both
test environments and
production releases — built on reusable workflows from
treatwell/shared-gh-actions. Application
secrets do not travel through either — they are set in AWS Secrets Manager and mounted by the
Secrets Store CSI driver, see Deployment secrets flow.
Troubleshooting
Every job's logs are visible directly in the Actions tab of the run in question — click into the failing job to see the full step-by-step output.
- To re-run a failed job (or the whole run): use the "Re-run jobs" button in the GitHub UI, or
gh run rerun <run-id> --repo treatwell/uala-backend(add--failedto only re-run failed jobs). - To watch a run from the CLI as it progresses:
gh run watch <run-id> --repo treatwell/uala-backend. - Flaky infra failures (service container not healthy in time, transient network error) are usually fixed by a re-run; a failure that reproduces on re-run is almost always a real issue with the change under test.