Upload “static/assets/icon-route53.svg” #122
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: Deploy to production | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
workflow_dispatch: | |
branches: [main] | |
jobs: | |
lint-js: | |
name: Lint JavaScript | |
runs-on: ubuntu-latest | |
env: | |
NODE_ENV: test | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: Use NodeJS 20.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20.x' | |
cache: 'npm' | |
# Install Node Modules | |
- name: Install | |
run: npm ci --legacy-peer-deps | |
# Lint JavaScript | |
- name: Lint JavaScript | |
run: npm run lint:js | |
lint-css: | |
name: Lint CSS | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: Use NodeJS 20.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20.x' | |
cache: 'npm' | |
# Install Node Modules | |
- name: Install | |
run: npm ci --legacy-peer-deps | |
# Lint CSS | |
- name: Lint CSS | |
run: npm run lint:scss | |
test: | |
name: Test | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: Use NodeJS 20.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20.x' | |
cache: 'npm' | |
# Install Node Modules | |
- name: Install | |
run: npm ci --legacy-peer-deps | |
# Test | |
- name: Test | |
run: npm run test | |
build: | |
name: Build | |
runs-on: ubuntu-latest | |
needs: [lint-css, lint-js, test] | |
env: | |
NODE_ENV: ${{ vars.NODE_ENV }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: Use NodeJS 20.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20.x' | |
cache: 'npm' | |
# Install Node Modules | |
- name: Install | |
run: npm ci --legacy-peer-deps | |
# Build the website | |
- name: Build | |
run: npm run build | |
# Zip artifacts | |
- name: Zip artifacts | |
run: zip -r public.zip ./public | |
# Upload artifacts | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: artifacts | |
path: public.zip | |
deploy: | |
name: Deploy | |
needs: build | |
runs-on: ubuntu-latest | |
environment: production | |
steps: | |
- uses: actions/checkout@v4 | |
# Download artifacts | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: artifacts | |
path: ./ | |
# Unzip artifacts | |
- name: Unzip artifacts | |
run: unzip ./public.zip -d ./ | |
# Prepare AWS SDK | |
- name: Prepare AWS SDK | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: ${{ vars.AWS_REGION }} | |
# Deploy portfolio website | |
- name: Deploy | |
run: aws s3 sync ./public/ s3://${{ vars.S3_BUCKET_NAME }} --delete | |
# Deploy portfolio website | |
- name: Invalidate CloudFront cache | |
run: aws cloudfront create-invalidation --distribution-id ${{ vars.CLOUDFRONT_DISTRIBUTION_ID }} --paths "/*" |