diff --git a/.github/workflows/deploy_aws_staging.yml b/.github/workflows/deploy_aws_staging.yml new file mode 100644 index 0000000..f6d3ab5 --- /dev/null +++ b/.github/workflows/deploy_aws_staging.yml @@ -0,0 +1,62 @@ +# This workflow will build and push a new container image to Amazon ECR, +# and then will deploy a new task definition to Amazon ECS which will be run by Fargate when a release is created +name: Deploy to Staging Amazon ECS + +on: + push: + branches: + - staging + - vlad/ora-190-ensure-all-repos-are-deployable-on-aws-cloud-with-a-merge + workflow_dispatch: + +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true +jobs: + deploy-staging: + name: Deploy to staging + runs-on: ubuntu-latest + environment: staging + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: us-east-1 + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + + - name: Build, tag, and push image to Amazon ECR + id: compute-node-build-image + env: + ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} + ECR_REPOSITORY: upshot-compute-node-staging + IMAGE_TAG: ${{ github.sha }} + run: | + # Build a docker container and push it to ECR so that it can be deployed to ECS. + docker build -f docker/Dockerfile --build-arg ghcr_token=${{ secrets.PUBLISH_PAT }} -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG . + docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG + echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> "$GITHUB_OUTPUT" + + - name: Fill in the new image ID in the Amazon ECS task definition + id: compute-node-task-def + uses: aws-actions/amazon-ecs-render-task-definition@v1 + with: + task-definition: infra/staging-task-def.json + container-name: upshot-compute-node + image: ${{ steps.compute-node-build-image.outputs.image }} + + - name: upshot-compute-node - Deploy Amazon ECS task definition + uses: aws-actions/amazon-ecs-deploy-task-definition@v1 + with: + task-definition: ${{ steps.compute-node-task-def.outputs.task-definition }} + service: upshot-compute-node-staging + cluster: upshot-backend-staging + # wait-for-service-stability: true diff --git a/infra/staging-task-def.json b/infra/staging-task-def.json new file mode 100644 index 0000000..d592627 --- /dev/null +++ b/infra/staging-task-def.json @@ -0,0 +1,31 @@ +{ + "executionRoleArn": "arn:aws:iam::696230526504:role/ecsTaskExecutionRole", + "containerDefinitions": [ + { + "image": "696230526504.dkr.ecr.us-east-1.amazonaws.com/upshot-compute-node-staging", + "essential": true, + "name": "upshot-compute-node", + "portMappings": [ + { + "hostPort": 8080, + "protocol": "tcp", + "containerPort": 8080 + }, + { + "hostPort": 9527, + "protocol": "tcp", + "containerPort": 9527 + } + ], + "mountPoints": [] + } + ], + "taskRoleArn": "arn:aws:iam::696230526504:role/ECS_TASK_ROLE", + "family": "upshot-appchain-staging", + "requiresCompatibilities": [ + "FARGATE" + ], + "networkMode": "awsvpc", + "cpu": "512", + "memory": "1024" +}