From ad03d663bbd8387527556eff74013d55e789b170 Mon Sep 17 00:00:00 2001 From: Rafael Date: Mon, 9 Dec 2024 14:00:56 -0300 Subject: [PATCH] CI: updating CI to use beta branch --- .github/workflows/deploy-manually.yml | 169 ++++++++++++-------------- build.docker-compose.yml | 2 +- 2 files changed, 82 insertions(+), 89 deletions(-) diff --git a/.github/workflows/deploy-manually.yml b/.github/workflows/deploy-manually.yml index b761d43..87e306e 100644 --- a/.github/workflows/deploy-manually.yml +++ b/.github/workflows/deploy-manually.yml @@ -3,6 +3,7 @@ on: push: branches: - main + - beta workflow_dispatch: inputs: environment: @@ -11,7 +12,6 @@ on: type: choice options: - stg - - stg2 - prd push_to_dockerhub: description: "Push image to Dockerhub?" @@ -34,6 +34,8 @@ jobs: echo "environment=${DEPLOY_ENV}" >> $GITHUB_OUTPUT elif [ ${GITHUB_REF} == "refs/heads/main" ]; then echo "environment=prd" >> $GITHUB_OUTPUT + elif [ ${GITHUB_REF} == "refs/heads/beta" ]; then + echo "environment=stg" >> $GITHUB_OUTPUT fi id: extract_environment @@ -48,38 +50,40 @@ jobs: - if: github.event_name != 'workflow_dispatch' name: Semantic Release - uses: cycjimmy/semantic-release-action@v4 + uses: cycjimmy/semantic-release-action@v3 id: semantic with: extra_plugins: | - conventional-changelog-eslint@4 + conventional-changelog-eslint@4.0.0 branches: | [ - 'main' + 'main', + { + name: 'alpha', + prerelease: true + }, + { + name: 'beta', + prerelease: true + } ] env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - deploy-info: - if: ${{ github.event_name == 'workflow_dispatch'}} + build_ecr_image: + if: ${{ github.event_name == 'workflow_dispatch' || needs.semantic_release.outputs.new_release_published == 'true' }} needs: [extract_environment, semantic_release] - runs-on: ubuntu-latest + runs-on: + [self-hosted, "prd"] steps: - - name: Create summary + - name: Printing stats env: EVENT: ${{ github.event_name }} IMAGE_TAG: ${{ needs.semantic_release.outputs.new_release_version }} ENV: ${{ needs.extract_environment.outputs.environment }} - run: echo "### Deploy da branch \`$GITHUB_REF_NAME\` no ambiente **$ENV** :rocket:" >> $GITHUB_STEP_SUMMARY + run: echo ${GITHUB_REF#refs/heads/} - deploy: - if: ${{ github.event_name == 'workflow_dispatch' || needs.semantic_release.outputs.new_release_published == 'true' }} - needs: [extract_environment, semantic_release] - runs-on: - [self-hosted, "${{ needs.extract_environment.outputs.environment }}"] - - steps: - name: Checkout uses: actions/checkout@v4 @@ -131,18 +135,18 @@ jobs: docker compose -f build.docker-compose.dockerhub.yml build docker compose -f build.docker-compose.dockerhub.yml push - - name: Create ZIP file to Deploy AWS Beanstalk - env: - ENV: ${{ needs.extract_environment.outputs.environment }} - IMAGE_TAG: ${{ needs.semantic_release.outputs.new_release_version }} - ACCOUNT_ID: ${{ steps.aws.outputs.aws-account-id }} - NODE_EXPORTER_URL: ${{format('{0}.dkr.ecr.us-east-1.amazonaws.com\/monitoring\/node_exporter:latest', steps.aws.outputs.aws-account-id)}} # ${{needs.extract_environment.outputs.environment == 'prd' && '611330257153.dkr.ecr.us-east-1.amazonaws.com\/monitoring\/node_exporter:latest' || '468720548566.dkr.ecr.us-east-1.amazonaws.com\/monitoring\/node_exporter:latest'}} - run: | - sed -i -e "s/\${ENV}/$ENV/g" docker-compose.yml - sed -i -e "s/\${IMAGE_TAG}/$IMAGE_TAG/g" docker-compose.yml - sed -i -e "s/\${ACCOUNT_ID}/$ACCOUNT_ID/g" docker-compose.yml - sed -i -e "s/\${NODE_EXPORTER_URL}/$NODE_EXPORTER_URL/g" docker-compose.yml - zip deploy.zip docker-compose.yml -r .ebextensions + # - name: Create ZIP file to Deploy AWS Beanstalk + # env: + # ENV: ${{ needs.extract_environment.outputs.environment }} + # IMAGE_TAG: ${{ needs.semantic_release.outputs.new_release_version }} + # ACCOUNT_ID: ${{ steps.aws.outputs.aws-account-id }} + # NODE_EXPORTER_URL: ${{needs.extract_environment.outputs.environment == 'prd' && '611330257153.dkr.ecr.us-east-1.amazonaws.com\/monitoring\/node_exporter:latest' || '468720548566.dkr.ecr.us-east-1.amazonaws.com\/monitoring\/node_exporter:latest'}} + # run: | + # sed -i -e "s/\${ENV}/$ENV/g" docker-compose.yml + # sed -i -e "s/\${IMAGE_TAG}/$IMAGE_TAG/g" docker-compose.yml + # sed -i -e "s/\${ACCOUNT_ID}/$ACCOUNT_ID/g" docker-compose.yml + # sed -i -e "s/\${NODE_EXPORTER_URL}/$NODE_EXPORTER_URL/g" docker-compose.yml + # zip deploy.zip docker-compose.yml -r .ebextensions # - name: Deploy AWS Beanstalk # env: @@ -159,66 +163,55 @@ jobs: run: | docker system prune --volumes -a -f docker system df - api_docs: - needs: [extract_environment, semantic_release, deploy] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Extract Docs BlockId and PageId + helmfile-deploy: + needs: [extract_environment, semantic_release, build_ecr_image] + runs-on: [self-hosted, "prd-azure"] + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Helm + uses: azure/setup-helm@v1 + with: + version: 'v3.9.0' + + - name: Install Azure ClI + run: | + curl -sL https://aka.ms/InstallAzureCLIDeb | bash + + - uses: azure/login@v2 + with: + creds: '{"clientId":"${{ secrets.ARM_CLIENT_ID }}","clientSecret":"${{ secrets.ARM_CLIENT_SECRET }}","subscriptionId":"${{ secrets.ARM_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.ARM_TENANT_ID }}"}' + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.8' + + - name: Install Helmfile + run: | + wget https://github.com/helmfile/helmfile/releases/download/v0.148.0/helmfile_0.148.0_linux_amd64.tar.gz + tar -xzf helmfile_0.148.0_linux_amd64.tar.gz + mv helmfile /usr/local/bin/ + helmfile --version + + - name: Install Helm Diff Plugin + run: helm plugin install https://github.com/databus23/helm-diff || true + + - name: Setup kubectl + uses: azure/setup-kubectl@v1 + with: + version: 'v1.30.1' + + - name: Authenticate with cluster + env: + CLUSTER_NAME: platform-${{ needs.extract_environment.outputs.environment }} + run: az aks get-credentials --resource-group dadosfera-prd --name ${CLUSTER_NAME} --overwrite-existing + + - name: Run Helmfile Apply env: ENV: ${{ needs.extract_environment.outputs.environment }} - STG2_DOCS_BLOCK_ID: ${{ secrets.DEV_DOCS_BLOCK_ID }} - STG2_DOCS_PAGE_ID: ${{ secrets.DEV_DOCS_PAGE_ID }} - STG_DOCS_BLOCK_ID: ${{ secrets.STG_DOCS_BLOCK_ID }} - STG_DOCS_PAGE_ID: ${{ secrets.STG_DOCS_PAGE_ID }} - PRD_DOCS_BLOCK_ID: ${{ secrets.PRD_DOCS_BLOCK_ID }} - PRD_DOCS_PAGE_ID: ${{ secrets.PRD_DOCS_PAGE_ID }} - shell: bash - run: | - if [ $ENV == "stg2" ]; then - echo "block_id=$STG2_DOCS_BLOCK_ID" >> $GITHUB_OUTPUT - echo "page_id=$STG2_DOCS_PAGE_ID" >> $GITHUB_OUTPUT - elif [ $ENV == "stg" ]; then - echo "block_id=$STG_DOCS_BLOCK_ID" >> $GITHUB_OUTPUT - echo "page_id=$STG_DOCS_PAGE_ID" >> $GITHUB_OUTPUT - elif [ $ENV == "prd" ]; then - echo "block_id=$PRD_DOCS_BLOCK_ID" >> $GITHUB_OUTPUT - echo "page_id=$PRD_DOCS_PAGE_ID" >> $GITHUB_OUTPUT - fi - id: extract_docs_info - - - name: Generate API docs - env: - DOCS_URL: ${{ secrets.DOCS_URL }} - DOCS_API_TOKEN: ${{ secrets.DOCS_API_TOKEN }} - DOCS_PAGE_ID: ${{ steps.extract_docs_info.outputs.page_id }} - DOCS_BLOCK_ID: ${{ steps.extract_docs_info.outputs.block_id }} - EVENT: ${{ github.event_name }} - RELEASE_VERSION: ${{ needs.semantic_release.outputs.new_release_version }} - run: | - if [ ${EVENT} != "workflow_dispatch" ]; then - sed -i -E "s/(\"title\": )\"Maestro.+\"/\1\"Maestro - $RELEASE_VERSION\"/g" docsfera.json - fi - sed -i -e "s/\${DOCS_API_TOKEN}/$DOCS_API_TOKEN/g" docsfera.json - sed -i -e "s/\${DOCS_PAGE_ID}/$DOCS_PAGE_ID/g" docsfera.json - sed -i -e "s/\${DOCS_BLOCK_ID}/$DOCS_BLOCK_ID/g" docsfera.json - curl -X POST -H 'Content-Type: application/json' -d @docsfera.json $DOCS_URL - - - name: Generate External API docs - env: - DOCS_URL: ${{ secrets.DOCS_URL }} - DOCS_API_TOKEN: ${{ secrets.DOCS_API_TOKEN }} - DOCS_PAGE_ID: ${{secrets.EXTERNAL_DOCS_PAGE_ID}} - DOCS_BLOCK_ID: ${{secrets.EXTERNAL_DOCS_BLOCK_ID}} - EVENT: ${{ github.event_name }} - RELEASE_VERSION: ${{ needs.semantic_release.outputs.new_release_version }} - run: | - if [ ${EVENT} != "workflow_dispatch" ]; then - sed -i -E "s/(\"title\": )\"Maestro.+\"/\1\"Maestro - $RELEASE_VERSION\"/g" docsfera.external.json - fi - sed -i -e "s/\${DOCS_API_TOKEN}/$DOCS_API_TOKEN/g" docsfera.external.json - sed -i -e "s/\${DOCS_PAGE_ID}/$DOCS_PAGE_ID/g" docsfera.external.json - sed -i -e "s/\${DOCS_BLOCK_ID}/$DOCS_BLOCK_ID/g" docsfera.external.json - curl -X POST -H 'Content-Type: application/json' -d @docsfera.external.json $DOCS_URL + IMAGE_TAG: ${{ needs.semantic_release.outputs.new_release_version }} + run: helmfile -f helmfiles/${ENV}.yaml sync --set image.tag=$IMAGE_TAG diff --git a/build.docker-compose.yml b/build.docker-compose.yml index 7dddc0e..154e7ec 100644 --- a/build.docker-compose.yml +++ b/build.docker-compose.yml @@ -1,4 +1,4 @@ services: maestro: build: . - image: ${ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/microservices/maestro_${ENV}:${IMAGE_TAG} + image: ${ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/microservices/maestro_prd:${IMAGE_TAG}