From 1fcea350abf1b65e7d6e9cc8dda612cf4f23a6e4 Mon Sep 17 00:00:00 2001 From: sergey filyanin Date: Tue, 28 Jan 2025 11:22:51 +0100 Subject: [PATCH] Update CI-CD-Distributed-Computation-fe.yml --- .../CI-CD-Distributed-Computation-fe.yml | 99 ++++++++++++++----- 1 file changed, 77 insertions(+), 22 deletions(-) diff --git a/.github/workflows/CI-CD-Distributed-Computation-fe.yml b/.github/workflows/CI-CD-Distributed-Computation-fe.yml index 8d8d80b..577b2e7 100644 --- a/.github/workflows/CI-CD-Distributed-Computation-fe.yml +++ b/.github/workflows/CI-CD-Distributed-Computation-fe.yml @@ -1,66 +1,121 @@ -name: Deploy Frontend Distributed Computation +name: Build and Deploy mandelbrot-set/frontend on: - push: - branches: ['master'] - paths: frontend workflow_dispatch: + push: + branches: ["*"] + paths: + - "mandelbrot-set/frontend/**" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} + ENVIRONMENT: ${{ (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main') && 'prod' || 'stg' }} + REGISTRY: ghcr.io/$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]') AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: ${{ secrets.AWS_REGION }} + KUBECTL_VERSION: ${{ secrets.KUBECTL_VERSION }} KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }} + KUBE_NAMESPACE: gear-exe-dapps + KUBE_DEPLOY_PREFIX: mandelbrot-set-frontend + KUBE_DEPLOY_TYPE: deployment # (statefulset or deployment) jobs: - build-frontend-image: + prepair: + runs-on: ubuntu-latest + outputs: + image_name: ${{ steps.image.outputs.image_name }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Get branch + id: branch + run: | + branch_name=${GITHUB_REF#refs/heads/} + echo "branch_name=$branch_name" >> $GITHUB_ENV + + - name: Get short SHA + id: sha + run: | + sha_short=$(git rev-parse --short HEAD) + echo "sha_short=$sha_short" >> $GITHUB_ENV + + - name: Set IMAGE_NAME + id: image + run: | + image_name=${{ env.REGISTRY }}-${{ env.KUBE_DEPLOY_PREFIX }}:${{ env.branch_name }}-${{ env.sha_short }} + echo "image_name=$image_name" >> $GITHUB_OUTPUT + + build-and-push-image: + needs: [prepair] runs-on: ubuntu-latest + environment: ${{ (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main') && 'prod' || 'stg' }} permissions: contents: read packages: write - steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Log in to the github container registry - uses: docker/login-action@master + uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push Frontend Docker image - uses: docker/build-push-action@master + - name: Build and push image + uses: docker/build-push-action@v6 with: - context: mandelbrot-set/frontend + context: mandelbrot-set/frontend/ push: true - tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-mandelbrot-set-fe:prod build-args: | VITE_WALLET_CONNECT_PROJECT_ID=${{ secrets.VITE_WALLET_CONNECT_PROJECT_ID_MONDELBROT }} VITE_GEAR_API_NODE=${{ secrets.VITE_GEAR_API_NODE }} VITE_CONTRACT_ADDRESS=${{ secrets.VITE_CONTRACT_ADDRESS_MONDELBROT }} VITE_ETH_NODE_ADDRESS=${{ secrets.VITE_ETH_NODE_ADDRESS }} + tags: ${{ needs.prepair.outputs.image_name }} - deploy-k8s: - needs: build-frontend-image + deploy-to-k8s: + needs: [prepair, build-and-push-image] runs-on: ubuntu-latest - + environment: ${{ (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main') && 'prod' || 'stg' }} steps: + - name: Setup kubectl + run: | + curl -LO "https://dl.k8s.io/release/${{ env.KUBECTL_VERSION }}/bin/linux/amd64/kubectl" + chmod +x kubectl + sudo mv kubectl /usr/local/bin/ + mkdir -p $HOME/.kube/ + echo "${{ env.KUBE_CONFIG_DATA }}" | base64 -d > $HOME/.kube/config + - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ env.AWS_REGION }} - - name: Deploy to k8s - uses: sergeyfilyanin/kubectl-aws-eks@master - with: - args: rollout restart deployment distributed-computation -n gear-dapps + - name: Get containes + id: containers + run: | + containers=$(kubectl get ${{ env.KUBE_DEPLOY_TYPE }}/${{ env.KUBE_DEPLOY_PREFIX }}-${{ env.ENVIRONMENT }} -n ${{ env.KUBE_NAMESPACE }} -o jsonpath="{.spec.template.spec.containers[*].name}") + echo "CONTAINERS=$containers" >> $GITHUB_ENV + + - name: Update deployment image + run: | + for container in ${{ env.CONTAINERS }}; do + kubectl set image ${{ env.KUBE_DEPLOY_TYPE }}/${{ env.KUBE_DEPLOY_PREFIX }}-${{ env.ENVIRONMENT }} $container=${{ needs.prepair.outputs.image_name }} -n ${{ env.KUBE_NAMESPACE }}; + done + + - name: Restart deployment + run: | + kubectl rollout restart ${{ env.KUBE_DEPLOY_TYPE }}/${{ env.KUBE_DEPLOY_PREFIX }}-${{ env.ENVIRONMENT }} -n ${{ env.KUBE_NAMESPACE }} + + - name: Check deployment + run: | + kubectl rollout status ${{ env.KUBE_DEPLOY_TYPE }}/${{ env.KUBE_DEPLOY_PREFIX }}-${{ env.ENVIRONMENT }} --timeout=300s -n ${{ env.KUBE_NAMESPACE }}