ci: test release workflow with pnpm version consistency fix #9
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Build and Test Workflow | |
# | |
# Purpose: Comprehensive build, lint, typecheck, and test pipeline for pull requests | |
# targeting the main branch. Ensures code quality and catches issues early. | |
# | |
# Triggers: | |
# - Pull requests to main branch (opened, synchronized, or reopened) | |
# | |
# Features: | |
# - Builds all monorepo packages | |
# - Runs linting with Biome (via ultracite) | |
# - Performs TypeScript type checking | |
# - Executes test suite with Vitest | |
# - Generates bundle size analysis | |
# - Creates test environment variables | |
# - Skips when commit message contains 'ci skip' or 'skip ci' | |
name: Build | |
on: | |
pull_request: | |
branches: [main] | |
paths-ignore: | |
- '**/*.md' | |
- 'docs/**' | |
- '.github/*.md' | |
- '.github/ISSUE_TEMPLATE/**' | |
- '.github/PULL_REQUEST_TEMPLATE.md' | |
- 'LICENSE' | |
- 'CHANGELOG.md' | |
- 'README.md' | |
- '**/*.txt' | |
# Cancel in-progress runs when new commits are pushed to the same PR | |
concurrency: | |
group: build-pr-${{ github.event.pull_request.number }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
# Skip this workflow if commit message explicitly requests it | |
if: "!contains(github.event.head_commit.message, 'ci skip') && !contains(github.event.head_commit.message, 'skip ci')" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
# Fetch complete git history for proper versioning and changelog generation | |
- name: Prepare repository | |
run: git fetch --unshallow --tags | |
# Setup pnpm package manager with specific version for consistency | |
- uses: pnpm/action-setup@v4 | |
name: Install pnpm | |
with: | |
version: 10.11.0 | |
run_install: false | |
# Setup Node.js runtime | |
- name: Install Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
# Install all monorepo dependencies | |
- name: Install dependencies | |
run: pnpm install | |
# Create test environment variables for the main app | |
# These are dummy values used only for build/test purposes | |
- name: Create .env.local file | |
run: | | |
touch apps/app/.env.local | |
# Authentication (Clerk) | |
echo "CLERK_SECRET_KEY=sk_test_JA==" >> apps/app/.env.local | |
echo "CLERK_WEBHOOK_SECRET=whsec_test" >> apps/app/.env.local | |
# Email service (Resend) | |
echo "RESEND_FROM=test@test.com" >> apps/app/.env.local | |
echo "RESEND_TOKEN=re_test" >> apps/app/.env.local | |
# Database | |
echo "DATABASE_URL=postgresql://test:test@localhost:5432/test" >> apps/app/.env.local | |
# Payment processing (Stripe) | |
echo "STRIPE_SECRET_KEY=sk_test" >> apps/app/.env.local | |
echo "STRIPE_WEBHOOK_SECRET=whsec_test" >> apps/app/.env.local | |
# Monitoring and logging (BetterStack) | |
echo "BETTERSTACK_API_KEY=test" >> apps/app/.env.local | |
echo "BETTERSTACK_URL=https://test.com" >> apps/app/.env.local | |
# Feature flags | |
echo "FLAGS_SECRET=FcnUGt7tT-4cOw-D_1GoXAH1bU7ljDBr01F5w4dxrdQ" >> apps/app/.env.local | |
# Rate limiting (Arcjet) | |
echo "ARCJET_KEY=ajkey_test" >> apps/app/.env.local | |
# Webhook management (Svix) | |
echo "SVIX_TOKEN=testsk_test" >> apps/app/.env.local | |
# Real-time collaboration (Liveblocks) | |
echo "LIVEBLOCKS_SECRET=sk_test" >> apps/app/.env.local | |
# CMS (BaseHub) - uses real token from secrets | |
echo "BASEHUB_TOKEN=${{ secrets.BASEHUB_TOKEN }}" >> apps/app/.env.local | |
# Deployment | |
echo "VERCEL_PROJECT_PRODUCTION_URL=http://localhost:3002" >> apps/app/.env.local | |
# Notifications (Knock) | |
echo "KNOCK_API_KEY=test" >> apps/app/.env.local | |
echo "KNOCK_FEED_CHANNEL_ID=test" >> apps/app/.env.local | |
# Client-side environment variables (exposed to browser) | |
echo "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_JA==" >> apps/app/.env.local | |
echo "NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in" >> apps/app/.env.local | |
echo "NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up" >> apps/app/.env.local | |
echo "NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/" >> apps/app/.env.local | |
echo "NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/" >> apps/app/.env.local | |
# Analytics | |
echo "NEXT_PUBLIC_GA_MEASUREMENT_ID=G-test" >> apps/app/.env.local | |
echo "NEXT_PUBLIC_POSTHOG_KEY=phc_test" >> apps/app/.env.local | |
echo "NEXT_PUBLIC_POSTHOG_HOST=https://test.com" >> apps/app/.env.local | |
# App URLs for cross-app navigation | |
echo "NEXT_PUBLIC_APP_URL=http://localhost:3000" >> apps/app/.env.local | |
echo "NEXT_PUBLIC_WEB_URL=http://localhost:3001" >> apps/app/.env.local | |
echo "NEXT_PUBLIC_DOCS_URL=http://localhost:3004" >> apps/app/.env.local | |
# Share environment variables across all apps for consistency | |
- name: Copy .env.local file | |
run: | | |
cp apps/app/.env.local apps/web/.env.local | |
cp apps/app/.env.local apps/api/.env.local | |
# Database package needs its own .env file for Prisma | |
- name: Create specific Database .env file | |
run: | | |
touch packages/database/.env | |
echo "DATABASE_URL=postgresql://test:test@localhost:5432/test" >> packages/database/.env | |
# CMS package needs BaseHub token for content fetching | |
- name: Create specific CMS .env file | |
run: | | |
touch packages/cms/.env.local | |
echo "BASEHUB_TOKEN=${{ secrets.BASEHUB_TOKEN }}" >> packages/cms/.env.local | |
# Run Biome linter via ultracite for code quality | |
- name: Lint | |
run: pnpm lint | |
# Build all packages and generate bundle size analysis | |
- name: Build with bundle analysis | |
run: pnpm analyze | |
# Store bundle analysis reports for review | |
- name: Upload bundle analysis artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: bundle-analysis | |
path: apps/**/.next/analyze/*.html | |
# Ensure TypeScript types are valid across the monorepo | |
- name: Typecheck | |
run: pnpm typecheck | |
# Execute test suite with Vitest | |
- name: Test | |
run: pnpm test | |