CI/CD & Testing¶
What runs on every push: lint, type-check, unit tests, build, and (sometimes) deploy. CI is GitHub Actions in every app that has it. Per Integrations_Audit.md, all 37 active apps now have test frameworks configured with passing tests.
CI: GitHub Actions¶
What it is. YAML-defined workflows triggered by push, pull_request, workflow_dispatch, or schedule. Runners are Linux/macOS/Windows VMs hosted by GitHub.
Used in: ~20 apps (the apps with mature CI/CD).
Workflow filenames seen:
- ci.yml — lint + test on PRs.
- deploy.yml — SSH deploy to IONOS VPS on main push.
- lint.yml — ESLint / Prettier / Pint check.
- e2e.yml — Playwright tests (separate from unit).
Deploy pattern: appleboy/ssh-action → SSH to IONOS → git pull && docker-compose up -d --build. No Argo, no Spinnaker, no Terraform.
No GitLab CI, CircleCI, Jenkins, Drone, Buildkite in the portfolio.
Testing frameworks¶
Vitest¶
What it is. Vite-powered test runner. Jest-compatible API, much faster, native ESM. The portfolio's modern default.
Used in: Boomer_AI, ChoreAndMoreTracker, Ecom-Sales, EverythingBeer, GoGreen-AI-Concierge, GoGreen-Workflow-Hub, GoGreenPaperlessInitiative, GogreenSellerAI, MyPollingApp (alongside Jest), Realestate-all-docker (alongside Jest), SCO-Digital-Assistant, Salon-Digital-Assistant, SellMeACar, SellMeAPen_CLCD-1, SellMe_PRT, TimeSheetAI, plus tiny-governance-hub, akt-giving-garden, futurescape-design.
Jest¶
What it is. The pre-Vitest default for JS/TS. Older but battle-tested.
Used in: AI-Wordpress (PHP — wait, that's PHPUnit), FamilyChat, GoGreenSourcingAI, MyPollingApp, NaggingWifeAI, Realestate-all-docker, Recruiting_AI, Sales_AI_App, Tutor_AI.
Jest vs. Vitest in this portfolio. Older apps stay on Jest; new code defaults to Vitest. Both run side-by-side in some apps that haven't migrated.
Playwright¶
What it is. Modern E2E browser-test framework. Multi-browser (Chromium, WebKit, Firefox), auto-waits, video recording, parallel runs.
Used in: Ecom-Sales, GogreenSellerAI, MyPollingApp, TimeSheetAI, plus the Vite/TanStack apps (akt-giving-garden, chat-governance-hub, futurescape-design, tiny-governance-hub).
Also used as a tool, not just for tests: OpenSentinel uses Playwright headlessly for browser automation (scraping, monitoring).
Cypress (not used)¶
The Playwright competitor. Older apps used to use it; the portfolio standardized on Playwright.
pytest¶
What it is. Python's de-facto test runner.
Used in: Automotive-Repair-Diagnosis-AI, GoGreen-DOC-AI, GoGreen-SmartForms, PolyMarketAI.
PHPUnit¶
What it is. PHP's xUnit family.
Used in: AI-Wordpress_Business-Directory (155+ tests), Maximus, PRT, Voting_NewAndImproved.
Mocha¶
What it is. Older Node test runner.
Used in: OpenSentinel uses Bun's built-in test runner (not Mocha; the audit's [x] (Bun test) is the actual entry). akt-giving-garden also has Mocha alongside Vitest.
Bun test¶
What it is. Bun's built-in Jest-compatible test runner. Extremely fast.
Used in: OpenSentinel — 6,400+ tests according to the integration audit.
Linting & formatting¶
ESLint¶
Universal across TS/JS apps. Rule sets vary; many use @typescript-eslint/recommended + Next.js or framework presets.
Prettier¶
Code formatter. Most TS apps. Formatted on save / pre-commit.
Biome (not used)¶
Modern ESLint + Prettier replacement. Faster, single tool. The portfolio hasn't migrated.
TypeScript strict mode¶
Enabled in 22+ apps. strict: true in tsconfig.json — covers noImplicitAny, strictNullChecks, etc.
PHP Pint¶
Laravel's official PHP formatter. Used in Maximus, AI-Wordpress.
Ruff (not used)¶
Modern Python linter (Rust-based, very fast). The Python apps in the portfolio use ad-hoc flake8 / black setups instead — no app explicitly mentions Ruff.
Black, isort (implicit)¶
Standard Python formatting; not explicitly called out per app but assumed.
Pre-commit hooks¶
Husky + lint-staged is the universal Node pre-commit pattern. Most repos enforce ESLint + Prettier on staged files. Specific configs vary.
Coverage / reporting¶
Per Integrations_Audit.md: tests are passing across all 37 apps. No app explicitly publishes Codecov / Coveralls reports — coverage is checked locally / in CI but not surfaced as a badge.
Comparison alternatives (not used)¶
| Tool | Notes |
|---|---|
| GitLab CI | Same shape as GH Actions. The repos are on GitHub. |
| CircleCI / Travis CI | Older. GH Actions filled the role. |
| Jenkins / Drone / Woodpecker | Self-hosted CI. The portfolio doesn't run a CI server. |
| Argo CD / Flux | GitOps deploy. Not used — manual SSH deploy is the pattern. |
| Tekton / Buildah / Kaniko | K8s-native build/CI. Not used. |
| storybook + Chromatic | Component visual regression. Not used in any app. |
Decision guide¶
TypeScript app, fresh code? Vitest.
Existing Jest tests? Stay on Jest until you're touching them anyway.
End-to-end browser tests? Playwright.
Python tests? pytest.
PHP tests? PHPUnit.
Bun runtime? Bun test.
Need CI? GitHub Actions, deploy via SSH to IONOS.
"Should we add staging / blue-green?" Eventually, but compose-up-d works at this scale.