Skip to content

Try to avoid more session breaks #51

Try to avoid more session breaks

Try to avoid more session breaks #51

Workflow file for this run

name: Redeploy to AWS ECS Fargate
on:
push:
branches: [ illinois-chat ]
paths:
- 'ai_ta_backend/**'
- 'requirements.txt'
- 'Self-Hosted-Dockerfile'
- 'Dockerfile.ecs'
- '.github/workflows/deploy-to-ecs.yml'
workflow_dispatch: # Allows manual triggering
# Environment variables. Edit to match the setup for this service.
env:
AWS_REGION: us-east-2
ECS_CLUSTER: uiuc-chat-dev
ECR_REPOSITORY: uiuc-chat-backend
ECS_SERVICE: backend-service-358yl957
ECS_TASK_DEFINITION: backend
CONTAINER_NAME: backend
ECR_REPOSITORY_WORKER: uiuc-chat-worker
ECS_SERVICE_WORKER: ingest-worker-service-00snks4u
ECS_TASK_DEFINITION_WORKER: ingest-worker
CONTAINER_NAME_WORKER: worker
jobs:
deploy-backend:
name: Deploy Backend Service
runs-on: ubuntu-latest
steps:
- name: Checkout 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: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Set image tag (adaptive short commit hash + branch)
id: set-tag
run: |
SHORT_SHA=$(git rev-parse --short HEAD)
BRANCH_TAG=$(echo "${GITHUB_REF##*/}" | tr '/' '-')
IMAGE_TAG="${BRANCH_TAG}-${SHORT_SHA}"
echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV
echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT
echo "branch_tag=${BRANCH_TAG}" >> $GITHUB_OUTPUT
echo "image_tag=${IMAGE_TAG}" >> $GITHUB_OUTPUT
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
run: |
set -euo pipefail
echo "Building image with tag: $IMAGE_TAG"
BRANCH_TAG=${{ steps.set-tag.outputs.branch_tag }}
docker build -f Self-Hosted-Dockerfile -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
# Also tag with branch only (optional, for easy rollback by branch)
docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:${BRANCH_TAG}
docker push $ECR_REGISTRY/$ECR_REPOSITORY:${BRANCH_TAG}
# Maintain latest tag
docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:latest
docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT
- name: Download current task definition
run: |
aws ecs describe-task-definition \
--task-definition ${{ env.ECS_TASK_DEFINITION }} \
--query taskDefinition > task-definition-raw.json
# Remove unsupported fields that cause compatibility issues
cat task-definition-raw.json | jq 'del(.registeredAt, .registeredBy, .taskDefinitionArn, .revision, .status, .requiresAttributes, .placementConstraints, .compatibilities, .enableFaultInjection)' > task-definition.json
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v2
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ env.ECS_SERVICE }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true
deploy-ingest-worker:
name: Deploy Ingest Worker Service
runs-on: ubuntu-latest
steps:
- name: Checkout 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: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr-worker
uses: aws-actions/amazon-ecr-login@v2
- name: Set worker image tag (adaptive short commit hash + branch)
id: set-worker-tag
run: |
SHORT_SHA=$(git rev-parse --short HEAD)
BRANCH_TAG=$(echo "${GITHUB_REF##*/}" | tr '/' '-')
WORKER_IMAGE_TAG="${BRANCH_TAG}-${SHORT_SHA}"
echo "WORKER_IMAGE_TAG=${WORKER_IMAGE_TAG}" >> $GITHUB_ENV
echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT
echo "branch_tag=${BRANCH_TAG}" >> $GITHUB_OUTPUT
echo "image_tag=${WORKER_IMAGE_TAG}" >> $GITHUB_OUTPUT
- name: Build, tag, and push worker image to Amazon ECR
id: build-worker-image
env:
ECR_REGISTRY: ${{ steps.login-ecr-worker.outputs.registry }}
run: |
set -euo pipefail
echo "Building worker image with tag: $WORKER_IMAGE_TAG"
BRANCH_TAG=${{ steps.set-worker-tag.outputs.branch_tag }}
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY_WORKER:$WORKER_IMAGE_TAG ai_ta_backend/rabbitmq/
docker push $ECR_REGISTRY/$ECR_REPOSITORY_WORKER:$WORKER_IMAGE_TAG
# Also tag with branch only (optional, for easy rollback by branch)
docker tag $ECR_REGISTRY/$ECR_REPOSITORY_WORKER:$WORKER_IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY_WORKER:${BRANCH_TAG}
docker push $ECR_REGISTRY/$ECR_REPOSITORY_WORKER:${BRANCH_TAG}
# Maintain latest tag
docker tag $ECR_REGISTRY/$ECR_REPOSITORY_WORKER:$WORKER_IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY_WORKER:latest
docker push $ECR_REGISTRY/$ECR_REPOSITORY_WORKER:latest
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY_WORKER:$WORKER_IMAGE_TAG" >> $GITHUB_OUTPUT
- name: Download current worker task definition
run: |
aws ecs describe-task-definition \
--task-definition ${{ env.ECS_TASK_DEFINITION_WORKER }} \
--query taskDefinition > worker-task-definition-raw.json
# Remove unsupported fields that cause compatibility issues
cat worker-task-definition-raw.json | jq 'del(.registeredAt, .registeredBy, .taskDefinitionArn, .revision, .status, .requiresAttributes, .placementConstraints, .compatibilities, .enableFaultInjection)' > worker-task-definition.json
- name: Fill in the new image ID in the worker task definition
id: task-def-worker
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: worker-task-definition.json
container-name: ${{ env.CONTAINER_NAME_WORKER }}
image: ${{ steps.build-worker-image.outputs.image }}
- name: Deploy worker ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v2
with:
task-definition: ${{ steps.task-def-worker.outputs.task-definition }}
service: ${{ env.ECS_SERVICE_WORKER }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true