Replace X link with Bluesky link #198
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 | |
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: 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: Install browsers | |
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/[email protected] | |
id: app_name | |
with: | |
file: "fly.toml" | |
field: "app" | |
- name: Set up Fly | |
uses: superfly/flyctl-actions/setup-flyctl@master | |
- name: Deploy Staging | |
if: ${{ github.ref == 'refs/heads/dev' }} | |
run: flyctl deploy --remote-only --build-arg COMMIT_SHA=${{ github.sha }} --build-arg CLOUDINARY_URL=${{ secrets.CLOUDINARY_URL }} --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 }} --build-arg CLOUDINARY_URL=${{ secrets.CLOUDINARY_URL }} --app ${{ steps.app_name.outputs.value }} | |
env: | |
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} |