Skip to content
This repository has been archived by the owner on Jun 23, 2024. It is now read-only.

feat(*): setup auto deploy (#44) #11

feat(*): setup auto deploy (#44)

feat(*): setup auto deploy (#44) #11

Workflow file for this run

name: Build and Deploy to AWS
on:
push:
branches:
- main
env:
# root env
POSTGRES_PORT: ${{ secrets.POSTGRES_PORT }}
POSTGRES_USER: ${{ secrets.POSTGRES_USER }}
POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
POSTGRES_DB: ${{ secrets.POSTGRES_DB }}
REDIS_PORT: ${{ secrets.REDIS_PORT }}
REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}
# client env
VITE_API_URL: ${{ secrets.VITE_API_URL }}
VITE_SOCKET_URL: ${{ secrets.VITE_SOCKET_URL }}
VITE_FIREBASE_APP_ID: ${{ secrets.VITE_FIREBASE_APP_ID }}
VITE_FIREBASE_API_KEY: ${{ secrets.VITE_FIREBASE_API_KEY }}
VITE_FIREBASE_AUTH_DOMAIN: ${{ secrets.VITE_FIREBASE_AUTH_DOMAIN }}
VITE_FIREBASE_PROJECT_ID: ${{ secrets.VITE_FIREBASE_PROJECT_ID }}
VITE_FIREBASE_STORAGE_BUCKET: ${{ secrets.VITE_FIREBASE_STORAGE_BUCKET }}
VITE_FIREBASE_MESSAGE_SENDER_ID: ${{ secrets.VITE_FIREBASE_MESSAGE_SENDER_ID }}
VITE_FIREBASE_MEASUREMENT_ID: ${{ secrets.VITE_FIREBASE_MEASUREMENT_ID }}
# server env
APP_URL: ${{ secrets.APP_URL }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
REDIS_URL: ${{ secrets.REDIS_URL }}
ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }}
REFRESH_TOKEN_SECRET: ${{ secrets.REFRESH_TOKEN_SECRET }}
FIREBASE_PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID }}
FIREBASE_PRIVATE_KEY_ID: ${{ secrets.FIREBASE_PRIVATE_KEY_ID }}
FIREBASE_PRIVATE_KEY: ${{ secrets.FIREBASE_PRIVATE_KEY }}
FIREBASE_CLIENT_EMAIL: ${{ secrets.FIREBASE_CLIENT_EMAIL }}
FIREBASE_CLIENT_ID: ${{ secrets.FIREBASE_CLIENT_ID }}
FIREBASE_AUTH_URI: ${{ secrets.FIREBASE_AUTH_URI }}
FIREBASE_TOKEN_URI: ${{ secrets.FIREBASE_TOKEN_URI }}
FIREBASE_AUTH_PROVIDER_X509_CERT_URL: ${{ secrets.FIREBASE_AUTH_PROVIDER_X509_CERT_URL }}
FIREBASE_CLIENT_X509_CERT_URL: ${{ secrets.FIREBASE_CLIENT_X509_CERT_URL }}
MAILER_EMAIL: ${{ secrets.MAILER_EMAIL }}
MAILER_PASSWORD: ${{ secrets.MAILER_PASSWORD }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install client dependencies
working-directory: ./client
run: |
yarn install
export VITE_API_URL=$VITE_API_URL
export VITE_SOCKET_URL=$VITE_SOCKET_URL
export VITE_FIREBASE_APP_ID=$VITE_FIREBASE_APP_ID
export VITE_FIREBASE_API_KEY=$VITE_FIREBASE_API_KEY
export VITE_FIREBASE_AUTH_DOMAIN=$VITE_FIREBASE_AUTH_DOMAIN
export VITE_FIREBASE_PROJECT_ID=$VITE_FIREBASE_PROJECT_ID
export VITE_FIREBASE_STORAGE_BUCKET=$VITE_FIREBASE_STORAGE_BUCKET
export VITE_FIREBASE_MESSAGE_SENDER_ID=$VITE_FIREBASE_MESSAGE_SENDER_ID
export VITE_FIREBASE_MEASUREMENT_ID=$VITE_FIREBASE_MEASUREMENT_ID
- name: Install server dependencies
working-directory: ./server
run: |
yarn install
export APP_URL=$APP_URL
export DATABASE_URL=$DATABASE_URL
export REDIS_URL=$REDIS_URL
export ACCESS_TOKEN_SECRET=$ACCESS_TOKEN_SECRET
export REFRESH_TOKEN_SECRET=$REFRESH_TOKEN_SECRET
export FIREBASE_PROJECT_ID=$FIREBASE_PROJECT_ID
export FIREBASE_PRIVATE_KEY_ID=$FIREBASE_PRIVATE_KEY_ID
export FIREBASE_PRIVATE_KEY=$FIREBASE_PRIVATE_KEY
export FIREBASE_CLIENT_EMAIL=$FIREBASE_CLIENT_EMAIL
export FIREBASE_CLIENT_ID=$FIREBASE_CLIENT_ID
export FIREBASE_AUTH_URI=$FIREBASE_AUTH_URI
export FIREBASE_TOKEN_URI=$FIREBASE_TOKEN_URI
export FIREBASE_AUTH_PROVIDER_X509_CERT_URL=$FIREBASE_AUTH_PROVIDER_X509_CERT_URL
export FIREBASE_CLIENT_X509_CERT_URL=$FIREBASE_CLIENT_X509_CERT_URL
export MAILER_EMAIL=$MAILER_EMAIL
export MAILER_PASSWORD=$MAILER_PASSWORD
- name: Build client image
working-directory: ./client
run: docker build -t thdeathzz/kanjigami-prod:client-${{github.run_number}} -t thdeathzz/kanjigami-prod:client-latest -f ../deploy/client.Dockerfile .
- name: Build server image
working-directory: ./server
run: docker build -t thdeathzz/kanjigami-prod:server-${{github.run_number}} -t thdeathzz/kanjigami-prod:server-latest -f ../deploy/server.Dockerfile .
- name: Build nginx image
working-directory: ./deploy/nginx
run: docker build -t thdeathzz/kanjigami-prod:nginx-${{github.run_number}} -t thdeathzz/kanjigami-prod:nginx-latest .
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
access-token: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Push Docker Images to Docker Hub
run: |
docker push thdeathzz/kanjigami-prod:client-${{github.run_number}}
docker push thdeathzz/kanjigami-prod:client-latest
docker push thdeathzz/kanjigami-prod:server-${{github.run_number}}
docker push thdeathzz/kanjigami-prod:server-latest
docker push thdeathzz/kanjigami-prod:nginx-${{github.run_number}}
docker push thdeathzz/kanjigami-prod:nginx-latest
- name: Generate deployment package
run: |
zip -r deploy.zip ./docker-compose.prod.yml
- name: Deploy to Elastic Beanstalk
uses: einaregilsson/beanstalk-deploy@v21
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: ${{ secrets.EB_APP_NAME }}
environment_name: ${{ secrets.EB_ENV_NAME }}
region: ${{ secrets.EB_REGION }}
version_label: 'version-${{ github.run_number }}'
deployment_package: deploy.zip
use_existing_version_if_available: true