Skip to content

Merge pull request #79 from infinum/feature/ecs #6

Merge pull request #79 from infinum/feature/ecs

Merge pull request #79 from infinum/feature/ecs #6

name: Deploy-staging-ecs

Check failure on line 1 in .github/workflows/deploy-staging-ecs.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/deploy-staging-ecs.yml

Invalid workflow file

you may only define up to 10 `inputs` for a `workflow_dispatch` event
on:
workflow_dispatch:
inputs:
tags:
description: 'Set custom tag for image'
required: true
type: string
environment:
type: string
required: true
default: 'staging'
aws_region:
description: AWS region
required: false
type: string
aws_ecr_region:
description: AWS region where ECR is set up
required: false
type: string
aws_ecr_account_id:
description: AWS ECR account id (if ECR is on a separate AWS account)
required: false
type: string
timeout_minutes:
required: false
type: number
default: 30
context:
required: false
type: string
default: "."
file:
required: false
type: string
target:
required: false
type: string
description: Target stage to build
platforms:
required: false
type: string
default: "linux/amd64"
provenance:
required: false
type: boolean
default: false
build_args:
required: false
type: string
ssm_param_store_prefix:
required: false
type: string
ssm_param_store_destination_path:
required: false
type: string
secret_files:
description: Docker build secrets
required: false
type: string
aws_role_to_assume:
description: AWS IAM role to assume
required: false
type: string
task_def_path:
required: true
type: string
default: '.aws/ecs/task-definition-app-staging.json'
container_name:
required: true
type: string
description: Name of the container in task definition
default: 'js-react-example'
ecs_service:
required: true
type: string
default: 'js-react-example'
ecs_cluster:
required: true
type: string
push:
branches:
- main
paths-ignore:
- '.github/**'
- '**.md'
jobs:
build-push-image:
name: Build deploy image and push to registry
runs-on: ubuntu-latest
environment: ${{ vars.environment }}
timeout-minutes: ${{ vars.timeout_minutes }}
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
- name: Configure AWS credentials (with OIDC or access keys)
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ vars.aws_role_to_assume || '' }}
aws-region: ${{ vars.aws_region }}
role-session-name: "github-actions-session"
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID || '' }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY || '' }}
- name: Pull secrets from AWS SSM parameter store
if: ${{ vars.ssm_param_store_prefix }}
uses: infinum/[email protected]
with:
prefix: ${{ vars.ssm_param_store_prefix }}
destination_path: ${{ vars.ssm_param_store_destination_path }}
- name: Configure custom region for AWS ECR
if: ${{ vars.aws_ecr_region != vars.aws_region }}
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ vars.aws_ecr_region }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
with:
registries: ${{ vars.aws_ecr_account_id }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: ${{ vars.context }}
platforms: ${{ vars.platforms }}
provenance: ${{ vars.provenance }}
file: ${{ vars.file }}
target: ${{ vars.target }}
push: true
build-args: ${{ vars.build_args }}
tags: ${{ vars.aws_ecr_uri }}:${{ vars.tags }}
cache-from: type=gha
cache-to: type=gha,mode=max
secret-files: ${{ vars.secret_files }}
deploy-to-ecs:
name: 'Deploy to ECS'
runs-on: ubuntu-latest
environment: ${{ vars.environment }}
timeout-minutes: ${{ vars.timeout_minutes }}
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ vars.aws_region }}
- name: Fill in the new image ID in the Amazon ECS task definition
id: gen-task-def
uses: aws-actions/[email protected]
with:
task-definition: ${{ vars.task_def_path }}
container-name: ${{ vars.container_name }}
image: ${{ vars.aws_ecr_uri }}:${{ vars.tags }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v2
with:
task-definition: ${{ steps.gen-task-def.outputs.task-definition }}
service: ${{ vars.ecs_service }}
cluster: ${{ vars.ecs_cluster }}
wait-for-service-stability: true