Skip to content

CI/CD

Both repositories use GitHub Actions for continuous integration. All checks must pass before merging to main.

Backend Pipeline

The backend CI runs on every push and pull request:

yaml
# Simplified workflow
jobs:
  test:
    steps:
      - Setup Ruby 3.4, PostgreSQL
      - bundle install
      - bin/rubocop          # Code style
      - bin/brakeman         # Security scan
      - bin/bundler-audit    # Dependency vulnerabilities
      - bundle exec rspec    # Test suite
      - Check coverage       # SimpleCov, 80% minimum

Checks

CheckToolThreshold
Code styleRuboCopZero offenses
SecurityBrakemanZero warnings
DependenciesBundler AuditNo known CVEs
TestsRSpecAll passing
CoverageSimpleCov80% minimum

TIP

The backend currently has 674 specs with 99% coverage, well above the 80% minimum.

Mobile Pipeline

The mobile CI runs on every push and pull request:

yaml
# Simplified workflow
jobs:
  test:
    steps:
      - Setup Node.js 20
      - npm install
      - npx tsc --noEmit     # TypeScript check
      - npm test              # Jest test suite
      - Check coverage        # 30% minimum

Checks

CheckToolThreshold
Type safetyTypeScript compilerZero errors
TestsJestAll passing
CoverageJest coverage30% minimum

The mobile coverage threshold is lower than the backend because UI components are harder to unit test and much of the app's correctness comes from TypeScript type checking.

Deployment

Deployment is not yet automated in CI. Current process:

  • Backend: Manual deploy to production server
  • Mobile: EAS Build + EAS Submit for App Store / Play Store releases

Branch Strategy

  • main is the production branch
  • Feature branches are merged via pull request
  • CI must pass before merge
  • No force pushes to main

Internal documentation — not for public distribution