Repository navigation
157 lines (117 loc) · 4.91 KB
/
Copy pathci.yml
File metadata and controls
157 lines (117 loc) · 4.91 KB
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# See:
# https://docs.github.com/en/actions/guides/building-and-testing-nodejs#building-and-testing-your-code
# https://pnpm.io/ja/continuous-integration#github-actions
# https://github.com/pnpm/action-setup/issues/99#issuecomment-1918361558
# https://github.com/actions/setup-node#inputs
# https://vercel.com/guides/how-can-i-use-github-actions-with-vercel
# https://zenn.dev/ttskch/articles/691fb62fbb6b1b
# https://vercel.com/guides/set-up-a-staging-environment-on-vercel
# https://vercel.com/docs/projects/domains/add-a-domain#verify-domain-access
# https://vercel.com/docs/cli/global-options#scope
# https://www.prisma.io/docs/orm/prisma-client/deployment/deploy-database-changes-with-prisma-migrate
# https://www.prisma.io/docs/orm/prisma-migrate/workflows/baselining
name: CI
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
on:
push:
branches:
- 'main'
- 'staging'
pull_request:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [26]
steps:
- name: Check out Git repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup pnpm and Node.js
uses: ./.github/actions/setup
with:
node-version: ${{ matrix.node-version }}
- name: Build
run: pnpm build
# lint, check, and unit-test do not use the build output, so they run in parallel with build
lint:
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup pnpm and Node.js
uses: ./.github/actions/setup
- name: Lint
run: pnpm lint
check:
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup pnpm and Node.js
uses: ./.github/actions/setup
- name: Check
run: pnpm check
unit-test:
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup pnpm and Node.js
uses: ./.github/actions/setup
- name: Unit test
run: pnpm test:unit
# TODO: Run integration test
# - name: Integration test
# run: pnpm test:e2e
preview:
if: ${{ github.ref != 'refs/heads/main' }}
needs: [build, lint, check, unit-test]
runs-on: ubuntu-latest
environment:
name: preview
url: ${{ steps.deploy.outputs.url }}
steps:
- name: Check out Git repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup pnpm and Node.js
uses: ./.github/actions/setup
- name: Pull Vercel Environment Information
run: pnpm exec vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }}
- name: Build Project Artifacts
run: pnpm exec vercel build --token=${{ secrets.VERCEL_TOKEN }}
# Migrate only after the build succeeds, so a broken build leaves the DB untouched
- name: Apply all pending migrations to the database
run: pnpm exec prisma migrate deploy
env:
DATABASE_URL: ${{ secrets.PREVIEW_DATABASE_URL }}
DIRECT_URL: ${{ secrets.PREVIEW_DIRECT_URL }}
- name: Deploy Project Artifacts to Vercel
id: deploy
run: echo "url=\"$(pnpm exec vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }})\"" >> $GITHUB_OUTPUT
- name: Assign staging domain to deployment (if staging branch)
if: ${{ github.ref != 'refs/heads/main' }}
run: pnpm exec vercel alias set ${{ steps.deploy.outputs.url }} ${{ secrets.STAGING_DOMAIN }} --scope=${{ secrets.VERCEL_SCOPE }} --token=${{ secrets.VERCEL_TOKEN }}
production:
if: ${{ github.ref == 'refs/heads/main' }}
needs: [build, lint, check, unit-test]
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup pnpm and Node.js
uses: ./.github/actions/setup
- name: Pull Vercel Environment Information
run: pnpm exec vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
- name: Build Project Artifacts
run: pnpm exec vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
# Migrate only after the build succeeds, so a broken build leaves the DB untouched
- name: Apply all pending migrations to the database
run: pnpm exec prisma migrate deploy
env:
DATABASE_URL: ${{ secrets.PRODUCTION_DATABASE_URL }}
DIRECT_URL: ${{ secrets.PRODUCTION_DIRECT_URL }}
- name: Deploy Project Artifacts to Vercel
run: pnpm exec vercel deploy --prod --prebuilt --token=${{ secrets.VERCEL_TOKEN }}