2025-10-09 22:03:37 -06:00

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 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:

# 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:

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:

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")

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

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

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
    }
  ]
}

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:

[![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

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:

# 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.