bandit-runner/docs/setup-audit-report.md
nicholai 1b95e75310
Some checks are pending
CI / build-test (push) Waiting to run
initialized repository
2025-10-09 01:39:24 -06:00

391 lines
11 KiB
Markdown

# Repository Setup Audit Report
**Project:** Bandit Runner
**Date:** October 9, 2025
**Auditor:** AI Assistant (using Gitea + Context7 Documentation)
---
## Executive Summary
Your repository follows most best practices for modern software development with **Conventional Commits**, proper **Gitea Actions workflows**, and good documentation. However, several critical issues were identified and **have been fixed** during this audit.
---
## ✅ What You're Doing Right
### 1. **Conventional Commits Implementation**
- ✅ Branch naming strategy follows conventions (`feat/`, `fix/`, etc.)
- ✅ PR title linting enforces Conventional Commits format
- ✅ Clear type definitions (feat, fix, docs, chore, refactor, test)
- ✅ Conventional Commits badge added to README
**Reference:** [Conventional Commits Specification](https://conventionalcommits.org/)
### 2. **Issue & PR Templates**
- ✅ Bug report template with proper structure
- ✅ Feature request template with acceptance criteria
- ✅ Enhancement template for improvements
- ✅ Pull request template with comprehensive checklist
- ✅ All templates use proper labels
### 3. **Documentation**
- ✅ Comprehensive README with badges, installation, and architecture
- ✅ GPLv3 License properly included (`COPYING.txt`)
- ✅ Project logo and branding
- ✅ Clear contact information and acknowledgments
- ✅ CONTRIBUTING.md with branch strategy (now enhanced)
### 4. **`.gitignore` Configuration**
- ✅ Comprehensive Node.js patterns
- ✅ Cloudflare/Wrangler-specific ignores
- ✅ OpenNext build artifacts excluded
- ✅ Proper lockfile hygiene (commits pnpm, ignores npm/yarn)
- ✅ Test and coverage artifacts ignored
### 5. **Tech Stack**
- ✅ Next.js 15.4.6 (latest stable)
- ✅ React 19.1.0
- ✅ TypeScript with proper configuration
- ✅ pnpm as package manager
- ✅ ESLint for code quality
- ✅ Cloudflare Workers deployment target
---
## ⚠️ Issues Found & Fixed
### 1. **CI Workflow Configuration** ✅ FIXED
**File:** `.gitea/workflows/ci.yml`
#### Issues:
- ❌ Working directory not specified (runs from repo root instead of `bandit-runner-app/`)
- ❌ Incorrect script name: `pnpm eslint .` → should be `pnpm lint`
- ❌ Missing test script (workflow expects `pnpm test` which doesn't exist)
- ❌ Redundant pnpm setup (both cache and action-setup)
- ❌ TypeScript typecheck command not wrapped properly
#### Fixes Applied:
```yaml
# Added working directory
defaults:
run:
working-directory: ./bandit-runner-app
# Fixed script names
- run: pnpm lint # was: pnpm eslint . --max-warnings=0
- run: npx tsc --noEmit # was: pnpm tsc -p tsconfig.json --noEmit
# Removed test step (can be added when tests are implemented)
# Fixed pnpm setup order (pnpm action first, then Node with cache)
```
**Best Practice Reference:**
- [GitHub Actions Starter Workflows](https://github.com/actions/starter-workflows)
- Working directory: Essential for monorepo/subdirectory structures
### 2. **Missing `.env.example`** ✅ FIXED
**Issue:**
- README references `cp .env.example .env.local` (line 140)
- File didn't exist, breaking onboarding flow
**Fix Applied:**
Created comprehensive `.env.example` with:
- OpenAI API key placeholder
- Cloudflare account/token configuration
- Optional LLM endpoints
- Bandit SSH settings
- Development-specific variables
- Clear comments and sections
**Best Practice:** Always provide `.env.example` for environment variable documentation.
### 3. **Incomplete CONTRIBUTING.md** ✅ FIXED
**Issue:**
- File ended abruptly mid-sentence ("Examples:")
- No actual examples provided
- Missing commit message format details
- No PR workflow instructions
**Fixes Applied:**
- ✅ Added complete branch naming examples
- ✅ Added Conventional Commits message format
- ✅ Included PR workflow steps
- ✅ Added code quality checklist
- ✅ Clear instructions for running linting and typechecking
### 4. **Package Manager Lockfile** ✅ FIXED
**Issue:**
- Project uses pnpm (per scripts and CI)
- Only `package-lock.json` (npm) existed
- `.gitignore` specifies pnpm-lock.yaml should be committed
- CI workflow expected `pnpm-lock.yaml`
**Fix Applied:**
- ✅ Generated `pnpm-lock.yaml` using `pnpm install --lockfile-only`
- ✅ Updated CI workflow to use correct lockfile path
**Action Required:** Delete `package-lock.json` from the repository:
```bash
cd bandit-runner-app
rm package-lock.json
git add -u
git commit -m "chore: remove npm lockfile, using pnpm"
```
### 5. **README Badge Enhancement** ✅ FIXED
**Addition:**
- ✅ Added Conventional Commits badge
- ✅ Fixed license badge text (was "MIT", now "GPLv3")
---
## 📋 Recommended Next Steps
### 1. **Add Testing Infrastructure** (HIGH PRIORITY)
Your CI workflow is ready for tests, but no test framework exists yet.
**Recommendations:**
```bash
cd bandit-runner-app
# Option A: Vitest (recommended for Next.js)
pnpm add -D vitest @vitejs/plugin-react @testing-library/react @testing-library/jest-dom
# Option B: Jest (traditional)
pnpm add -D jest @types/jest jest-environment-jsdom @testing-library/react @testing-library/jest-dom
```
Add to `package.json`:
```json
"scripts": {
"test": "vitest run",
"test:watch": "vitest"
}
```
Then re-enable in `.gitea/workflows/ci.yml`:
```yaml
- name: Unit tests
run: pnpm test
```
### 2. **Add Code Coverage** (MEDIUM PRIORITY)
```bash
pnpm add -D @vitest/coverage-v8
```
Add to CI workflow:
```yaml
- name: Coverage
run: pnpm test --coverage
- name: Upload coverage
uses: codecov/codecov-action@v3
with:
file: ./coverage/coverage-final.json
```
### 3. **Add Pre-commit Hooks** (RECOMMENDED)
Enforce quality before commits:
```bash
pnpm add -D husky lint-staged
# Initialize husky
pnpm exec husky init
```
Add to `package.json`:
```json
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix",
"prettier --write"
]
}
```
Create `.husky/pre-commit`:
```bash
#!/bin/sh
cd bandit-runner-app
pnpm lint-staged
```
### 4. **Add Commitlint** (RECOMMENDED)
Enforce Conventional Commits locally:
```bash
pnpm add -D @commitlint/cli @commitlint/config-conventional
```
Create `commitlint.config.js`:
```js
module.exports = { extends: ['@commitlint/config-conventional'] };
```
Add to `.husky/commit-msg`:
```bash
#!/bin/sh
cd bandit-runner-app
npx --no -- commitlint --edit $1
```
### 5. **Add Dependabot/Renovate** (OPTIONAL)
Automated dependency updates. For Gitea, configure Renovate:
Create `.gitea/renovate.json`:
```json
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:base"],
"schedule": ["before 5am on monday"],
"labels": ["dependencies"],
"packageRules": [
{
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
}
]
}
```
### 6. **Add Architecture Decision Records** (RECOMMENDED)
You reference `docs/ADR-001-architecture.md` in README (line 205) but it doesn't exist yet.
**Template:**
```bash
mkdir -p docs/adr
```
Create `docs/adr/001-cloudflare-workers-architecture.md`:
```markdown
# ADR-001: Cloudflare Workers Architecture
## Status
Accepted
## Context
Need to run Next.js app on edge with Durable Objects...
## Decision
Use OpenNext + Cloudflare Workers...
## Consequences
Positive: Fast edge execution, low latency...
Negative: Learning curve, debugging complexity...
```
### 7. **Add GitHub/Gitea Workflow Badges** (OPTIONAL)
Show CI status in README:
```markdown
[![CI Status](https://git.biohazardvfx.com/Nicholai/bandit-runner/badges/workflows/ci.yml/badge.svg)](https://git.biohazardvfx.com/Nicholai/bandit-runner/actions?workflow=ci.yml)
```
---
## 🔍 Compliance Checklist
Based on **Gitea Actions** and **Conventional Commits** best practices:
| Category | Item | Status |
|----------|------|--------|
| **Version Control** | `.gitignore` comprehensive | ✅ |
| | Proper lockfile (pnpm-lock.yaml) | ✅ |
| | License file present | ✅ |
| **CI/CD** | Workflow syntax valid | ✅ |
| | Working directory specified | ✅ |
| | Dependency caching enabled | ✅ |
| | Linting in CI | ✅ |
| | Type checking in CI | ✅ |
| | Tests in CI | ⚠️ (framework not set up) |
| **Documentation** | README complete | ✅ |
| | CONTRIBUTING.md complete | ✅ |
| | `.env.example` present | ✅ |
| | License properly declared | ✅ |
| **Code Quality** | Conventional Commits enforced | ✅ |
| | PR template present | ✅ |
| | Issue templates present | ✅ |
| | ESLint configured | ✅ |
| | TypeScript configured | ✅ |
| | Pre-commit hooks | ❌ (recommended) |
| **Dependencies** | Package manager consistent | ✅ |
| | Dependency updates automated | ❌ (optional) |
---
## 📚 Resources & References
### Official Documentation
- **Conventional Commits:** https://conventionalcommits.org/
- **Gitea Actions:** https://docs.gitea.com/usage/actions/overview
- **GitHub Actions (compatible):** https://docs.github.com/actions
- **pnpm:** https://pnpm.io/
- **Next.js:** https://nextjs.org/docs
- **OpenNext:** https://opennext.js.org/
- **Cloudflare Workers:** https://developers.cloudflare.com/workers/
### Tools Used in This Audit
- **Context7 MCP:** Retrieved best practices from Conventional Commits and GitHub Actions Starter Workflows
- **Gitea MCP:** (Available but not needed for this self-hosted instance)
- **Static Analysis:** File structure, workflow syntax, documentation completeness
---
## 🎯 Summary
Your repository setup is **solid and follows modern best practices**. The issues found were primarily **configuration mismatches** between the CI workflow expectations and actual project structure, which have all been fixed.
### Changes Made:
1. ✅ Fixed `.gitea/workflows/ci.yml` (working directory, script names, dependencies)
2. ✅ Created `.env.example` with comprehensive documentation
3. ✅ Enhanced `CONTRIBUTING.md` with complete workflow
4. ✅ Generated `pnpm-lock.yaml` for proper dependency locking
5. ✅ Added Conventional Commits badge to README
6. ✅ Fixed license badge text
### Immediate Action Required:
```bash
# Remove conflicting npm lockfile
rm bandit-runner-app/package-lock.json
# Stage all changes
git add .
# Commit with conventional format
git commit -m "chore: fix ci workflow, add env example, enhance contributing guide
- Fix CI workflow working directory and script names
- Add comprehensive .env.example file
- Complete CONTRIBUTING.md with examples and workflow
- Generate pnpm-lock.yaml for proper dependency locking
- Add Conventional Commits badge to README
- Remove npm lockfile in favor of pnpm"
```
### Next Sprint:
1. Add testing framework (Vitest recommended)
2. Set up pre-commit hooks (Husky + lint-staged)
3. Add commitlint for local commit validation
4. Create missing ADR documents
---
**Audit Complete**
All critical issues have been resolved. Your repository now follows Gitea and industry best practices.