name: Publish and deploy on: push: branches: - master tags: - "v*" concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true #to use reusable workflow permissions: id-token: write contents: read env: IMAGE_NAME: parity/substrate-telemetry APP: "substrate-telemetry" jobs: set-variables: name: Set variables runs-on: ubuntu-latest outputs: VERSION: ${{ steps.version.outputs.VERSION }} steps: - name: Define version id: version run: | export COMMIT_SHA=${{ github.sha }} export COMMIT_SHA_SHORT=${COMMIT_SHA:0:8} export REF_NAME=${{ github.ref_name }} export REF_SLUG=${REF_NAME//\//_} if [[ ${REF_SLUG} == "master" ]] then echo "VERSION=${REF_SLUG}-${COMMIT_SHA_SHORT}" >> $GITHUB_OUTPUT else echo "VERSION=${REF_SLUG}" >> $GITHUB_OUTPUT fi echo "set VERSION=${VERSION}" build_backend: name: Build backend docker image runs-on: ubuntu-latest needs: [set-variables] environment: master_n_tags env: VERSION: ${{ needs.set-variables.outputs.VERSION }} steps: - name: Check out the repo uses: actions/checkout@v4 - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - name: Build and push Docker image from master uses: docker/build-push-action@v5 with: context: backend file: ./backend/Dockerfile push: true tags: | ${{ env.IMAGE_NAME }}-backend:${{ env.VERSION }} build_frontend: name: Build frontend docker image runs-on: ubuntu-latest needs: [set-variables] environment: master_n_tags env: VERSION: ${{ needs.set-variables.outputs.VERSION }} steps: - name: Check out the repo uses: actions/checkout@v4 - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - name: Build and push Docker image from master uses: docker/build-push-action@v5 with: context: frontend file: ./frontend/Dockerfile push: true tags: | ${{ env.IMAGE_NAME }}-frontend:${{ env.VERSION }} deploy-stg: name: Deploy Staging runs-on: ubuntu-latest needs: [set-variables, build_backend, build_frontend] environment: parity-stg env: VERSION: ${{ needs.set-variables.outputs.VERSION }} ARGOCD_SERVER: "argocd-stg.teleport.parity.io" steps: - name: Deploy to ArgoCD uses: paritytech/argocd-deployment-action@main with: environment: "parity-stg" tag: "${{ env.VERSION }}" app_name: "${{ env.APP }}" app_packages: "frontend,backend" argocd_additional_args: "-p substrate-telemetry.image.backend.tag=${{ env.VERSION }} -p substrate-telemetry.image.frontend.tag=${{ env.VERSION }}" argocd_server: ${{ env.ARGOCD_SERVER }} teleport_token: ${{ env.APP }} teleport_app_name: "argocd-stg" argocd_auth_token: ${{ secrets.ARGOCD_AUTH_TOKEN }} deploy-prod: name: Deploy Production runs-on: ubuntu-latest needs: [set-variables, deploy-stg] environment: parity-prod # Deploy only if the tag is v* if: startsWith(github.ref, 'refs/tags/v') env: VERSION: ${{ needs.set-variables.outputs.VERSION }} ARGOCD_SERVER: "argocd-prod.teleport.parity.io" steps: - name: Deploy to ArgoCD uses: paritytech/argocd-deployment-action@main with: environment: "parity-prod" tag: "${{ env.VERSION }}" app_name: "${{ env.APP }}" app_packages: "frontend,backend" argocd_additional_args: "-p substrate-telemetry.image.backend.tag=${{ env.VERSION }} -p substrate-telemetry.image.frontend.tag=${{ env.VERSION }}" argocd_server: ${{ env.ARGOCD_SERVER }} teleport_token: ${{ env.APP }} teleport_app_name: "argocd-prod" argocd_auth_token: ${{ secrets.ARGOCD_AUTH_TOKEN }}