diff --git a/.github/actions/deploy-ecs/action.yaml b/.github/actions/deploy-ecs/action.yaml new file mode 100644 index 000000000..e9e573041 --- /dev/null +++ b/.github/actions/deploy-ecs/action.yaml @@ -0,0 +1,52 @@ +name: 'Deploy to ECS' +description: 'Deploy new image to given ECS service by updating task definition file' +inputs: + aws-role: + required: true + description: "AWS ROLE" + aws-region: + required: true + description: "AWS REGION" + task-definition: + required: true + description: "TASK DEFINITION" + container-name: + required: true + description: "CONTAINER NAME" + ecs-service: + required: true + description: "ECS SERVICE" + ecs-cluster: + required: true + description: "ECS CLUSTER" + image: + required: true + description: "APP IMAGE" +runs: + using: "composite" + steps: + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ inputs.aws-role }} + aws-region: ${{ inputs.aws-region }} + - name: Download task definition + run: | + aws ecs describe-task-definition --task-definition ${{ inputs.task-definition }} \ + --query taskDefinition > task-definition.json + shell: bash + - 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: ${{ inputs.container-name }} + image: ${{ inputs.image }} + + - name: Deploy Amazon ECS task definition + uses: aws-actions/amazon-ecs-deploy-task-definition@v1 + with: + task-definition: ${{ steps.task-def.outputs.task-definition }} + service: ${{ inputs.ecs-service }} + cluster: ${{ inputs.ecs-cluster }} + wait-for-service-stability: true \ No newline at end of file diff --git a/.github/workflows/cd-server.yaml b/.github/workflows/cd-server.yaml index 3f635e8a3..3a75cca38 100644 --- a/.github/workflows/cd-server.yaml +++ b/.github/workflows/cd-server.yaml @@ -16,7 +16,7 @@ on: description: Provide tag (Eg:v3.14.0) env: - SERVICE_NAME: conductor-server + SERVICE_NAME: conductor-server-test AWS_REGION: "ap-south-1" jobs: @@ -30,8 +30,6 @@ jobs: PROJECT_PREFIX: ${{ steps.vars.outputs.PROJECT_PREFIX }} ECS_CLUSTER: ${{ steps.set_env.outputs.ECS_CLUSTER }} ECR_REPOSITORY: ${{ steps.set_env.outputs.ECR_REPOSITORY }} - ECR_REPOSITORY_UI: ${{ steps.set_env.outputs.ECR_REPOSITORY_UI }} - ENVIRONMENT_BUCKET: ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }} SLACK_WEBHOOK_URL: ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }} steps: @@ -63,11 +61,13 @@ jobs: then echo "AWS_ROLE=PRD_AWS_ROLE" >> $GITHUB_OUTPUT echo "PROJECT_PREFIX=sirn-prd-mb" >> $GITHUB_OUTPUT + echo "DEFAULT_CONF=default-prd.conf" >> $GITHUB_OUTPUT echo "SLACK_WEBHOOK_URL=PRD_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT elif [ $ENV == 'dev' ] then echo "AWS_ROLE=DEV_AWS_ROLE" >> $GITHUB_OUTPUT echo "PROJECT_PREFIX=sirn-dev-mb" >> $GITHUB_OUTPUT + echo "DEFAULT_CONF=default-dev.conf" >> $GITHUB_OUTPUT echo "SLACK_WEBHOOK_URL=DEV_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT else echo "Branch not configured!" @@ -80,14 +80,13 @@ jobs: run: | PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }} echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT - echo "ECR_REPOSITORY=$PROJECT_PREFIX-conductor-server" >> $GITHUB_OUTPUT - echo "ECR_REPOSITORY_UI=$PROJECT_PREFIX-conductor-ui" >> $GITHUB_OUTPUT + echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY - - # Building and Pushing Conductor Server Image to ECR - build-push-image: - name: Build and Push Server Image + + # Deploy Conductor Server Image to ECS + deploy-server-image: + name: Deploy Server Image runs-on: 'ubuntu-latest' timeout-minutes: 20 permissions: @@ -101,53 +100,74 @@ jobs: PROJECT_PREFIX: ${{needs.prepare-env.outputs.PROJECT_PREFIX}} ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY}} ENVIRONMENT_BUCKET: ${{needs.prepare-env.outputs.ENVIRONMENT_BUCKET}} + DEFAULT_CONF: ${{needs.prepare-env.outputs.DEFAULT_CONF}} IMAGE_TAG: ${{ github.event.inputs.tag }} outputs: ECR_REPO: ${{ steps.build.outputs.ECR_REPO }} APP_IMAGE: ${{ steps.image.outputs.APP_IMAGE }} steps: - - name: "Checkout repository" - uses: actions/checkout@v4 - - - # Add support for more platforms with QEMU (optional) - # https://github.com/docker/setup-qemu-action - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - + - name: Checkout code from action + uses: actions/checkout@v2 + - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets[env.AWS_ROLE] }} aws-region: ${{ env.AWS_REGION }} - - - name: Download S3 file - run: | - aws s3 cp s3://${PROJECT_PREFIX}-s3-environment/conductor-server/conductor-server.properties ./docker/server/config/conductor-server.properties - + - name: Amazon ECR Login id: login-ecr uses: aws-actions/amazon-ecr-login@v1.7.0 - - name: Build and push to Amazon ECR - id: build - uses: docker/build-push-action@v5.0.0 + - name: Configure env + id: configure_env env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} - with: - context: . - file: ./Dockerfile - push: true - platforms: linux/amd64 - tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} + run: | + echo "TASK_DEFINITION=$PROJECT_PREFIX-td-$SERVICE_NAME" >> $GITHUB_OUTPUT + echo "CONTAINER_NAME=$PROJECT_PREFIX-cntr-$SERVICE_NAME" >> $GITHUB_OUTPUT + echo "APP_IMAGE=${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}" >> $GITHUB_OUTPUT + + - name: Get latest task definition + shell: bash + run: | + aws ecs describe-task-definition --task-definition ${{ steps.configure_env.outputs.TASK_DEFINITION }} \ + --query taskDefinition > task-definition.json - - name: image name - id: image - env: - ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} + - 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: ${{ steps.configure_env.outputs.CONTAINER_NAME }} + image: ${{ steps.configure_env.outputs.APP_IMAGE }} + + - name: Remove unwanted fields from task definition + id: task_def_cleanup + shell: bash run: | - echo "APP_IMAGE=${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}" >> $GITHUB_OUTPUT - + jq 'del(.taskDefinitionArn, .revision, .status, .requiresAttributes, .compatibilities, .registeredAt, .registeredBy)' ${{ steps.task-def.outputs.task-definition }} > updated-task-definition.json + + - name: Register ECS task definition + shell: bash + id: task-def-register + run: | + revision=$(aws ecs register-task-definition \ + --region ${{ env.AWS_REGION }} \ + --family ${{ steps.configure_env.outputs.TASK_DEFINITION }} \ + --cli-input-json file://updated-task-definition.json \ + --query taskDefinition.revision) + echo "revision=$revision" >> $GITHUB_OUTPUT + + - name: Deploy backend + id: deploy_backend + uses: ./.github/actions/deploy-ecs + with: + aws-region : ${{ env.AWS_REGION }} + aws-role: ${{ secrets[env.AWS_ROLE] }} + task-definition: ${{ steps.configure_env.outputs.TASK_DEFINITION }} + container-name: ${{ steps.configure_env.outputs.CONTAINER_NAME }} + ecs-service: ${{ steps.configure_env.outputs.ECS_SERVICE }} + ecs-cluster: ${{ env.ECS_CLUSTER }} + image: ${{ steps.configure_env.outputs.APP_IMAGE }} diff --git a/.github/workflows/cd-ui.yaml b/.github/workflows/cd-ui.yaml index 496cea3cd..d6063f1f6 100644 --- a/.github/workflows/cd-ui.yaml +++ b/.github/workflows/cd-ui.yaml @@ -30,8 +30,6 @@ jobs: PROJECT_PREFIX: ${{ steps.vars.outputs.PROJECT_PREFIX }} ECS_CLUSTER: ${{ steps.set_env.outputs.ECS_CLUSTER }} ECR_REPOSITORY: ${{ steps.set_env.outputs.ECR_REPOSITORY }} - ENVIRONMENT_BUCKET: ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }} - DEFAULT_CONF: ${{ steps.vars.outputs.DEFAULT_CONF }} SLACK_WEBHOOK_URL: ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }} steps: @@ -82,7 +80,7 @@ jobs: run: | PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }} echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT - echo "ECR_REPOSITORY=$PROJECT_PREFIX-conductor-ui" >> $GITHUB_OUTPUT + echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY @@ -100,7 +98,7 @@ jobs: AWS_ROLE: ${{ needs.prepare-env.outputs.AWS_ROLE }} ENV: ${{ needs.prepare-env.outputs.ENV }} PROJECT_PREFIX: ${{needs.prepare-env.outputs.PROJECT_PREFIX}} - ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY_UI}} + ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY}} ENVIRONMENT_BUCKET: ${{needs.prepare-env.outputs.ENVIRONMENT_BUCKET}} DEFAULT_CONF: ${{needs.prepare-env.outputs.DEFAULT_CONF}} IMAGE_TAG: ${{ github.event.inputs.tag }} @@ -109,21 +107,27 @@ jobs: APP_IMAGE: ${{ steps.image.outputs.APP_IMAGE }} steps: - - name: configure env - id: configure_env - run: | - echo "TASK_DEFINITION=$PROJECT_PREFIX-td-$SERVICE_NAME-test" >> $GITHUB_OUTPUT - echo "CONTAINER_NAME=$PROJECT_PREFIX-cntr-$SERVICE_NAME" >> $GITHUB_OUTPUT - echo "APP_IMAGE=${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}" + - name: Checkout code from action + uses: actions/checkout@v2 + - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets[env.AWS_ROLE] }} aws-region: ${{ env.AWS_REGION }} - + - name: Amazon ECR Login id: login-ecr uses: aws-actions/amazon-ecr-login@v1.7.0 + + - name: Configure env + id: configure_env + env: + ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} + run: | + echo "TASK_DEFINITION=$PROJECT_PREFIX-td-$SERVICE_NAME" >> $GITHUB_OUTPUT + echo "CONTAINER_NAME=$PROJECT_PREFIX-cntr-$SERVICE_NAME" >> $GITHUB_OUTPUT + echo "APP_IMAGE=${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}" >> $GITHUB_OUTPUT - name: Get latest task definition shell: bash @@ -137,7 +141,7 @@ jobs: with: task-definition: task-definition.json container-name: ${{ steps.configure_env.outputs.CONTAINER_NAME }} - image: ${{ env.APP_IMAGE }} + image: ${{ steps.configure_env.outputs.APP_IMAGE }} - name: Remove unwanted fields from task definition id: task_def_cleanup @@ -156,7 +160,7 @@ jobs: --query taskDefinition.revision) echo "revision=$revision" >> $GITHUB_OUTPUT - - name: deploy backend + - name: Deploy backend id: deploy_backend uses: ./.github/actions/deploy-ecs with: @@ -166,4 +170,4 @@ jobs: container-name: ${{ steps.configure_env.outputs.CONTAINER_NAME }} ecs-service: ${{ steps.configure_env.outputs.ECS_SERVICE }} ecs-cluster: ${{ env.ECS_CLUSTER }} - image: ${{ env.APP_IMAGE }} + image: ${{ steps.configure_env.outputs.APP_IMAGE }} diff --git a/.github/workflows/ci-server-.yaml b/.github/workflows/ci-server-.yaml index 93dc977db..1356c32b3 100644 --- a/.github/workflows/ci-server-.yaml +++ b/.github/workflows/ci-server-.yaml @@ -16,7 +16,7 @@ on: description: Provide tag (Eg:v3.14.0) env: - SERVICE_NAME: conductor + SERVICE_NAME: conductor-server-test AWS_REGION: "ap-south-1" jobs: @@ -30,7 +30,6 @@ jobs: PROJECT_PREFIX: ${{ steps.vars.outputs.PROJECT_PREFIX }} ECS_CLUSTER: ${{ steps.set_env.outputs.ECS_CLUSTER }} ECR_REPOSITORY: ${{ steps.set_env.outputs.ECR_REPOSITORY }} - ECR_REPOSITORY_UI: ${{ steps.set_env.outputs.ECR_REPOSITORY_UI }} ENVIRONMENT_BUCKET: ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }} SLACK_WEBHOOK_URL: ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }} @@ -80,8 +79,7 @@ jobs: run: | PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }} echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT - echo "ECR_REPOSITORY=$PROJECT_PREFIX-conductor-server" >> $GITHUB_OUTPUT - echo "ECR_REPOSITORY_UI=$PROJECT_PREFIX-conductor-ui" >> $GITHUB_OUTPUT + echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY @@ -144,7 +142,7 @@ jobs: platforms: linux/amd64 tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} - - name: image name + - name: Image name id: image env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} diff --git a/.github/workflows/ci-ui.yaml b/.github/workflows/ci-ui.yaml index f685932d6..f28745051 100644 --- a/.github/workflows/ci-ui.yaml +++ b/.github/workflows/ci-ui.yaml @@ -16,7 +16,7 @@ on: description: Provide tag (Eg:v3.14.0) env: - SERVICE_NAME: conductor + SERVICE_NAME: conductor-ui-test AWS_REGION: "ap-south-1" jobs: @@ -30,7 +30,6 @@ jobs: PROJECT_PREFIX: ${{ steps.vars.outputs.PROJECT_PREFIX }} ECS_CLUSTER: ${{ steps.set_env.outputs.ECS_CLUSTER }} ECR_REPOSITORY: ${{ steps.set_env.outputs.ECR_REPOSITORY }} - ECR_REPOSITORY_UI: ${{ steps.set_env.outputs.ECR_REPOSITORY_UI }} ENVIRONMENT_BUCKET: ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }} DEFAULT_CONF: ${{ steps.vars.outputs.DEFAULT_CONF }} SLACK_WEBHOOK_URL: ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }} @@ -41,6 +40,7 @@ jobs: run: | BRANCH="${GITHUB_REF#refs/heads/}" ENV=${{ github.event.inputs.environment }} + IMAGE_TAG=${{ github.event.inputs.tag }} echo $BRANCH if [ -z "$ENV" ] @@ -78,13 +78,13 @@ jobs: fi echo "ENV=$ENV" >> $GITHUB_OUTPUT echo ":rocket: Environment - $ENV " >> $GITHUB_STEP_SUMMARY + echo ":rocket: Image Tag - $IMAGE_TAG " >> $GITHUB_STEP_SUMMARY - name: set variables id: set_env run: | PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }} echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT - echo "ECR_REPOSITORY=$PROJECT_PREFIX-conductor-server" >> $GITHUB_OUTPUT - echo "ECR_REPOSITORY_UI=$PROJECT_PREFIX-conductor-ui" >> $GITHUB_OUTPUT + echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY @@ -102,7 +102,7 @@ jobs: AWS_ROLE: ${{ needs.prepare-env.outputs.AWS_ROLE }} ENV: ${{ needs.prepare-env.outputs.ENV }} PROJECT_PREFIX: ${{needs.prepare-env.outputs.PROJECT_PREFIX}} - ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY_UI}} + ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY}} ENVIRONMENT_BUCKET: ${{needs.prepare-env.outputs.ENVIRONMENT_BUCKET}} DEFAULT_CONF: ${{needs.prepare-env.outputs.DEFAULT_CONF}} IMAGE_TAG: ${{ github.event.inputs.tag }} @@ -159,7 +159,7 @@ jobs: platforms: linux/amd64 tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} - - name: image name + - name: Image name id: image env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}