Joby uses GitHub Actions for pull request validation and EKS deployments.
CIruns backend restore/build/test, frontend install/lint/build, Terraform validation, Kubernetes manifest rendering, and Docker image builds.Deploy to AWSruns after a successfulCIworkflow onmain, or manually fromworkflow_dispatch. It builds backend/frontend images with immutable commit SHA tags, pushes them to ECR, checks ECR scan findings, renders Kubernetes manifests, and rolls the app out to EKS.
Infrastructure is provisioned with Terraform locally (or another process outside GitHub Actions). Apply terraform/ changes outside the pipeline.
AWS_ROLE_TO_ASSUME: IAM role ARN trusted by GitHub OIDC.
AWS_REGION: defaults tous-east-1.PROJECT_NAME: defaults tojoby.ENVIRONMENT: defaults todev.APP_HOSTNAME: public application hostname from Terraform outputapp_hostname.ORIGIN_HOSTNAME: ALB origin hostname from Terraform outputorigin_hostname.ACM_CERTIFICATE_ARN: ACM certificate ARN from Terraform outputacm_certificate_arn.WAF_WEB_ACL_ARN: WAF Web ACL ARN from Terraform outputwaf_web_acl_arn.BACKEND_IRSA_ROLE_ARN: backend service account IAM role from Terraform outputbackend_irsa_role_arn.APPLICATION_SECRET_NAME: Secrets Manager name from Terraform outputapplication_secret_name.EKS_CLUSTER_NAME: optional override. Defaults to${PROJECT_NAME}-${ENVIRONMENT}-eks.ECR_BACKEND_REPOSITORY: optional override. Defaults to${PROJECT_NAME}-${ENVIRONMENT}-joby-backend.ECR_FRONTEND_REPOSITORY: optional override. Defaults to${PROJECT_NAME}-${ENVIRONMENT}-joby-frontend.S3_BUCKET_NAME: required by the Kubernetes config map.CORS_ALLOWED_ORIGIN: public frontend origin allowed by the backend. Defaults tohttps://${APP_HOSTNAME}during deployment.VITE_API_URL: defaults to/api.
The GitHub OIDC role needs permission to:
- push images to the backend and frontend ECR repositories;
- describe ECR image scan findings;
- call
eks:DescribeCluster; - update Kubernetes resources in the target EKS cluster.
Grant the role Kubernetes access to the cluster through EKS access entries or the cluster's aws-auth mapping before using the deploy workflow.