This repository has been archived by the owner on Jun 23, 2024. It is now read-only.
feat(*): setup auto deploy (#44) #11
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |