-
Notifications
You must be signed in to change notification settings - Fork 9
143 lines (114 loc) · 4.23 KB
/
ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
name: CI
on:
push:
branches: [main]
pull_request:
types: [opened, edited, synchronize, reopened]
jobs:
build:
name: Build
runs-on: ubuntu-latest
strategy:
matrix:
target: [frontend, frontend-client, backend, backend-admin]
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-pnpm
- name: Generate Prisma Client
if: ${{ matrix.target == 'backend' || matrix.target == 'backend-admin' }}
run: pnpm --filter backend exec prisma generate
- name: Setup Next.js build cache
if: ${{ matrix.target == 'frontend-client' }}
uses: actions/cache@v4
with:
path: frontend-client/.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: ${{ matrix.target == 'frontend-client' }}
run: |
echo "NEXT_PUBLIC_BASEURL=https://dev.codedang.com/api" >> frontend-client/.env
echo "NEXT_URL=https://dev.codedang.com" >> frontend-client/.env
# If target is backend-admin, run `pnpm --filter backend build admin`
# For other targets, run `pnpm --filter <target> build`
- name: Build (backend admin)
if: ${{ matrix.target == 'backend-admin' }}
run: pnpm --filter backend build admin
- name: Build
if: ${{ matrix.target != 'backend-admin' }}
run: pnpm --filter ${{ matrix.target }} build
typecheck:
name: Typecheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-pnpm
- name: Generate Prisma Client
run: pnpm --filter backend exec prisma generate
- name: Check types (backend)
run: pnpm --filter backend exec tsc --noEmit
- name: Check types (frontend)
run: pnpm --filter frontend exec vue-tsc --noEmit
# Typecheck is not performed for frontend-client 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
- uses: ./.github/actions/setup-pnpm
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: iris/go.mod
cache-dependency-path: 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: pnpm format:check
- 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: ./iris
- name: Lint (Node.js)
run: pnpm lint
test:
name: Test
runs-on: ubuntu-latest
env:
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
- uses: ./.github/actions/setup-pnpm
- name: Check Prisma Migration
run: |
pnpm --filter 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
run: pnpm --filter backend exec prisma migrate reset --force
- name: Check types in Typescript
run: pnpm --filter backend exec tsc --noEmit
- name: Test
run: pnpm -r test