Skip to content

Neon database client migration #1109

Neon database client migration

Neon database client migration #1109

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
env:
NODE_OPTIONS: --max-old-space-size=4096
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
DATABASE_URL: postgres://postgres:[email protected]:5432/postgres
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Docker
uses: docker/setup-buildx-action@v3
- name: Start Docker services
run: docker compose up -d
- 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.