Skip to content

GitHub Actions Workflows

GitHub Actions workflows that deploy and delete all FireFly-Cloud AWS infrastructure. Each workflow manages a single CloudFormation stack. Two orchestration workflows (deploy-all and delete-all) coordinate the full set in dependency order.

Workflow Index

WorkflowCloudFormation StackPurpose
acmfirefly-acmACM certificate for API Gateway, CloudFront, and Cognito custom domains (us-east-1)
api-gatewayfirefly-api-gatewayHTTP API Gateway with custom domain, Cognito JWT authorizer, CORS
cloudfront-firmwarefirefly-cloudfront-firmwareCloudFront distribution + Route 53 alias for firmware OTA delivery
cloudfront-uifirefly-cloudfront-uiCloudFront distribution + Route 53 alias for the web UI
cognitofirefly-cognitoCognito User Pool with Google IdP, custom domain, pre-signup Lambda
dynamodb-firmwarefirefly-dynamodb-firmwareDynamoDB table for firmware metadata
dynamodb-usersfirefly-dynamodb-usersDynamoDB allowlist table for invitation-only Cognito pre-signup
func-api-firmware-deletefirefly-func-api-firmware-deleteLambda: DELETE /firmware/
func-api-firmware-download-getfirefly-func-api-firmware-download-getLambda: GET /firmware/{zip_name}/download
func-api-firmware-getfirefly-func-api-firmware-getLambda: GET /firmware, GET /firmware/
func-api-firmware-status-patchfirefly-func-api-firmware-status-patchLambda: PATCH /firmware/{zip_name}/status
func-api-health-getfirefly-func-api-health-getLambda: GET /health
func-api-ota-getfirefly-func-api-ota-getLambda: GET /ota/{product_id}/
func-api-users-deletefirefly-func-api-users-deleteLambda: DELETE /users/
func-api-users-getfirefly-func-api-users-getLambda: GET /users
func-api-users-patchfirefly-func-api-users-patchLambda: PATCH /users/
func-api-users-postfirefly-func-api-users-postLambda: POST /users
func-api-appconfig-getfirefly-func-api-appconfig-getLambda: GET /appconfig (Configuration page)
func-api-appconfig-patchfirefly-func-api-appconfig-patchLambda: PATCH /appconfig (Configuration page)
func-cognito-pre-signupfirefly-func-cognito-pre-signupLambda: Cognito pre-signup trigger (allowlist check)
func-s3-firmware-deletedfirefly-func-s3-firmware-deletedLambda: S3 delete event on processed/ and errors/
func-s3-firmware-uploadedfirefly-func-s3-firmware-uploadedLambda: S3 put event on incoming/*.zip
s3-firmwarefirefly-s3-firmwarePrivate S3 bucket for firmware ZIP processing pipeline
s3-firmware-publicfirefly-s3-firmware-publicPublic S3 bucket for released firmware binaries (behind CloudFront)
s3-uifirefly-s3-uiS3 bucket for web UI static assets
shared-layerfirefly-shared-layerLambda layer: shared Python modules (logging, AppConfig, feature flags)
ui-appfirefly-ui-appBuilds and syncs the web UI to S3; invalidates CloudFront cache
deploy-allOrchestrates full deploy in dependency order
delete-allOrchestrates full teardown in reverse-dependency order

deploy-all Dependency Order

Deployments run in parallel within each wave. A job only starts after all jobs in its needs: list have succeeded.

JobNeeds
dynamodb-firmware
dynamodb-users
acm
shared-layer
s3-firmware-public
s3-ui
func-cognito-pre-signupdynamodb-users
cloudfront-firmwareacm, s3-firmware-public
cloudfront-uiacm, s3-ui
cognitoacm, func-cognito-pre-signup
api-gatewayacm, cognito
func-api-health-getapi-gateway
func-api-users-getapi-gateway, cognito
func-api-users-postapi-gateway, dynamodb-users
func-api-users-deleteapi-gateway, cognito, dynamodb-users
func-api-users-patchapi-gateway, cognito
func-api-firmware-getapi-gateway, shared-layer
func-api-firmware-status-patchapi-gateway, shared-layer
func-api-firmware-deleteapi-gateway, shared-layer
func-s3-firmware-uploadedshared-layer
func-s3-firmware-deletedshared-layer
func-api-ota-getapi-gateway, shared-layer, cloudfront-firmware
func-api-firmware-download-getapi-gateway, shared-layer, s3-firmware
s3-firmwarefunc-s3-firmware-uploaded, func-s3-firmware-deleted
ui-appcloudfront-ui, cognito
func-api-appconfig-getapi-gateway
func-api-appconfig-patchapi-gateway
run-integration-testss3-firmware, func-api-firmware-get, func-api-firmware-status-patch, func-api-firmware-delete, func-api-health-get, func-api-ota-get, func-api-firmware-download-get, func-api-users-get, func-api-users-post, func-api-users-delete, func-api-users-patch, func-api-appconfig-get, func-api-appconfig-patch, ui-app

delete-all Dependency Order

JobNeeds
delete-ui-app
delete-dynamodb-firmware
delete-s3-firmware
delete-cloudfront-firmware
delete-func-api-health-get
delete-func-api-users-get
delete-func-api-users-post
delete-func-api-users-delete
delete-func-api-users-patch
delete-func-api-firmware-get
delete-func-api-firmware-status-patch
delete-func-api-firmware-delete
delete-func-api-ota-get
delete-func-api-firmware-download-get
delete-cloudfront-uidelete-ui-app
delete-s3-uidelete-cloudfront-ui
delete-s3-firmware-publicdelete-cloudfront-firmware
delete-func-api-appconfig-get
delete-func-api-appconfig-patch
delete-api-gatewaydelete-func-api-health-get, delete-func-api-users-get, delete-func-api-users-post, delete-func-api-users-delete, delete-func-api-users-patch, delete-func-api-firmware-get, delete-func-api-firmware-status-patch, delete-func-api-firmware-delete, delete-func-api-ota-get, delete-func-api-firmware-download-get, delete-func-api-appconfig-get, delete-func-api-appconfig-patch
delete-cognitodelete-api-gateway
delete-func-cognito-pre-signupdelete-cognito
delete-acmdelete-api-gateway, delete-cloudfront-firmware, delete-cloudfront-ui, delete-cognito
delete-dynamodb-usersdelete-func-cognito-pre-signup, delete-func-api-users-delete, delete-func-api-users-post
delete-func-s3-firmware-uploadeddelete-s3-firmware
delete-func-s3-firmware-deleteddelete-s3-firmware
delete-shared-layerdelete-func-s3-firmware-uploaded, delete-func-s3-firmware-deleted, delete-func-api-firmware-get, delete-func-api-firmware-status-patch, delete-func-api-firmware-delete, delete-func-api-ota-get, delete-func-api-firmware-download-get

Dependency Graph

Deploy-all dependency graph