Skip to content

Upgrade the entire stack #186

Upgrade the entire stack

Upgrade the entire stack #186

Workflow file for this run

name: Deploy
on:
push:
branches:
- main
- dev
pull_request: {}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
actions: write
contents: read
jobs:
prettier:
name: Prettier
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Install dependencies
run: npm ci
- name: Check formatting
run: npm run pretty
eslint:
name: ESLint
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Install dependencies
run: npm ci
- name: Check config
run: npm run lint:check-config
- name: Lint
run: npm run lint
typescript:
name: TypeScript
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Install dependencies
run: npm ci
- name: Check types
run: npm run typecheck
vitest:
name: Vitest
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Install dependencies
run: npm ci
- name: Compile posts
run: npm run build:posts
env:
CLOUDINARY_URL: ${{ secrets.CLOUDINARY_URL }}
- name: Run tests
run: npm run test:unit
env:
CLOUDINARY_URL: ${{ secrets.CLOUDINARY_URL }}
playwright:
name: Playwright
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Install dependencies
run: npm ci
- name: Add environment variables
run: |
echo "NODE_VERSION=$(node --version)" >> $GITHUB_ENV
npm list @playwright/test --depth=0 --json > npm-list-playwright.json
echo "PLAYWRIGHT_VERSION=$(node --print "require('./npm-list-playwright.json').dependencies['@playwright/test'].version")" >> $GITHUB_ENV
- name: Cache binaries
uses: actions/cache@v3
id: playwright-cache
with:
path: ~/.cache/ms-playwright
key: os-${{ runner.os }}-node-${{ env.NODE_VERSION }}-playwright-v${{ env.PLAYWRIGHT_VERSION }}
- name: Install browsers
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: npx playwright install --with-deps
- name: Build app
run: npm run build
env:
CLOUDINARY_URL: ${{ secrets.CLOUDINARY_URL }}
- name: Run tests
run: npm run test:e2e
env:
CLOUDINARY_URL: ${{ secrets.CLOUDINARY_URL }}
SESSION_SECRET: ${{ secrets.SESSION_SECRET }}
- uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
path: playwright-report/
retention-days: 30
deploy:
name: Deploy
runs-on: ubuntu-latest
needs: [prettier, eslint, typescript, vitest, playwright]
# only deploy main/dev branch on pushes
if: ${{ (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') && github.event_name == 'push' }}
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Read app name
uses: SebRollen/toml-action@v1.2.0
id: app_name
with:
file: "fly.toml"
field: "app"
- name: Set up Fly
uses: superfly/flyctl-actions/setup-flyctl@1.5
- name: Deploy Staging
if: ${{ github.ref == 'refs/heads/dev' }}
run: flyctl deploy --remote-only --build-arg COMMIT_SHA=${{ github.sha }} --app ${{ steps.app_name.outputs.value }}-staging
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
- name: Deploy Production
if: ${{ github.ref == 'refs/heads/main' }}
run: flyctl deploy --remote-only --build-arg COMMIT_SHA=${{ github.sha }} --app ${{ steps.app_name.outputs.value }}
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}