Savvi Studio

CLI Command Examples

Purpose: Common CLI command patterns and workflows
Last Updated: 2024-11-28

Basic Commands

Generate All Schemas

pnpm db:codegen

Generate Specific Schema

pnpm db:codegen --schema graph
pnpm db:codegen --schema auth
pnpm db:codegen --schema studio

Generate Multiple Schemas

pnpm db:codegen --schema graph --schema auth

Verbose Output

pnpm db:codegen --verbose

Development Workflow

Standard Development Flow

# Edit SQL files
vim db/300_graph.sql

# Apply to database
pnpm db:reset  # or pnpm db:migrate

# Regenerate code
pnpm db:codegen

# Start dev server
pnpm dev

Debug Workflow

# Step 1: Verbose output
pnpm db:codegen --verbose

# Step 2: Check what queries are run
pnpm db:codegen --verbose 2>&1 | grep "SELECT"

# Step 3: Check what files are written
pnpm db:codegen --verbose 2>&1 | grep "Writing"

# Step 4: Force regeneration if needed
pnpm db:codegen --force

Optimization Workflow

# Fast iteration on single schema
pnpm db:codegen --schema graph

# Use caching for large schemas
pnpm db:codegen --cache

# Parallel generation for multiple schemas
pnpm db:codegen --parallel

CI/CD Integration

Basic CI Pipeline

# Setup database
pnpm db:reset

# Generate code
pnpm db:codegen

# Verify it matches repository
pnpm db:codegen --check

# Run tests
pnpm test

Full CI Example (GitHub Actions)

steps:
  - name: Setup database
    run: pnpm db:reset

  - name: Generate code
    run: pnpm db:codegen

  - name: Verify generated code
    run: pnpm db:codegen --check

  - name: Type check
    run: pnpm tsc --noEmit

  - name: Run tests
    run: pnpm test

GitLab CI Example

codegen:
  script:
    - pnpm db:reset
    - pnpm db:codegen
    - pnpm db:codegen --check

Git Hooks

Pre-commit Hook

# Check if SQL files changed
git diff --cached --name-only | grep -q '^db/' && pnpm db:codegen

# Alternative: Always check
pnpm db:codegen --check || pnpm db:codegen

Husky Integration

# .husky/pre-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

# Check if SQL files changed
if git diff --cached --name-only | grep -q '^db/'; then
  echo "Regenerating database types..."
  pnpm db:codegen
  
  # Add generated files to commit
  git add src/__generated__
fi

Docker Integration

Dockerfile

# Generate types during build
RUN pnpm db:codegen

Docker Compose

services:
  app:
    command: sh -c "pnpm db:reset && pnpm db:codegen && pnpm dev"

Package.json Scripts

Basic Scripts

{
  "scripts": {
    "db:codegen": "tsx src/lib/codegen/cli.ts",
    "db:codegen:check": "tsx src/lib/codegen/cli.ts --check",
    "db:codegen:graph": "tsx src/lib/codegen/cli.ts --schema graph",
    "postdb:reset": "pnpm db:codegen",
    "postdb:migrate": "pnpm db:codegen"
  }
}

Advanced Scripts

{
  "scripts": {
    "db:codegen": "tsx src/lib/codegen/cli.ts",
    "db:codegen:watch": "nodemon --watch db --ext sql --exec pnpm db:codegen",
    "db:codegen:verify": "pnpm db:codegen --check || (pnpm db:codegen && exit 1)",
    "precommit": "git diff --cached --name-only | grep -q '^db/' && pnpm db:codegen || true"
  }
}

Watch Mode

Using Nodemon

# Watch SQL files and regenerate
nodemon --watch db --ext sql --exec "pnpm db:codegen"

Custom Watch Script

#!/bin/bash
# watch-codegen.sh

while true; do
  inotifywait -e modify -r db/
  echo "SQL files changed, regenerating..."
  pnpm db:codegen
done

Environment-Specific Commands

Development

# Fast iteration
pnpm db:codegen --schema graph

# Full generation
pnpm db:codegen

Testing

# Generate for test database
NODE_ENV=test pnpm db:codegen

Production Build

# Ensure clean generation
rm -rf src/__generated__
pnpm db:codegen --force

CI/CD

# Non-interactive, fail-fast
pnpm db:codegen --check || (pnpm db:codegen && exit 1)

Troubleshooting Commands

Check Database Connection

# Check available schemas
pnpm db:codegen --verbose | grep "Loading schema"

# Verify schema exists in database
psql -d savvi_dev -c "\dn"

Check Generated Files

# List generated files
find src/__generated__ -name "*.ts"

# Check specific schema
ls -la src/__generated__/graph/

Force Clean Regeneration

# Remove all generated files
rm -rf src/__generated__

# Regenerate from scratch
pnpm db:codegen

Debug with Verbose Output

# See all introspection queries
pnpm db:codegen --schema graph --verbose 2>&1 | tee codegen.log

# Filter for specific info
pnpm db:codegen --verbose 2>&1 | grep -A5 "Error"

Performance Optimization

Selective Schema Generation

# Only generate changed schema
pnpm db:codegen --schema graph

# Multiple specific schemas
pnpm db:codegen --schema graph --schema auth

Parallel Processing

# Generate schemas in parallel
pnpm db:codegen --parallel

# Combine with caching
pnpm db:codegen --parallel --cache

Cache Management

# Enable caching
pnpm db:codegen --cache

# Clear cache and regenerate
pnpm db:codegen --force --no-cache

These examples show common CLI patterns for various development scenarios.