391 lines
11 KiB
Markdown
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
|
|
[](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.
|
|
|