-
Notifications
You must be signed in to change notification settings - Fork 7
145 lines (123 loc) · 5.04 KB
/
validate-workflow.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
144
145
name: Validate
on:
push: {branches: [main, production]}
pull_request:
jobs:
main:
name: Run type checks, lint, and tests
runs-on: ubuntu-latest
timeout-minutes: 15
services:
# https://docs.github.com/en/actions/using-containerized-services/creating-postgresql-service-containers
postgres:
image: postgres:latest
# service environment variables
env:
# `POSTGRES_HOST` is `postgres`
# optional (defaults to `postgres`)
POSTGRES_DB: test
# required
POSTGRES_PASSWORD: test
# optional (defaults to `5432`)
POSTGRES_PORT: 5432
# optional (defaults to `postgres`)
POSTGRES_USER: postgres
ports:
# maps tcp port 5432 on service container to the host
- 5432:5432
# set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
# This is not working for some reason...
# inngest:
# image: inngest/inngest
# ports:
# - 8288:8288
env:
NODE_OPTIONS: --max-old-space-size=4096
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
DATABASE_URL: postgres://postgres:test@localhost:5432/test
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20 # TODO: Can we get this from "engine" field in package.json?
- uses: pnpm/action-setup@v4
name: Install pnpm
id: pnpm-install
with:
version: 9.9.0 # Ideally we should get this from engine field too...
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
with:
path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
# - name: Set up tmate session
# uses: mxschmitt/action-tmate@v2
# - name: Setup upterm session
# uses: lhotari/action-upterm@v1
- name: Run type checks
run: pnpm run typecheck
- name: Run lint
run: pnpm run lint
- name: Download dev env vars from Vercel
run: |
npm install --global vercel@latest
vercel link --token $VERCEL_TOKEN --scope openint-dev --yes
vercel env pull --token $VERCEL_TOKEN ./apps/web/.env.local
- name: Ensure OpenAPI spec and docs are up to date
run: pnpm --dir ./kits/sdk run gen && pnpm --dir ./docs generate && git diff --exit-code
- name: Run migration and store the completed schema
# TODO: consider diffing schema with stored schema?
# Perhaps make dump and diff one of the code generation next steps?
run: |
pnpm migrate
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y postgresql-client-17
mkdir -p ./artifacts
/usr/lib/postgresql/17/bin/pg_dump $DATABASE_URL --inserts > ./artifacts/dump.sql
/usr/lib/postgresql/17/bin/pg_dump $DATABASE_URL --inserts --data-only --table __drizzle_migrations
- name: Archive migration artifacts
uses: actions/upload-artifact@v4
with:
name: migration-artifacts
path: |
./artifacts
# To test this with a locally install postgres, run
# psql postgres -c 'drop database if exists test;' && psql postgres -c 'create database test;' && DATABASE_URL=postgres://localhost:5432/test pnpm migrate
- name: Run health check
run: MOCK_HEALTHCHECK=true NANGO_SECRET_KEY=noop JWT_SECRET=NOOP npx tsx ./bin/openint.ts health
- name: Start dev server in background
run: |
pnpm run web --port 4000 &
pnpm wait-on tcp:4000
- name: Start inngest dev server in background
run: |
npx inngest-cli@latest dev &
pnpm wait-on tcp:8288
- name: Run tests
run: ./bin/shdotenv -e ./apps/web/.env.local pnpm run test::ci
- name: Send Slack notification for job status
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took,pullRequest # selectable (default: repo,message)
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLATIFY_SLACK_WEBHOOK_URL }} # required
if: ${{ env.SLACK_WEBHOOK_URL != '' && always() }} # Pick up events even if the job fails or is canceled.