Files
gridpilot.gg/plans/ci-optimization.md
Marc Mintel 5612df2e33
Some checks failed
CI / lint-typecheck (pull_request) Failing after 4m51s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
ci setup
2026-01-22 19:04:25 +01:00

101 lines
2.8 KiB
Markdown

# CI/CD & Dev Experience Optimization Plan
## Current Situation
- **Husky `pre-commit`**: Runs `npm test` (Vitest) on every commit. This likely runs the entire test suite, which is slow and frustrating for developers.
- **Gitea Actions**: Currently only has `contract-testing.yml`.
- **Missing**: No automated linting or type-checking in CI, no tiered testing strategy.
## Proposed Strategy: The "Fast Feedback Loop"
We will implement a tiered approach to balance speed and safety.
### 1. Local Development (Husky + lint-staged)
**Goal**: Prevent obvious errors from entering the repo without slowing down the dev.
- **Trigger**: `pre-commit`
- **Action**: Only run on **staged files**.
- **Tasks**:
- `eslint --fix`
- `prettier --write`
- `vitest related` (only run tests related to changed files)
### 2. Pull Request (Gitea Actions)
**Goal**: Ensure the branch is stable and doesn't break the build or other modules.
- **Trigger**: PR creation and updates.
- **Tasks**:
- Full `lint`
- Full `typecheck` (crucial for monorepo integrity)
- Full `unit tests`
- `integration tests`
- `contract tests`
### 3. Merge to Main / Release (Gitea Actions)
**Goal**: Final verification before deployment.
- **Trigger**: Push to `main` or `develop`.
- **Tasks**:
- Everything from PR stage.
- `e2e tests` (Playwright) - these are the slowest and most expensive.
---
## Implementation Steps
### Step 1: Install and Configure `lint-staged`
We need to add `lint-staged` to [`package.json`](package.json) and update the Husky hook.
### Step 2: Optimize Husky Hook
Update [`.husky/pre-commit`](.husky/pre-commit) to run `npx lint-staged` instead of `npm test`.
### Step 3: Create Comprehensive CI Workflow
Create `.github/workflows/ci.yml` (Gitea Actions compatible) to handle the heavy lifting.
---
## Workflow Diagram
```mermaid
graph TD
A[Developer Commits] --> B{Husky pre-commit}
B -->|lint-staged| C[Lint/Format Changed Files]
C --> D[Run Related Tests]
D --> E[Commit Success]
E --> F[Push to PR]
F --> G{Gitea CI PR Job}
G --> H[Full Lint & Typecheck]
G --> I[Full Unit & Integration Tests]
G --> J[Contract Tests]
J --> K{Merge to Main}
K --> L{Gitea CI Main Job}
L --> M[All PR Checks]
L --> N[Full E2E Tests]
N --> O[Deploy/Release]
```
## Proposed `lint-staged` Configuration
```json
{
"*.{js,ts,tsx}": ["eslint --fix", "vitest related --run"],
"*.{json,md,yml}": ["prettier --write"]
}
```
---
## Questions for the User
1. Do you want to include `typecheck` in the `pre-commit` hook? (Note: `tsc` doesn't support linting only changed files easily, so it usually checks the whole project, which might be slow).
2. Should we run `integration tests` on every PR, or only on merge to `main`?
3. Are there specific directories that should be excluded from this automated flow?