Skip to content

Commit

Permalink
improve api deploy (#1076)
Browse files Browse the repository at this point in the history
* check for sha tag in cd.yml

* switch to docker action

* switch from ecs-deploy to aws cli
  • Loading branch information
dehli authored May 27, 2024
1 parent 3d58eff commit 1d5a4a1
Showing 1 changed file with 44 additions and 12 deletions.
56 changes: 44 additions & 12 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,24 +37,56 @@ jobs:
echo "SERVICE_NAME=${{ vars.AWS_ECS_API_SERVICE_STAGING }}" >> $GITHUB_ENV
fi
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Check for existing image with GIT_SHA
env:
GIT_SHA: ${{ github.sha }}
REPO: ${{ vars.AWS_ECR_API_REPO }}
run: |
image_manifest=$(aws ecr batch-get-image --repository-name $REPO --image-ids imageTag=$GIT_SHA --query 'images[0].imageManifest')
echo "IMAGE_MANIFEST=$image_manifest" >> $GITHUB_ENV
- if: env.IMAGE_MANIFEST == 'null'
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- if: env.IMAGE_MANIFEST == 'null'
name: Build, tag, and push docker image to Amazon ECR
uses: docker/build-push-action@v5
with:
platforms: arm64
cache-from: type=gha
cache-to: type=gha
context: .
file: ./packages/daimo-api/Dockerfile
platforms: linux/arm64
push: true
tags: |
${{ steps.login-ecr.outputs.registry }}/${{ vars.AWS_ECR_API_REPO }}:${{ github.sha }}
${{ steps.login-ecr.outputs.registry }}/${{ vars.AWS_ECR_API_REPO }}:${{ env.IMAGE_TAG }}
- name: Build, tag, and push docker image to Amazon ECR
- if: env.IMAGE_MANIFEST != 'null'
name: Add tag to existing image.
env:
GIT_SHA: ${{ github.sha }}
IMAGE_NAME: ${{ steps.login-ecr.outputs.registry }}/${{ vars.AWS_ECR_API_REPO }}
REPO: ${{ vars.AWS_ECR_API_REPO }}
run: |
docker build --platform linux/arm64 -t $IMAGE_NAME:$GIT_SHA -t $IMAGE_NAME:$IMAGE_TAG -f packages/daimo-api/Dockerfile .
docker push $IMAGE_NAME:$GIT_SHA
docker push $IMAGE_NAME:$IMAGE_TAG
echo "Image exists with GIT_SHA tag, adding tag \"$IMAGE_TAG\" to it."
IMAGE_MANIFEST=$(echo $IMAGE_MANIFEST | jq -c -r)
set +e
output=$(aws ecr put-image --repository-name $REPO --image-tag $IMAGE_TAG --image-manifest "$IMAGE_MANIFEST" 2>&1)
status=$?
set -e
if [[ $status -ne 0 ]]; then
if [[ ! "$output" =~ "ImageAlreadyExistsException" ]]; then
echo $output
exit $status
else
echo "Image already tagged with \"$IMAGE_TAG.\""
fi
fi
- name: Deploy to ECS
run: |
pip install ecs-deploy
ecs deploy $CLUSTER_NAME $SERVICE_NAME --timeout 900
run: aws ecs update-service --cluster $CLUSTER_NAME --service $SERVICE_NAME --force-new-deployment > /dev/null

eas-deploy:
if: github.ref == 'refs/heads/master'
Expand Down

0 comments on commit 1d5a4a1

Please sign in to comment.