Each service in the GSM Application has its own GitHub Actions workflow file underDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/ti-infinite/GSMApplication/llms.txt
Use this file to discover all available pages before exploring further.
.github/workflows/. Workflows are path-scoped, meaning a push to develop only triggers the workflow for the service whose files changed. All workflows share the same branch-to-environment mapping logic and use GitHub’s OIDC integration to assume AWS IAM roles without storing long-lived credentials as secrets.
Workflow Files
| Workflow file | Service | Deploy target |
|---|---|---|
deploy-gsmfrontend.yml | Frontend SPA | AWS S3 + CloudFront |
deploy-gsmauth-service.yml | GSMAuth microservice | AWS ECS |
deploy-gsmapplication-service.yml | GSMApplication microservice | AWS ECS |
deploy-gsmoperations-service.yml | GSMOperations microservice | AWS ECS |
deploy-gsmgateway-service.yml | GSMGateway (YARP) | AWS ECS |
Trigger Conditions
All five workflows share the same trigger pattern:- Push to
develop— fires when files in the service’s directory are modified directly on the branch. - Pull request closed against
developormain— thetypes: [closed]trigger fires on both merges and non-merge closures. The frontend workflow guards against non-merge closures with an additionalgithub.event.pull_request.merged == truecondition on itsdeployjob; the backend workflows rely on theWORKFLOW_BACKEND_ENABLEDflag and do not add a separate merged check. - Manual
workflow_dispatch— allows targeting any environment by enteringdev,qa, orprodin the GitHub Actions UI.
Branch → Environment Mapping
Every workflow contains adetermine-env job that sets the target environment based on the branch name or the manual dispatch input:
| Branch | Environment |
|---|---|
develop | dev |
quality | qa |
main | prod |
frontend-dev, frontend-qa, frontend-prod for the frontend; backend-dev, backend-qa, backend-prod for backend services), which gates access to the environment-specific secrets and variables.
Feature Flags
Each workflow checks a repository variable before running any job:| Workflow | Feature-flag variable |
|---|---|
| Frontend | WORKFLOW_FRONTEND_ENABLED |
| All backend services | WORKFLOW_BACKEND_ENABLED |
"true", both the determine-env and deploy jobs are skipped entirely.
Required Secrets & Variables Per Environment
- Frontend
- Backend Services
Configured on the
frontend-dev, frontend-qa, and frontend-prod GitHub Actions environments.| Name | Type | Description |
|---|---|---|
AWS_INFRA_ROLE_ARN | Secret | IAM role ARN that GitHub Actions assumes via OIDC to get AWS access |
S3_BUCKET_NAME | Variable | S3 bucket where the built dist/ folder is synced |
CLOUDFRONT_DISTRIBUTION_ID | Variable | CloudFront distribution to invalidate after the S3 sync |
VITE_TENANT_DEFAULT | Variable | Default Company ID baked into the frontend bundle at build time |
VITE_TENANT_IDS | Variable | Comma-separated list of selectable tenant IDs baked into the bundle |
Frontend Deployment Pipeline
Install dependencies
Node.js 22 is set up with npm cache keyed to
package-lock.json. Dependencies are installed with npm ci for reproducible installs.Generate API clients
swagger/. This ensures the build always uses the latest API surface even if generated files were not committed.Build the SPA
VITE_TENANT_DEFAULT and VITE_TENANT_IDS are injected as environment variables from GitHub Actions environment variables, so the correct tenant configuration is baked into the bundle for each target environment.Sync to S3
--delete flag removes files from S3 that no longer exist in dist/. SHA-256 checksums are used for transfer integrity verification.Backend Service Deployment Pipeline
All four backend workflows (auth, application, operations, gateway) follow the same steps.Configure AWS credentials
The
aws-actions/configure-aws-credentials@v4 action assumes the AWS_INFRA_ROLE_ARN using GitHub’s OIDC provider. No AWS access keys are stored in GitHub.Build and push Docker image to ECR
Images are built for the
linux/arm64 platform using Docker Buildx and QEMU emulation (for CI runners that are x86-64). Each image is pushed with two tags: a commit SHA tag and a latest tag.Update ECS task definition
The workflow fetches the current task definition for the service, replaces the container image URI with the newly pushed image tag using
jq, strips read-only fields, and registers a new task definition revision.Task family names follow the pattern <env>-<APP_NAME>-<service>-task, for example dev-gsmapp-auth-task.All backend workflows use
wait-for-service-stability: true, meaning the GitHub Actions job will not report success until ECS confirms that the new task is running and the old task has been drained. This prevents false-positive green builds when a deployment fails to start.