forked from cleveragents/cleveragents-core
395df78b94
Complete Brent QA tasks Q1.5, 10B.4, 10C.1, and 10C.4 on the Q0-quality-automation branch. - Add edge_case_plan_scenarios.feature (26 scenarios) covering concurrent plan execution, resource conflicts, validation failure chains, and rollback edge cases - Add validation_test_fixtures.feature (34 scenarios) covering AST security, lambda validation, content sanitization, project model validation, change-list coercion, and ActionArgument parsing - Add branch protection rules documentation in docs/development/ci-cd.md - Establish quality metrics baseline (96% coverage, 0 lint/type/security findings) - Fix missing langchain-anthropic dependency in pyproject.toml - Fix Rich table column wrapping in plan_lifecycle_cli_steps.py by patching console width during tests Suite: 107 features, 1673 scenarios, 7777 steps — all passing.
225 lines
8.1 KiB
Markdown
225 lines
8.1 KiB
Markdown
# CI/CD Pipeline and Branch Protection
|
|
|
|
This document describes the CI/CD pipeline, branch protection rules, and merge
|
|
requirements for the CleverAgents project. For quality tooling details (pre-commit
|
|
hooks, nox sessions, security scanning), see
|
|
[Quality Automation Guide](quality-automation.md).
|
|
|
|
## Branch Protection Rules
|
|
|
|
### Protected Branch: `master`
|
|
|
|
The `master` branch is the primary integration branch. All changes must go through
|
|
pull requests with the following protections enforced.
|
|
|
|
#### Required Status Checks
|
|
|
|
Every pull request targeting `master` must pass **all** of the following CI jobs
|
|
before merging is allowed:
|
|
|
|
| CI Job | What It Checks | Failure Means |
|
|
|--------|---------------|---------------|
|
|
| `lint` | Ruff format and lint | Code style violations or lint errors |
|
|
| `typecheck` | Pyright strict type checking | Type errors in `src/` |
|
|
| `security` | Bandit (HIGH severity gate) + Vulture dead code | Security vulnerabilities or dead code |
|
|
| `quality` | Radon complexity (grade F gate) | Extremely complex methods (31+ cyclomatic complexity) |
|
|
| `behave` | BDD unit tests (Python 3.11, 3.12, 3.13 matrix) | Failing unit test scenarios |
|
|
| `coverage` | Test coverage measurement | Coverage dropped below 85% |
|
|
| `build` | Wheel build | Build failure |
|
|
|
|
**Deployment-gating jobs** (run after core checks pass):
|
|
|
|
| CI Job | Depends On | What It Checks |
|
|
|--------|-----------|----------------|
|
|
| `docker` | `lint`, `typecheck`, `behave`, `security` | Docker image builds and runs |
|
|
| `helm` | `lint`, `typecheck`, `behave`, `security` | Helm chart lints and templates |
|
|
|
|
#### Required Reviews
|
|
|
|
- **Minimum 1 approving review** required before merge.
|
|
- Reviews are selective (see [Review Priority Matrix](#review-priority-matrix) below).
|
|
- Stale reviews are dismissed when new commits are pushed.
|
|
- Code owners can be configured per directory if needed.
|
|
|
|
#### Additional Protections
|
|
|
|
- **No direct pushes** to `master`. All changes must come via pull request.
|
|
The `no-commit-to-branch` pre-commit hook enforces this locally.
|
|
- **No force pushes** to `master`. History must be preserved.
|
|
- **No deletions** of the `master` branch.
|
|
- **Require branches to be up-to-date** before merging (prevents merge skew).
|
|
|
|
### Setting Up Branch Protection in Forgejo
|
|
|
|
To configure these rules in Forgejo:
|
|
|
|
1. Navigate to **Repository Settings** > **Branches** > **Branch Protection**.
|
|
2. Add a rule for branch name pattern: `master`.
|
|
3. Enable the following settings:
|
|
|
|
```
|
|
[x] Enable branch protection
|
|
[x] Block push (no direct pushes)
|
|
[x] Block force push
|
|
[x] Block branch deletion
|
|
[x] Require pull request reviews before merging
|
|
- Required approvals: 1
|
|
- Dismiss stale reviews: Yes
|
|
[x] Require status checks to pass before merging
|
|
- Required checks:
|
|
- lint
|
|
- typecheck
|
|
- security
|
|
- quality
|
|
- behave
|
|
- coverage
|
|
- build
|
|
[x] Require branches to be up-to-date before merging
|
|
```
|
|
|
|
4. Save the branch protection rule.
|
|
|
|
## Review Process
|
|
|
|
### Review Priority Matrix
|
|
|
|
Not all code changes require the same level of review attention. Use this matrix
|
|
to determine review depth:
|
|
|
|
| Priority | Category | Review Depth | Examples |
|
|
|----------|----------|-------------|----------|
|
|
| **P0** | Architecture and Security | Deep review required | Service layer design, DB schema, API contracts, sandbox boundaries, authentication |
|
|
| **P1** | Complex Business Logic | Careful review | Decision tree traversal, merge conflict resolution, dependency closure, state machines |
|
|
| **P2** | Normal Features | Standard review | CLI commands, model definitions, straightforward service methods |
|
|
| **P3** | Tests, Docs, Refactoring | Trust automation | Behave scenarios, documentation updates, import reorganization, formatting |
|
|
|
|
### What Reviewers Should Focus On
|
|
|
|
**Always review** (P0 items):
|
|
|
|
- Service layer design choices and dependency injection patterns
|
|
- Database schema decisions and Alembic migrations
|
|
- API contract definitions and interface boundaries
|
|
- Sandbox security boundaries and isolation guarantees
|
|
- Input validation and sanitization logic
|
|
- Any code touching `eval()`, `exec()`, `compile()`, or `subprocess`
|
|
|
|
**Review carefully** (P1 items):
|
|
|
|
- Algorithm implementations (decision tree, merge, closure computation)
|
|
- State machine transitions and lifecycle management
|
|
- Error propagation across actor and plan boundaries
|
|
- Concurrent access patterns and thread safety
|
|
|
|
**Standard review** (P2 items):
|
|
|
|
- Verify tests exist for new functionality
|
|
- Check that argument validation follows `CONTRIBUTING.md` guidelines
|
|
- Confirm type annotations are complete (no bare `Any`)
|
|
|
|
**Trust automation** (P3 items):
|
|
|
|
- If `nox` passes (lint, typecheck, tests, coverage, security), formatting and
|
|
style are covered.
|
|
- Behave test scenarios and Robot integration tests follow established patterns.
|
|
- Documentation changes are verified by `nox -s docs` (MkDocs build).
|
|
|
|
### Review Checklist
|
|
|
|
Every PR should pass this checklist (also available in the
|
|
[PR template](../../.forgejo/pull_request_template.md)):
|
|
|
|
- [ ] Code follows `CONTRIBUTING.md` coding standards
|
|
- [ ] All public/protected methods have argument validation
|
|
- [ ] Static typing is complete (no bare `Any` unless justified)
|
|
- [ ] `nox -s typecheck` passes
|
|
- [ ] `nox -s lint` passes
|
|
- [ ] Unit tests written/updated (Behave scenarios in `features/`)
|
|
- [ ] Integration tests written/updated (Robot suites in `robot/`) if applicable
|
|
- [ ] Coverage remains above 85%
|
|
- [ ] No security issues introduced
|
|
- [ ] No dead code introduced
|
|
- [ ] Documentation updated if behavior changed
|
|
|
|
## CI Pipeline Reference
|
|
|
|
### Workflow Files
|
|
|
|
| Workflow | File | Trigger | Purpose |
|
|
|----------|------|---------|---------|
|
|
| CI | `.forgejo/workflows/ci.yml` | Push to `main`/`develop`, PRs to `main` | Full validation pipeline |
|
|
| Nightly Quality | `.forgejo/workflows/nightly-quality.yml` | Midnight UTC (cron), manual | Comprehensive quality monitoring |
|
|
|
|
### CI Job Dependency Graph
|
|
|
|
```
|
|
lint ──────────┐
|
|
typecheck ─────┤
|
|
├── coverage (needs lint + typecheck)
|
|
security ──────┤
|
|
├── docker (needs lint + typecheck + behave + security)
|
|
behave ────────┤
|
|
└── helm (needs lint + typecheck + behave + security)
|
|
quality ───────── (independent)
|
|
build ─────────── (independent)
|
|
```
|
|
|
|
### Quality Gates Summary
|
|
|
|
All gates must pass for a PR to be mergeable:
|
|
|
|
| Gate | Threshold | Enforced By |
|
|
|------|-----------|-------------|
|
|
| Formatting | Zero violations | `lint` job (ruff format) |
|
|
| Linting | Zero violations | `lint` job (ruff check) |
|
|
| Type Safety | Zero errors | `typecheck` job (pyright strict) |
|
|
| Security | Zero HIGH severity | `security` job (bandit) |
|
|
| Dead Code | Zero findings | `security` job (vulture) |
|
|
| Complexity | No grade-F methods | `quality` job (radon) |
|
|
| Unit Tests | All pass (3.11-3.13) | `behave` job |
|
|
| Coverage | >= 85% | `coverage` job |
|
|
| Build | Wheel builds | `build` job |
|
|
|
|
### Nightly Quality Monitoring
|
|
|
|
The nightly workflow provides trend data beyond PR-level checks:
|
|
|
|
- Full lint, type check, and security scan (all severities, not just HIGH)
|
|
- Complete Behave test suite with coverage measurement
|
|
- Complexity and maintainability index analysis
|
|
- Quality trend JSON with timestamps (90-day artifact retention)
|
|
|
|
Reports are uploaded as artifacts under `nightly-quality-reports` and can be
|
|
downloaded from the Forgejo Actions UI.
|
|
|
|
## Local Development Workflow
|
|
|
|
### Before Pushing a PR
|
|
|
|
```bash
|
|
# Quick validation (runs default nox sessions)
|
|
nox
|
|
|
|
# Or run individual checks
|
|
nox -s lint # Formatting and linting
|
|
nox -s typecheck # Type checking
|
|
nox -s unit_tests # Behave tests
|
|
nox -s coverage_report # Coverage (must be >85%)
|
|
nox -s security_scan # Security scanning
|
|
```
|
|
|
|
### Pre-commit Hooks
|
|
|
|
Pre-commit hooks run automatically on `git commit` and catch most issues before
|
|
they reach CI. See [Quality Automation Guide](quality-automation.md) for the
|
|
full list of hooks.
|
|
|
|
If hooks are not installed:
|
|
|
|
```bash
|
|
bash scripts/setup-dev.sh
|
|
# Or manually:
|
|
pre-commit install
|
|
pre-commit install --hook-type commit-msg
|
|
```
|