Skip to content

Merge pull request #39 from OilerNetwork/feat/updateWorkflow #30

Merge pull request #39 from OilerNetwork/feat/updateWorkflow

Merge pull request #39 from OilerNetwork/feat/updateWorkflow #30

name: Docker Build, Push and Deploy Pitchlake UI
on:
push:
branches:
- main
env:
AWS_REGION: eu-central-1
ECR_REPOSITORY: pitchlake-ui-new_images_repository
ECS_SERVICE: pitchlake-ui-new-app
ECS_CLUSTER: pitchlake-ui-new-ecs-cluster
CONTAINER_NAME: pitchlake-ui-new
TASK_NAME: pitchlake-ui-new-app
NODE_ENV: production
PORT: ${{vars.PORT}}
NEXT_PUBLIC_VAULT_ADDRESSES: ${{vars.VAULT_ADDRESSES}}
NEXT_PUBLIC_API_URL: ${{vars.API_URL}}
NEXT_PUBLIC_ENVIRONMENT: ${{vars.ENVIRONMENT}}
NEXT_PUBLIC_RPC_URL_MAINNET: ${{secrets.RPC_URL_MAINNET}}
NEXT_PUBLIC_RPC_URL_SEPOLIA: ${{secrets.RPC_URL_SEPOLIA}}
NEXT_PUBLIC_RPC_URL_DEVNET: ${{secrets.RPC_URL_DEVNET}}
NEXT_PUBLIC_RPC_URL_JUNO_DEVNET: ${{vars.RPC_URL_JUNO_DEVNET}}
NEXT_PUBLIC_WS_URL: ${{vars.WS_URL}}
FOSSIL_API_KEY: ${{secrets.FOSSIL_API_KEY}}
FOSSIL_DB_URL: ${{secrets.FOSSIL_DB_URL}}
NEXT_PUBLIC_FOSSIL_API_URL: ${{vars.FOSSIL_API_URL}}
permissions:
id-token: write
contents: write
jobs:
build_push_deploy:
runs-on: ubuntu-latest
environment: staging
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Check if Docker is installed
run: |
if ! command -v docker &> /dev/null
then
sudo apt-get update
sudo apt-get install -y docker.io
sudo apt-get install -y docker-compose
fi
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::654654236251:role/terraform-20241003185909187100000001
role-session-name: Github
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
with:
mask-password: "true"
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: ${{ env.ECR_REPOSITORY }}
run: |
IMAGE_TAG=pitchlake-ui-${{ github.sha }}
IMAGE_URI=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "IMAGE_URI=$IMAGE_URI" >> $GITHUB_ENV
docker buildx build \
--platform=linux/amd64 \
--build-arg PORT=${{ env.PORT }} \
--build-arg NEXT_PUBLIC_VAULT_ADDRESSES=${{ env.NEXT_PUBLIC_VAULT_ADDRESSES }} \
--build-arg NEXT_PUBLIC_API_URL=${{ env.NEXT_PUBLIC_API_URL }} \
--build-arg NEXT_PUBLIC_ENVIRONMENT=${{ env.NEXT_PUBLIC_ENVIRONMENT }} \
--build-arg NEXT_PUBLIC_RPC_URL_MAINNET=${{ env.NEXT_PUBLIC_RPC_URL_MAINNET }} \
--build-arg NEXT_PUBLIC_RPC_URL_SEPOLIA=${{ env.NEXT_PUBLIC_RPC_URL_SEPOLIA }} \
--build-arg NEXT_PUBLIC_RPC_URL_DEVNET=${{ env.NEXT_PUBLIC_RPC_URL_DEVNET }} \
--build-arg NEXT_PUBLIC_RPC_URL_JUNO_DEVNET=${{ env.NEXT_PUBLIC_RPC_URL_JUNO_DEVNET }} \
--build-arg NEXT_PUBLIC_WS_URL=${{ env.NEXT_PUBLIC_WS_URL }} \
--build-arg FOSSIL_API_KEY=${{ env.FOSSIL_API_KEY }} \
--build-arg FOSSIL_DB_URL=${{ env.FOSSIL_DB_URL }} \
--build-arg NEXT_PUBLIC_FOSSIL_API_URL=${{ env.NEXT_PUBLIC_FOSSIL_API_URL }} \
--build-arg NODE_ENV={{env.NODE_ENV}} \
-f ./Dockerfile \
-t $IMAGE_URI \
./
docker push $IMAGE_URI
- name: Download task definition
run: |
aws ecs describe-task-definition --task-definition ${{ env.TASK_NAME }} --query taskDefinition > task-definition.json
- name: Log task definition
run: cat task-definition.json
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ env.IMAGE_URI }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v2
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ env.ECS_SERVICE }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true