Skip to main content
CharleOS uses GitHub Actions for continuous integration and Vercel for continuous deployment. This page explains the automated pipeline.

CI/CD Overview

GitHub Actions Workflows

CharleOS has several automated workflows:

CI Pipeline

Runs on every PR to main
  • Linting
  • Type checking
  • Unit tests
  • Build verification

E2E Tests

Runs on PRs (separate workflow)
  • Playwright E2E tests
  • Critical user flows
  • Browser compatibility

Dependabot

Automatic dependency updates
  • Security patches
  • Minor version bumps
  • Auto-merge for tests

Release

Automated changelog and versioning
  • Conventional commits
  • Semantic versioning
  • GitHub releases

CI Workflow (.github/workflows/ci.yml)

Workflow Configuration

Lint Job

What it checks:
  • Code style (Prettier)
  • ESLint rules
  • Import order
  • Unused variables

Type Check Job

What it checks:
  • TypeScript compilation errors
  • Type mismatches
  • Missing type definitions

Unit Tests Job

What it tests:
  • Business logic
  • Utility functions
  • Billing calculations
  • Date/time utilities

Build Job

What it checks:
  • Next.js builds successfully
  • No build errors
  • TypeScript compiles in build mode

Security Audit

What it checks:
  • Known vulnerabilities in dependencies
  • Security advisories
  • High/critical severity issues

E2E Workflow (.github/workflows/e2e.yml)

What it tests:
  • Authentication flows
  • Critical user journeys
  • Task/quote workflows
  • Client portal functionality

Dependabot Configuration

Automatic dependency updates:
Auto-merge workflow:

Branch Protection Rules

main branch is protected with: Required checks:
  • ✅ Lint
  • ✅ Type check
  • ✅ Unit tests
  • ✅ Build
  • ✅ E2E tests
Additional rules:
  • Require PR review (1 approval)
  • Dismiss stale reviews on new push
  • Require linear history
  • No force push allowed

Continuous Deployment

Vercel Integration

Vercel automatically deploys: Production:
  • Trigger: Push to main
  • URL: https://charle.agency
  • Only after CI passes
Preview:
  • Trigger: Open/update PR
  • URL: https://charle-os-git-{branch}.vercel.app
  • Deploys even if CI fails (for testing)

Deployment Process

Release Workflow

Automated releases using Release Please:
How it works:
  1. Analyzes conventional commits since last release
  2. Generates changelog
  3. Bumps version in package.json
  4. Creates GitHub release
  5. Tags commit
Commit conventions:

Monitoring CI/CD

GitHub Actions Dashboard

View workflow runs: URL: https://github.com/charle/charle-os/actions Information:
  • All workflow runs
  • Duration and status
  • Logs for each step
  • Artifacts (coverage reports, test results)

Notifications

Failed CI sends notifications via:
  • GitHub UI
  • Email (to PR author)
  • Slack (optional integration)

Performance Optimization

Caching

Cache speeds up CI significantly: Dependencies:
Next.js build:
Playwright browsers:

Parallelization

Jobs run in parallel when possible:
Total time: ~3 minutes (vs. 5+ minutes sequentially)

Troubleshooting

CI Failing

Error: “Lint failed” Fix:
Error: “Type check failed” Fix:
Error: “Tests failed” Fix:

Dependabot PRs Not Auto-Merging

Cause: CI not passing or version is major bump Fix:
  1. Check CI logs
  2. Fix any test failures
  3. For major bumps, review manually

E2E Tests Flaky

Cause: Timing issues, race conditions Fix:
  1. Add explicit waits: await page.waitForSelector(...)
  2. Use waitForLoadState('networkidle')
  3. Increase timeouts for slow operations

Best Practices

Before pushing:
Use conventional commits:
Don’t ignore failed CI:
  • Fix failures immediately
  • Don’t merge with failing tests
  • Investigate flaky tests
Optimize for speed:
  • Use caching
  • Parallelize jobs
  • Only run necessary checks

Deployment Overview

Deployment process and strategy

Vercel

Vercel configuration

Testing

Testing strategy

GitHub Actions

Official GitHub Actions docs