-
Notifications
You must be signed in to change notification settings - Fork 4
159 lines (129 loc) · 3.76 KB
/
ci.yml
File metadata and controls
159 lines (129 loc) · 3.76 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
158
159
name: CI
on:
push:
branches: ['**']
tags:
- 'v*.*.*'
permissions:
contents: write
packages: write
jobs:
lint-and-build:
name: Lint and Build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run linter
run: pnpm lint
- name: Run build
run: pnpm build
env:
# Required env vars for build (using dummy values)
DATABASE_URL: postgresql://dummy:dummy@localhost:5432/dummy
BASE_URL: http://localhost:8080
SECRET_KEY: dummy-secret-key-for-ci-build-only
NEXTAUTH_SECRET: dummy-secret-key-for-ci-build-only
NEXTAUTH_URL: http://localhost:8080
typecheck:
name: TypeScript Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Type check
run: pnpm exec tsc --noEmit
test:
name: Integration Tests
runs-on: ubuntu-latest
services:
postgres:
image: postgres:17
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: replane_test
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run tests
run: pnpm test
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/replane_test
BASE_URL: http://localhost:8080
SECRET_KEY: test-secret-key-for-ci
NEXTAUTH_SECRET: test-secret-key-for-ci
NEXTAUTH_URL: http://localhost:8080
e2e:
name: E2E Tests
uses: ./.github/workflows/e2e.yml
bench:
name: Benchmark Tests
uses: ./.github/workflows/bench.yml
soak:
name: Soak Tests
needs: [lint-and-build, typecheck, test, e2e, bench]
if: startsWith(github.ref, 'refs/tags/v')
uses: ./.github/workflows/bench.yml
with:
test_duration: '3h'
timeout_minutes: 240
release:
name: Release Docker Image
needs: [lint-and-build, typecheck, test, e2e, bench]
if: startsWith(github.ref, 'refs/tags/v')
uses: ./.github/workflows/release.yml
with:
benchmark_results: ${{ needs.soak.outputs.results }}
secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
deploy-production:
name: Deploy to Production
needs: [lint-and-build, typecheck, test, e2e, bench]
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Fly.io CLI
uses: superfly/flyctl-actions/setup-flyctl@master
- name: Deploy to Fly.io
run: flyctl deploy --remote-only
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}