feat(fe): apply error boundary for main directory #11121
Workflow file for this run
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: CI | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
types: [opened, edited, synchronize, reopened] | |
jobs: | |
build-backend: | |
name: Build Backend | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
target: [client, admin] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check if source code has changed | |
uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: | | |
shared: &shared | |
- 'apps/backend/libs/**' | |
- 'apps/backend/prisma/**' | |
- 'apps/backend/*.json' | |
- 'pnpm-lock.yaml' | |
client: | |
- *shared | |
- 'apps/backend/apps/client/**' | |
admin: | |
- *shared | |
- 'apps/backend/apps/admin/**' | |
- uses: ./.github/actions/setup-pnpm | |
if: ${{ steps.filter.outputs[matrix.target] == 'true' }} | |
- name: Generate Prisma Client | |
if: ${{ steps.filter.outputs[matrix.target] == 'true' }} | |
run: pnpm --filter="@codedang/backend" exec prisma generate | |
- name: Build | |
if: ${{ steps.filter.outputs[matrix.target] == 'true' }} | |
run: pnpm --filter="@codedang/backend" build ${{ matrix.target }} | |
build-frontend: | |
name: Build Frontend | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check if source code has changed | |
uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: | | |
frontend: | |
- 'apps/frontend/**' | |
- 'pnpm-lock.yaml' | |
- uses: ./.github/actions/setup-pnpm | |
if: steps.filter.outputs.frontend == 'true' | |
- name: Setup Next.js build cache | |
uses: actions/cache@v4 | |
if: steps.filter.outputs.frontend == 'true' | |
with: | |
path: apps/frontend/.next/cache | |
key: ${{ runner.os }}-nextjs-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} | |
restore-keys: | | |
${{ runner.os }}-nextjs-${{ hashFiles('pnpm-lock.yaml') }}- | |
- name: Load Next.js environment | |
if: steps.filter.outputs.frontend == 'true' | |
run: | | |
echo "NEXT_PUBLIC_BASEURL=https://stage.codedang.com/api" >> apps/frontend/.env | |
echo "NEXT_PUBLIC_GQL_BASEURL=https://stage.codedang.com/graphql" >> apps/frontend/.env | |
echo "NEXT_URL=https://stage.codedang.com" >> apps/frontend/.env | |
- name: Build | |
if: steps.filter.outputs.frontend == 'true' | |
run: pnpm --filter="@codedang/frontend" build | |
typecheck: | |
name: Typecheck | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check if source code has changed | |
uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: | | |
backend: | |
- 'apps/backend/**' | |
- uses: ./.github/actions/setup-pnpm | |
if: steps.filter.outputs.backend == 'true' | |
- name: Generate Prisma Client | |
if: steps.filter.outputs.backend == 'true' | |
run: pnpm --filter="@codedang/backend" exec prisma generate | |
- name: Check types (backend) # For spec files | |
if: steps.filter.outputs.backend == 'true' | |
run: pnpm --filter="@codedang/backend" exec tsc --noEmit | |
# Typecheck is not performed for frontend intentionally. | |
# Check: https://github.com/vercel/next.js/issues/53959 | |
# Unlike backend, we don't have spec file to check types. | |
# So typechecking performed in the build step is enough. | |
lint: | |
name: Lint | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: ./.github/actions/setup-pnpm | |
with: | |
install: 'no' | |
- name: Install dev dependencies | |
run: pnpm install --dev | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version-file: apps/iris/go.mod | |
cache-dependency-path: apps/iris/go.sum | |
- name: Lint pull request title | |
if: ${{ github.event_name == 'pull_request' }} | |
run: echo "${{ github.event.pull_request.title }}" | pnpm commitlint --verbose | |
- name: Check style (Node.js) | |
run: git diff --name-only --diff-filter=ACMRUXB origin/main | xargs -r pnpm prettier -c --ignore-unknown --no-error-on-unmatched-pattern | |
- name: Check Style (Go) | |
run: | | |
if [ -n "$(gofmt -l .)" ]; then | |
echo "Go files must be formatted with gofmt. Please run:" | |
echo " go fmt ./..." | |
exit 1 | |
fi | |
working-directory: ./apps/iris | |
- name: Lint (Node.js) | |
run: git diff --name-only --diff-filter=ACMRUXB origin/main | grep -E "(.ts$|.tsx$|.js$|.jsx$)" | grep -v 'next.config.js$' | xargs -r pnpm eslint | |
test-backend: | |
name: Test Backend | |
runs-on: ubuntu-latest | |
env: | |
DATABASE_URL: postgresql://postgres:1234@localhost:5432/skkuding?schema=public | |
TEST_DATABASE_URL: postgresql://postgres:1234@localhost:5432/skkuding?schema=public | |
services: | |
postgres: | |
image: postgres:16-alpine | |
ports: | |
- 5432:5432 | |
env: | |
POSTGRES_USER: postgres | |
POSTGRES_PASSWORD: 1234 | |
POSTGRES_DB: skkuding | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check if source code has changed | |
uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: | | |
backend: | |
- 'apps/backend/**' | |
- 'pnpm-lock.yaml' | |
- uses: ./.github/actions/setup-pnpm | |
if: steps.filter.outputs.backend == 'true' | |
- name: Check Prisma Migration | |
if: steps.filter.outputs.backend == 'true' | |
run: | | |
pnpm --filter="@codedang/backend" exec prisma migrate diff \ | |
--from-migrations ./prisma/migrations \ | |
--to-schema-datamodel ./prisma/schema.prisma \ | |
--shadow-database-url ${{ env.DATABASE_URL }} \ | |
--exit-code || | |
(echo "::error::Prisma migration is not up to date." \ | |
"Please run 'pnpm prisma migrate dev' locally and commit the changes." && exit 1) | |
- name: Migrate Prisma | |
if: steps.filter.outputs.backend == 'true' | |
run: pnpm --filter="@codedang/backend" exec prisma migrate reset --force | |
- name: Test | |
if: steps.filter.outputs.backend == 'true' | |
run: pnpm --filter="@codedang/backend" test |