diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 5bc0e731c..54db08074 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -1,17 +1,12 @@ -name: Build and deploy Node.js app to ECSsdc +name: Build and Deploy Node.js App to ECS on: push: branches: - pipeline-implementation - # paths: - # - 'apps/FRONTEND-service/**' - # workflow_dispatch: - -env: +env: ECR_IMAGE_TAG: "FRONTEND_V_${{ github.run_number }}" - ECR_REPOSITORY: "dev-services" AWS_REGION: "ap-southeast-1" CLUSTER: "DEV-NGOTAG-CLUSTER" @@ -34,7 +29,7 @@ jobs: uses: aws-actions/configure-aws-credentials@v3 with: role-to-assume: ${{ secrets.IAM_ROLE }} - aws-region: ap-southeast-1 + aws-region: ${{ env.AWS_REGION }} - name: Login to Amazon ECR id: login-ecr @@ -42,50 +37,49 @@ jobs: - name: Create .env file run: | - echo "PUBLIC_BASE_URL=${{ secrets.PUBLIC_BASE_URL }}" > .env - echo "PUBLIC_CRYPTO_PRIVATE_KEY=${{ secrets.PUBLIC_CRYPTO_PRIVATE_KEY }}" >> .env - echo "PUBLIC_PLATFORM_NAME=${{ secrets.PUBLIC_PLATFORM_NAME }}" >> .env - echo "PUBLIC_PLATFORM_LOGO=${{ secrets.PUBLIC_PLATFORM_LOGO }}" >> .env - echo "PUBLIC_POWERED_BY=${{ secrets.PUBLIC_POWERED_BY }}" >> .env - echo "PUBLIC_PLATFORM_WEB_URL=${{ secrets.PUBLIC_PLATFORM_WEB_URL }}" >> .env - echo "PUBLIC_POWERED_BY_URL=${{ secrets.PUBLIC_POWERED_BY_URL }}" >> .env - echo "PUBLIC_PLATFORM_SUPPORT_EMAIL=${{ secrets.PUBLIC_PLATFORM_SUPPORT_EMAIL }}" >> .env - echo "PUBLIC_SHOW_NAME_AS_LOGO=${{ secrets.PUBLIC_SHOW_NAME_AS_LOGO }}" >> .env - echo "PUBLIC_ALLOW_DOMAIN=${{ secrets.PUBLIC_ALLOW_DOMAIN }}" >> .env - + echo "PUBLIC_BASE_URL=${{ secrets.PUBLIC_BASE_URL }}" > .env + echo "PUBLIC_CRYPTO_PRIVATE_KEY=${{ secrets.PUBLIC_CRYPTO_PRIVATE_KEY }}" >> .env + echo "PUBLIC_PLATFORM_NAME=${{ secrets.PUBLIC_PLATFORM_NAME }}" >> .env + echo "PUBLIC_PLATFORM_LOGO=${{ secrets.PUBLIC_PLATFORM_LOGO }}" >> .env + echo "PUBLIC_POWERED_BY=${{ secrets.PUBLIC_POWERED_BY }}" >> .env + echo "PUBLIC_PLATFORM_WEB_URL=${{ secrets.PUBLIC_PLATFORM_WEB_URL }}" >> .env + echo "PUBLIC_POWERED_BY_URL=${{ secrets.PUBLIC_POWERED_BY_URL }}" >> .env + echo "PUBLIC_PLATFORM_SUPPORT_EMAIL=${{ secrets.PUBLIC_PLATFORM_SUPPORT_EMAIL }}" >> .env + echo "PUBLIC_SHOW_NAME_AS_LOGO=${{ secrets.PUBLIC_SHOW_NAME_AS_LOGO }}" >> .env + echo "PUBLIC_ALLOW_DOMAIN=${{ secrets.PUBLIC_ALLOW_DOMAIN }}" >> .env - name: Build, tag, and push image to Amazon ECR env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} - ECR_REPOSITORY: dev-services - IMAGE_TAG: "FRONTEND_V_${{ github.run_number }}" + ECR_REPOSITORY: ${{ env.ECR_REPOSITORY }} + IMAGE_TAG: ${{ env.ECR_IMAGE_TAG }} run: | - docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG . + docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG . docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG docker image list - + - name: Set environment variables run: | echo "ECR_REGISTRY=${{ steps.login-ecr.outputs.registry }}" >> $GITHUB_ENV - echo "ECR_REPOSITORY=dev-services" >> $GITHUB_ENV - echo "IMAGE_TAG=FRONTEND_V_${{ github.run_number }}" >> $GITHUB_ENV - + echo "ECR_REPOSITORY=${{ env.ECR_REPOSITORY }}" >> $GITHUB_ENV + echo "IMAGE_TAG=${{ env.ECR_IMAGE_TAG }}" >> $GITHUB_ENV + - name: Print environment variables run: | echo "ECR_REGISTRY: $ECR_REGISTRY" echo "ECR_REPOSITORY: $ECR_REPOSITORY" echo "IMAGE_TAG: $IMAGE_TAG" - + - name: Retrieve Repository URI run: | REPOSITORY_URI=$(aws ecr describe-repositories --repository-names ${{ env.ECR_REPOSITORY }} --region ${{ env.AWS_REGION }} | jq -r '.repositories[].repositoryUri') echo "REPOSITORY_URI=${REPOSITORY_URI}" >> $GITHUB_ENV - + - name: Replace executionRoleArn in task definition run: | sed -i "s#\"executionRoleArn\": \"arn:aws:iam::.*:role/ecsTaskExecutionRole\"#\"executionRoleArn\": \"arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/ecsTaskExecutionRole\"#" taskdef/frontend-taskdef.json - - name: Update Task Definition and service + - name: Update Task Definition and Service run: | FAMILY=$(sed -n 's/.*"family": "\(.*\)",/\1/p' taskdef/frontend-taskdef.json) NAME=$(sed -n 's/.*"name": "\(.*\)",/\1/p' taskdef/frontend-taskdef.json) @@ -94,29 +88,33 @@ jobs: # Replace placeholders in the JSON file sed -e "s;%BUILD_NUMBER%;${{ github.run_number }};g" -e "s;%REPOSITORY_URI%;${REPOSITORY_URI};g" taskdef/frontend-taskdef.json > ${GITHUB_WORKSPACE}/${NAME}-v_${{ github.run_number }}.json - + # Debug: Print the content of the modified JSON file cat ${GITHUB_WORKSPACE}/${NAME}-v_${{ github.run_number }}.json # Register the task definition using the modified JSON file aws ecs register-task-definition --family ${FAMILY} --cli-input-json file://${GITHUB_WORKSPACE}/${NAME}-v_${{ github.run_number }}.json --region ${{ env.AWS_REGION }} - - SERVICE_INFO=$(aws ecs describe-services --services ${SERVICE_NAME} --cluster ${CLUSTER} --region ap-southeast-1) + + SERVICE_INFO=$(aws ecs describe-services --services ${SERVICE_NAME} --cluster ${{ env.CLUSTER }} --region ${{ env.AWS_REGION }}) # Check if the service exists - if [ -z "$SERVICE_INFO" ]; then + if [ "$(echo "$SERVICE_INFO" | jq -r '.services | length')" -eq 0 ]; then echo "Service does not exist, creating new service..." # Your logic to create a new service goes here else - echo "Entered existing service" + echo "Entered existing service" # Extract desired count from the stored service info - DESIRED_COUNT=$(echo "$SERVICE_INFO" | jq -r '.services[].desiredCount') - echo "DESIRED_COUNT: $DESIRED_COUNT" + DESIRED_COUNT=$(echo "$SERVICE_INFO" | jq -r '.services[].desiredCount') + echo "DESIRED_COUNT: $DESIRED_COUNT" - if [ "$DESIRED_COUNT" = "0" ]; then - DESIRED_COUNT="1" + if [ "$DESIRED_COUNT" = "0" ]; then + DESIRED_COUNT="1" fi + + # Get the latest task definition revision + REVISION=$(aws ecs describe-task-definition --task-definition ${FAMILY} --region ${{ env.AWS_REGION }} | jq -r '.taskDefinition.revision') + echo "REVISION: $REVISION" + # Update the existing service - REVISION=$(aws ecs describe-task-definition --task-definition ${FAMILY} --region ap-southeast-1 | jq -r '.taskDefinition.revision') - aws ecs update-service --cluster ${CLUSTER} --region ap-southeast-1 --service ${SERVICE_NAME} --task-definition ${FAMILY}:${REVISION} --desired-count ${DESIRED_COUNT} - fi + aws ecs update-service --cluster ${{ env.CLUSTER }} --region ${{ env.AWS_REGION }} --service ${SERVICE_NAME} --task-definition ${FAMILY}:${REVISION} --desired-count ${DESIRED_COUNT} + fi