11 KiB
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
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 bepnpm lint - ❌ Missing test script (workflow expects
pnpm testwhich doesn't exist) - ❌ Redundant pnpm setup (both cache and action-setup)
- ❌ TypeScript typecheck command not wrapped properly
Fixes Applied:
# 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
- 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 .gitignorespecifies pnpm-lock.yaml should be committed- CI workflow expected
pnpm-lock.yaml
Fix Applied:
- ✅ Generated
pnpm-lock.yamlusingpnpm install --lockfile-only - ✅ Updated CI workflow to use correct lockfile path
Action Required: Delete package-lock.json from the repository:
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:
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:
"scripts": {
"test": "vitest run",
"test:watch": "vitest"
}
Then re-enable in .gitea/workflows/ci.yml:
- name: Unit tests
run: pnpm test
2. Add Code Coverage (MEDIUM PRIORITY)
pnpm add -D @vitest/coverage-v8
Add to CI workflow:
- 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:
pnpm add -D husky lint-staged
# Initialize husky
pnpm exec husky init
Add to package.json:
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix",
"prettier --write"
]
}
Create .husky/pre-commit:
#!/bin/sh
cd bandit-runner-app
pnpm lint-staged
4. Add Commitlint (RECOMMENDED)
Enforce Conventional Commits locally:
pnpm add -D @commitlint/cli @commitlint/config-conventional
Create commitlint.config.js:
module.exports = { extends: ['@commitlint/config-conventional'] };
Add to .husky/commit-msg:
#!/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:
{
"$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:
mkdir -p docs/adr
Create docs/adr/001-cloudflare-workers-architecture.md:
# 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:
[](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:
- ✅ Fixed
.gitea/workflows/ci.yml(working directory, script names, dependencies) - ✅ Created
.env.examplewith comprehensive documentation - ✅ Enhanced
CONTRIBUTING.mdwith complete workflow - ✅ Generated
pnpm-lock.yamlfor proper dependency locking - ✅ Added Conventional Commits badge to README
- ✅ Fixed license badge text
Immediate Action Required:
# 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:
- Add testing framework (Vitest recommended)
- Set up pre-commit hooks (Husky + lint-staged)
- Add commitlint for local commit validation
- Create missing ADR documents
Audit Complete ✅
All critical issues have been resolved. Your repository now follows Gitea and industry best practices.