Skip to content

fix deployment

fix deployment #46

name: Deploy Backend to Elastic Beanstalk
on:
push:
branches:
- main
paths:
- 'packages/server/**/*'
- '.ebextensions/**/*'
- '.platform/**/*'
- '.elasticbeanstalk/**/*'
- 'Dockerrun.aws.json'
- 'Dockerfile.server'
- '.platform/**/*'
- '.github/workflows/deploy-backend.yml'
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
deployments: write
steps:
- 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: ${{ vars.AWS_REGION }}
- name: Login to Amazon ECR
uses: aws-actions/amazon-ecr-login@v2
- name: Set ECR image URIs
id: set-image-uris
run: |
ECR_REGISTRY="${{ vars.AWS_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com"
ECR_REPOSITORY="${{ vars.ECR_REPOSITORY }}"
IMAGE_TAG_LATEST="$ECR_REGISTRY/$ECR_REPOSITORY:latest"
echo "image_uri_latest=$IMAGE_TAG_LATEST" >> $GITHUB_OUTPUT
echo "ecr_repository=$ECR_REPOSITORY" >> $GITHUB_OUTPUT
- name: Create ECR Repository (if it doesn't exist)
run: |
aws ecr describe-repositories \
--repository-names ${{ steps.set-image-uris.outputs.ecr_repository }} \
--region ${{ vars.AWS_REGION }} \
|| aws ecr create-repository \
--repository-name ${{ steps.set-image-uris.outputs.ecr_repository }} \
--region ${{ vars.AWS_REGION }}
- name: Build and push Docker image
id: build-image-and-push-to-ecr
run: |
docker buildx build \
--platform linux/arm64 \
--tag ${{ steps.set-image-uris.outputs.image_uri_latest }} \
--file Dockerfile.server \
--provenance=false \
--output=type=registry,oci-mediatypes=false \
.
- name: Set beanstalk variables
id: set-beanstalk-variables
run: |
VARIABLE="elasticbeanstalk-${{ vars.AWS_REGION }}-${{ vars.AWS_ACCOUNT_ID }}"
echo "image_uri_latest=$VARIABLE" >> $GITHUB_OUTPUT
- name: Generate Deployment Package
run: zip -r deploy.zip Dockerrun.aws.json .ebextensions .platform
- name: Deploy to Elastic Beanstalk
uses: einaregilsson/beanstalk-deploy@v21
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: ${{ vars.EB_APP_NAME }}
environment_name: ${{ vars.EB_ENVIRONMENT_NAME }}
region: ${{ vars.AWS_REGION }}
version_label: "deploy-${{ github.sha }}-${{ github.run_id }}"
deployment_package: deploy.zip
use_existing_version_if_available: true
- name: Wait for deployment to finish
run: |
aws elasticbeanstalk wait environment-updated \
--environment-name ${{ vars.EB_ENVIRONMENT_NAME }} \
--region ${{ vars.AWS_REGION }}
- name: Health check
run: |
curl --fail ${{ vars.HEALTHCHECK_URL }} || (echo "Deployment health check failed" && exit 1)
push-sentry-sourcemap:
runs-on: ubuntu-latest
needs: deploy
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
- name: Build minimal backend
id: build-backend
run: |
yarn workspaces focus --production @cvai/server
cd ./packages/server
yarn install --frozen-lockfile
yarn build
- name: Create Sentry release
uses: getsentry/action-release@v3
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
SENTRY_PROJECT: ${{ vars.SENTRY_PROJECT }}
with:
environment: production
sourcemaps: "./packages/server/dist"