Skip to content

deploy-aws-prod

deploy-aws-prod #1721

name: deploy-aws-prod
on:
push:
branches:
- main
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# run every 6 hours
schedule:
- cron: "0 */6 * * *"
concurrency:
group: production
cancel-in-progress: false
jobs:
aws_deploy_prod:
runs-on: ubuntu-latest
environment:
name: production
url: https://lemmyverse.net
steps:
# https://github.com/actions/toolkit/issues/946#issuecomment-1590016041
- name: root suid tar
run: sudo chown root:root /bin/tar && sudo chmod u+s /bin/tar
- uses: actions/checkout@v3
- name: Use Node.js 18.15.0
uses: actions/setup-node@v3
with:
node-version: 18.15.0
# download latest redis database
- name: get current hour for cache busting
id: cache-hour
run: echo "hour=$(date +'%Y-%m-%d-%H')" >>$GITHUB_OUTPUT
- name: Cache Redis Dump
id: cache-redis
uses: actions/cache@v3
env:
cache-name: cache-redis
with:
path: ./.redis/
key: cache-redis-${{ steps.cache-hour.outputs.hour }}
# download redis db dump from s3
- name: Download the Redis Dump
if: steps.cache-redis.outputs.cache-hit != 'true'
uses: keithweaver/aws-s3-github-action@v1.0.0
with:
command: cp
source: s3://${{ vars.BUILD_S3_BUCKET }}/checkpoint/dump.rdb
destination: ./.redis/dump.rdb
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ap-southeast-2
# start redis & check if it is running
- name: Start Redis
working-directory: ./crawler
run: docker compose -f "docker-compose.github.yaml" up -d redis
- working-directory: ./crawler
run: docker ps -a
- working-directory: ./crawler
run: docker compose -f "docker-compose.github.yaml" logs redis
# install npm dependencies
- name: Cache NPM Modules
id: cache-crawler-npm
uses: actions/cache@v3
env:
cache-name: cache-crawler-npm
with:
path: ./crawler/node_modules/
key: cache-crawler-npm-${{ hashFiles('crawler/package-lock.json') }}
- name: Install Dependencies
if: steps.cache-crawler-npm.outputs.cache-hit != 'true'
run: npm ci
working-directory: ./crawler
- name: Run Health Script
run: node index.js --health
working-directory: ./crawler
- name: Run Output Script
run: node index.js --out
working-directory: ./crawler
# install npm dependencies
- name: Cache NPM Modules
id: cache-frontend-npm
uses: actions/cache@v3
env:
cache-name: cache-frontend-npm
with:
path: ./frontend/node_modules/
key: cache-frontend-npm-${{ hashFiles('frontend/package-lock.json') }}
- name: Install Dependencies
if: steps.cache-frontend-npm.outputs.cache-hit != 'true'
run: npm ci
working-directory: ./frontend
- name: Build the Frontend
run: npm run build
working-directory: ./frontend
# - name: archive frontend bundle
# uses: actions/upload-artifact@v3
# with:
# name: dist-frontend-bundle
# path: |
# ./frontend/dist/
- name: create-json
id: create-json
uses: jsdaniell/create-json@v1.2.2
with:
dir: ./cdk
name: "config.json"
json: ${{ vars.CONFIG_JSON }}
# install npm dependencies
- name: Cache NPM Modules
id: cache-cdk-npm
uses: actions/cache@v3
env:
cache-name: cache-cdk-npm
with:
path: ./cdk/node_modules/
key: cache-cdk-npm-${{ hashFiles('frontend/package-lock.json') }}
- name: Install CDK Dependencies
if: steps.cache-cdk-npm.outputs.cache-hit != 'true'
run: npm ci
working-directory: ./cdk
- name: CDK Bootstrap
run: ./node_modules/.bin/cdk bootstrap
working-directory: ./cdk
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: CDK Synth
run: ./node_modules/.bin/cdk synthesize --all
working-directory: ./cdk
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: CDK Diff
run: ./node_modules/.bin/cdk diff --all
working-directory: ./cdk
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: CDK Deploy
run: ./node_modules/.bin/cdk deploy --all --require-approval never
working-directory: ./cdk
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}