Skip to content

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.