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.

Setup: AWS OIDC configuration — how to configure the AWS IAM identity provider and role that GitHub Actions uses to authenticate.

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-configuratorfirefly-configurator-cloudfrontCloudFront distribution + Route 53 alias for the Configurator UI
cloudfront-firmwarefirefly-cloudfront-firmwareCloudFront distribution + Route 53 alias for firmware OTA delivery
cloudfront-fmcfirefly-cloudfront-fmcCloudFront distribution + Route 53 alias for the FMC
cognitofirefly-cognitoCognito User Pool with Google IdP, custom domain, pre-signup Lambda
configurator-uiBuilds and syncs the Configurator UI to S3; invalidates CloudFront cache
dynamodb-devicesfirefly-dynamodb-devicesDynamoDB table for registered device records
dynamodb-firmwarefirefly-dynamodb-firmwareDynamoDB table for firmware metadata
dynamodb-registration-keysfirefly-dynamodb-registration-keysDynamoDB table for one-time device registration keys
dynamodb-usersfirefly-dynamodb-usersDynamoDB allowlist table for invitation-only Cognito pre-signup
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-api-devices-getfirefly-func-api-devices-getLambda: GET /devices
func-api-devices-register-postfirefly-func-api-devices-register-postLambda: POST /devices/register
func-api-devices-registration-getfirefly-func-api-devices-registration-getLambda: GET /devices/{uuid}/registration
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/{class}/
func-api-registration-keys-getfirefly-func-api-registration-keys-getLambda: GET /registration-keys
func-api-registration-keys-postfirefly-func-api-registration-keys-postLambda: POST /registration-keys
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-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-configuratorfirefly-configurator-s3S3 bucket for Configurator UI static assets
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-fmcfirefly-s3-fmcS3 bucket for FMC static assets
shared-layerfirefly-shared-layerLambda layer: shared Python modules (logging, AppConfig, feature flags)
fmc-appBuilds and syncs the FMC 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
dynamodb-devices
dynamodb-registration-keys
acm
shared-layer
s3-configurator
s3-firmware-public
s3-fmc
func-cognito-pre-signupdynamodb-users
cloudfront-configuratoracm, s3-configurator
cloudfront-firmwareacm, s3-firmware-public
cloudfront-fmcacm, s3-fmc
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, cloudfront-fmc
fmc-appcloudfront-fmc, cognito
func-api-appconfig-getapi-gateway
func-api-appconfig-patchapi-gateway
func-api-devices-register-postapi-gateway, dynamodb-devices, dynamodb-registration-keys, shared-layer
func-api-devices-registration-getapi-gateway, dynamodb-devices, shared-layer
func-api-devices-getapi-gateway, dynamodb-devices, shared-layer
func-api-registration-keys-postapi-gateway, dynamodb-registration-keys, shared-layer
func-api-registration-keys-getapi-gateway, dynamodb-registration-keys, shared-layer
run-integration-testsdynamodb-firmware, s3-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, func-api-devices-register-post, func-api-devices-registration-get, func-api-devices-get, func-api-registration-keys-post, func-api-registration-keys-get, fmc-app

delete-all Dependency Order

JobNeeds
delete-fmc-app
delete-dynamodb-firmware
delete-s3-firmware
delete-cloudfront-configurator
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-func-api-appconfig-get
delete-func-api-appconfig-patch
delete-func-api-devices-register-post
delete-func-api-devices-registration-get
delete-func-api-devices-get
delete-func-api-registration-keys-post
delete-func-api-registration-keys-get
delete-cloudfront-fmcdelete-fmc-app
delete-s3-configuratordelete-cloudfront-configurator
delete-s3-fmcdelete-cloudfront-fmc
delete-s3-firmware-publicdelete-cloudfront-firmware
delete-api-gatewaydelete-func-api-health-get, 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-users-get, delete-func-api-users-post, delete-func-api-users-delete, delete-func-api-users-patch, delete-func-api-appconfig-get, delete-func-api-appconfig-patch, delete-func-api-devices-register-post, delete-func-api-devices-registration-get, delete-func-api-devices-get, delete-func-api-registration-keys-post, delete-func-api-registration-keys-get
delete-cognitodelete-api-gateway
delete-func-cognito-pre-signupdelete-cognito
delete-acmdelete-api-gateway, delete-cloudfront-configurator, delete-cloudfront-firmware, delete-cloudfront-fmc, delete-cognito
delete-dynamodb-usersdelete-func-cognito-pre-signup, delete-func-api-users-delete, delete-func-api-users-post
delete-dynamodb-devicesdelete-func-api-devices-register-post, delete-func-api-devices-registration-get, delete-func-api-devices-get
delete-dynamodb-registration-keysdelete-func-api-devices-register-post, delete-func-api-registration-keys-post, delete-func-api-registration-keys-get
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, delete-func-api-devices-register-post, delete-func-api-devices-registration-get, delete-func-api-registration-keys-post, delete-func-api-registration-keys-get

Dependency Graph

Deploy-all dependency graph