Skip to content

Build frontend request from Chewie #123

Build frontend request from Chewie

Build frontend request from Chewie #123

Workflow file for this run

name: Build and deploy docker image
on:
workflow_dispatch: # Allows manual workflow trigger
repository_dispatch: # Allows API workflow trigger
concurrency:
group: dapp
cancel-in-progress: true
# Set global env variables
env:
AWS_REGION: eu-west-2
ECR_REPOSITORY: app-frontend
IMAGE_TAG: ${{ github.event.client_payload.COMMIT_HASH != null && github.event.client_payload.COMMIT_HASH || github.sha }}
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
jobs:
# # Build dapp frontend and push to AWS ECR
buildAndPush:
runs-on: ubuntu-latest
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.4.1
with:
access_token: ${{ github.token }}
- name: Echo Env Vars through Context
run: |
echo "$GITHUB_CONTEXT"
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Checkout relevant branch
run:
git checkout ${{ github.event.client_payload.COMMIT_HASH != null && github.event.client_payload.COMMIT_HASH || github.sha }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push
uses: docker/build-push-action@v3
with:
context: ${{ github.workspace }}
file: ./Dockerfile
push: true
tags: ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.eu-west-2.amazonaws.com/app-frontend:${{ env.IMAGE_TAG }}
- uses: sarisia/actions-status-discord@c193626e5ce172002b8161e116aa897de7ab5383
if: always()
with:
webhook: ${{ env.DISCORD_WEBHOOK }}
title: "Build and push"
# Deploy dapp frontend to QA environment
deployQA:
needs: buildAndPush
runs-on: ubuntu-latest
env:
NAMESPACE: default
CLUSTER_NAME: qa
ENVIRONMENT_TAG: qa
REPOSITORY_NAME: app-frontend
steps:
- name: Configure AWS credentials for EKS
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/eks-admin
role-session-name: github-cicd
role-duration-seconds: 1200
aws-region: ${{ env.AWS_REGION }}
- name: Configure AWS EKS
run: |
aws eks --region ${{ env.AWS_REGION }} update-kubeconfig --name ${{ env.CLUSTER_NAME }}
- name: Deploy to Kubernetes cluster
env:
RELEASE_IMAGE: ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.eu-west-2.amazonaws.com/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
run: |
kubectl set image deployment/dapp-${{ env.ENVIRONMENT_TAG }}-network-100 dapp=${{ env.RELEASE_IMAGE }} -n $NAMESPACE
- name: Validate Kubernetes deployment
run: |
kubectl rollout status deployment/dapp-${{ env.ENVIRONMENT_TAG }}-network-100 -n ${{ env.NAMESPACE }}
- uses: sarisia/actions-status-discord@c193626e5ce172002b8161e116aa897de7ab5383
if: always()
with:
webhook: ${{ env.DISCORD_WEBHOOK }}
title: "Deploy to QA"
# Deploy dapp frontend to staging environment and sync production data to staging
deployStaging:
needs: deployQA
environment: 'staging'
runs-on: ubuntu-latest
env:
NAMESPACE: staging
CLUSTER_NAME: prod
ENVIRONMENT_TAG: staging
REPOSITORY_NAME: app-frontend
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }}
aws-region: ${{ env.AWS_REGION }}
- name: Configure AWS EKS
run: |
aws eks --region ${{ env.AWS_REGION }} update-kubeconfig --name ${{ env.CLUSTER_NAME }}
- name: Deploy to Kubernetes cluster
env:
RELEASE_IMAGE: ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.eu-west-2.amazonaws.com/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
run: |
kubectl set image deployment/dapp-${{ env.ENVIRONMENT_TAG }}-network-100 dapp=${{ env.RELEASE_IMAGE }} -n $NAMESPACE
- name: Validate Kubernetes deployment
run: |
kubectl rollout status deployment/dapp-${{ env.ENVIRONMENT_TAG }}-network-100 -n ${{ env.NAMESPACE }}
- name: Repository Dispatch
uses: peter-evans/repository-dispatch@f2696244ec00ed5c659a5cc77f7138ad0302dffb
with:
token: ${{ secrets.COLONY_INFRASTRUCTURE_PROD_TO_STAGING_TOKEN }}
repository: JoinColony/colonyInfrastructure
event-type: data-sync
- uses: sarisia/actions-status-discord@c193626e5ce172002b8161e116aa897de7ab5383
if: always()
with:
webhook: ${{ env.DISCORD_WEBHOOK }}
title: "Deploy to Staging"
# Deploy dapp frontend to production environment
deployProd:
needs: deployStaging
environment: 'prod'
runs-on: ubuntu-latest
env:
NAMESPACE: prod
CLUSTER_NAME: prod
ENVIRONMENT_TAG: prod
REPOSITORY_NAME: app-frontend
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }}
aws-region: ${{ env.AWS_REGION }}
- name: Configure AWS EKS
run: |
aws eks --region ${{ env.AWS_REGION }} update-kubeconfig --name ${{ env.CLUSTER_NAME }}
- name: Deploy to Kubernetes cluster
env:
RELEASE_IMAGE: ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.eu-west-2.amazonaws.com/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
run: |
kubectl set image deployment/dapp-${{ env.ENVIRONMENT_TAG }}-network-100 dapp=${{ env.RELEASE_IMAGE }} -n $NAMESPACE
- name: Validate Kubernetes deployment
run: |
kubectl rollout status deployment/dapp-${{ env.ENVIRONMENT_TAG }}-network-100 -n ${{ env.NAMESPACE }}
- uses: sarisia/actions-status-discord@c193626e5ce172002b8161e116aa897de7ab5383
if: always()
with:
webhook: ${{ env.DISCORD_WEBHOOK }}
title: "Deploy to Production"