Skip to content

ci: test release workflow with pnpm version consistency fix #13

ci: test release workflow with pnpm version consistency fix

ci: test release workflow with pnpm version consistency fix #13

Workflow file for this run

# 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