fix: update workflow describetask error #28
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy to Amazon ECS | |
on: | |
push: | |
branches: ['Abel/Deploy'] # Update to push to 'main' when complete | |
concurrency: | |
group: deploy-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
AWS_REGION: ${{ secrets.AWS_REGION }} # Use GitHub secrets for AWS region | |
ECR_REPOSITORY: app # Set this to your Amazon ECR repository name | |
ECS_SERVICE: SkyDevOps # Set this to your Amazon ECS service name | |
ECS_CLUSTER: Sky # Set this to your Amazon ECS cluster name | |
ECS_TASK_DEFINITION: ecs-task-def.json # Path to your task definition file in the repository | |
permissions: | |
contents: read | |
jobs: | |
deploy: | |
name: Deploy | |
runs-on: ubuntu-latest | |
environment: production | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- 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: ${{ secrets.AWS_REGION }} | |
- name: Login to Amazon ECR | |
id: login-ecr | |
uses: aws-actions/amazon-ecr-login@v2 | |
- name: Build and push new Docker image to Amazon ECR | |
id: build-image | |
env: | |
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} | |
IMAGE_TAG: latest | |
run: | | |
# Enable error handling | |
set -e | |
set -o pipefail | |
# Use Docker Buildx to build the image for x86_64 | |
docker buildx build --platform linux/amd64 --push -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG . | |
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT | |
- name: Check for task definition changes | |
id: check-task-def | |
run: | | |
# Enable error handling | |
set -e | |
set -o pipefail | |
# Try to describe the latest task definition | |
LATEST_TASK_DEF=$(aws ecs describe-task-definition \ | |
--task-definition ${{ env.ECS_SERVICE }} || true) | |
if [ -z "$LATEST_TASK_DEF" ]; then | |
echo "No existing task definition found, registering new one." | |
echo "SKIP_REGISTRATION=false" >> $GITHUB_ENV | |
else | |
# Strip out fields that change with every revision or are not part of the input JSON | |
STRIPPED_LATEST_TASK_DEF=$(echo "$LATEST_TASK_DEF" | jq 'del(.taskDefinitionArn, .revision, .status, .requiresAttributes, .registeredAt, .registeredBy)') | |
# Load the current task definition from the file | |
FILE_TASK_DEF=$(jq 'del(.family, .executionRoleArn, .revision, .status)' $ECS_TASK_DEFINITION) | |
# Compare the current task definition with the latest one | |
if [ "$STRIPPED_LATEST_TASK_DEF" = "$FILE_TASK_DEF" ]; then | |
echo "No changes to task definition, skipping registration." | |
echo "SKIP_REGISTRATION=true" >> $GITHUB_ENV | |
else | |
echo "Changes detected in task definition, registering new revision." | |
echo "SKIP_REGISTRATION=false" >> $GITHUB_ENV | |
fi | |
fi | |
- name: Register ECS task definition | |
if: env.SKIP_REGISTRATION != 'true' | |
id: register-task-def | |
run: | | |
# Enable error handling | |
set -e | |
set -o pipefail | |
# Register the task definition with ECS and capture the revision number | |
TASK_DEFINITION_ARN=$(aws ecs register-task-definition --cli-input-json file://$ECS_TASK_DEFINITION --query 'taskDefinition.taskDefinitionArn' --output text) | |
echo "TASK_DEFINITION_ARN=$TASK_DEFINITION_ARN" >> $GITHUB_ENV | |
- name: Deploy to Amazon ECS | |
run: | | |
# Enable error handling | |
set -e | |
set -o pipefail | |
# Use the latest task definition ARN or skip if registration was not necessary | |
if [ -z "${{ env.TASK_DEFINITION_ARN }}" ]; then | |
TASK_DEFINITION_ARN=$(aws ecs describe-services \ | |
--cluster ${{ env.ECS_CLUSTER }} \ | |
--services ${{ env.ECS_SERVICE }} \ | |
--query 'services[0].taskDefinition' --output text) | |
fi | |
# Update the ECS service to use the latest task definition revision | |
aws ecs update-service \ | |
--cluster ${{ env.ECS_CLUSTER }} \ | |
--service ${{ env.ECS_SERVICE }} \ | |
--task-definition $TASK_DEFINITION_ARN \ | |
--force-new-deployment \ | |
--deployment-configuration minimumHealthyPercent=0,maximumPercent=100 | |
# Wait until the service has stabilized | |
aws ecs wait services-stable \ | |
--cluster ${{ env.ECS_CLUSTER }} \ | |
--services ${{ env.ECS_SERVICE }} |