Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
3e949b2
ci: add worker validation and Docker build checks
tduhamel42 Oct 22, 2025
f5554d0
Merge pull request #22 from FuzzingLabs/ci/worker-validation-and-dock…
tduhamel42 Oct 22, 2025
d683448
fix: add dev branch to test workflow triggers
tduhamel42 Oct 22, 2025
6e4241a
fix: properly detect worker file changes in CI
tduhamel42 Oct 22, 2025
9468a8b
feat: Add Python SAST workflow with three security analysis tools
tduhamel42 Oct 22, 2025
66e797a
fix: Remove unused imports to pass linter
tduhamel42 Oct 22, 2025
1c3c7a8
Merge pull request #23 from FuzzingLabs/feature/python-sast-workflow
tduhamel42 Oct 22, 2025
09951d6
fix: resolve live monitoring bug, remove deprecated parameters, and a…
tduhamel42 Oct 22, 2025
6ca5cf3
fix: resolve linter errors and optimize CI worker builds
tduhamel42 Oct 22, 2025
e180431
Merge pull request #24 from FuzzingLabs/fix/cleanup-and-bugs
tduhamel42 Oct 22, 2025
cfcbe91
feat: Add Android static analysis workflow with Jadx, OpenGrep, and M…
tduhamel42 Oct 23, 2025
1d3e033
fix(android): correct activity names and MobSF API key generation
tduhamel42 Oct 23, 2025
0801ca3
feat: add platform-aware worker architecture with ARM64 support
tduhamel42 Oct 23, 2025
b1a98db
fix: make MobSFScanner import conditional for ARM64 compatibility
tduhamel42 Oct 24, 2025
73dc264
docs: update CHANGELOG with Android workflow and ARM64 support
tduhamel42 Oct 24, 2025
1fd525f
fix: resolve linter errors in Android modules
tduhamel42 Oct 24, 2025
b0a0d59
ci: support multi-platform Dockerfiles in worker validation
tduhamel42 Oct 24, 2025
bd94d19
Merge pull request #28 from FuzzingLabs/feature/android-workflow-conv…
tduhamel42 Oct 24, 2025
f77c3ff
Feature/litellm proxy (#27)
Songbird99 Oct 26, 2025
97d8af4
fix: add default values to llm_analysis workflow parameters
Songbird99 Oct 27, 2025
8bf5e1b
refactor: replace .env.example with .env.template in documentation
Songbird99 Oct 27, 2025
9a7138f
feat(cli): add worker management commands with improved progress feed…
tduhamel42 Oct 29, 2025
d005521
fix: MobSF scanner now properly parses files dict structure
tduhamel42 Oct 30, 2025
1a835b9
chore: bump version to 0.7.3
tduhamel42 Oct 30, 2025
bdcedec
docs: fix broken documentation links in cli-reference
tduhamel42 Oct 30, 2025
e33c611
chore: add worker startup documentation and cleanup .gitignore
tduhamel42 Nov 4, 2025
7782e39
docs: update CHANGELOG with missing versions and recent changes
tduhamel42 Nov 4, 2025
321b9d5
chore: bump all package versions to 0.7.3 for consistency
tduhamel42 Nov 4, 2025
511a89c
Update GitHub link to fuzzforge_ai
tduhamel42 Nov 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
## Description

<!-- Provide a brief description of the changes in this PR -->

## Type of Change

<!-- Mark the appropriate option with an 'x' -->

- [ ] πŸ› Bug fix (non-breaking change which fixes an issue)
- [ ] ✨ New feature (non-breaking change which adds functionality)
- [ ] πŸ’₯ Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] πŸ“ Documentation update
- [ ] πŸ”§ Configuration change
- [ ] ♻️ Refactoring (no functional changes)
- [ ] 🎨 Style/formatting changes
- [ ] βœ… Test additions or updates

## Related Issues

<!-- Link to related issues using #issue_number -->
<!-- Example: Closes #123, Relates to #456 -->

## Changes Made

<!-- List the specific changes made in this PR -->

-
-
-

## Testing

<!-- Describe the tests you ran to verify your changes -->

### Tested Locally

- [ ] All tests pass (`pytest`, `uv build`, etc.)
- [ ] Linting passes (`ruff check`)
- [ ] Code builds successfully

### Worker Changes (if applicable)

- [ ] Docker images build successfully (`docker compose build`)
- [ ] Worker containers start correctly
- [ ] Tested with actual workflow execution

### Documentation

- [ ] Documentation updated (if needed)
- [ ] README updated (if needed)
- [ ] CHANGELOG.md updated (if user-facing changes)

## Pre-Merge Checklist

<!-- Ensure all items are completed before requesting review -->

- [ ] My code follows the project's coding standards
- [ ] I have performed a self-review of my code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published

### Worker-Specific Checks (if workers/ modified)

- [ ] All worker files properly tracked by git (not gitignored)
- [ ] Worker validation script passes (`.github/scripts/validate-workers.sh`)
- [ ] Docker images build without errors
- [ ] Worker configuration updated in `docker-compose.yml` (if needed)

## Screenshots (if applicable)

<!-- Add screenshots to help explain your changes -->

## Additional Notes

<!-- Any additional information that reviewers should know -->
127 changes: 127 additions & 0 deletions .github/scripts/validate-workers.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
#!/bin/bash
# Worker Validation Script
# Ensures all workers defined in docker-compose.yml exist in the repository
# and are properly tracked by git.

set -e

echo "πŸ” Validating worker completeness..."

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

ERRORS=0
WARNINGS=0

# Extract worker service names from docker-compose.yml
echo ""
echo "πŸ“‹ Checking workers defined in docker-compose.yml..."
WORKERS=$(grep -E "^\s+worker-" docker-compose.yml | grep -v "#" | cut -d: -f1 | tr -d ' ' | sort -u)

if [ -z "$WORKERS" ]; then
echo -e "${RED}❌ No workers found in docker-compose.yml${NC}"
exit 1
fi

echo "Found workers:"
for worker in $WORKERS; do
echo " - $worker"
done

# Check each worker
echo ""
echo "πŸ”Ž Validating worker files..."
for worker in $WORKERS; do
WORKER_DIR="workers/${worker#worker-}"

echo ""
echo "Checking $worker ($WORKER_DIR)..."

# Check if directory exists
if [ ! -d "$WORKER_DIR" ]; then
echo -e "${RED} ❌ Directory not found: $WORKER_DIR${NC}"
ERRORS=$((ERRORS + 1))
continue
fi

# Check Dockerfile (single file or multi-platform pattern)
if [ -f "$WORKER_DIR/Dockerfile" ]; then
# Single Dockerfile
if ! git ls-files --error-unmatch "$WORKER_DIR/Dockerfile" &> /dev/null; then
echo -e "${RED} ❌ File not tracked by git: $WORKER_DIR/Dockerfile${NC}"
echo -e "${YELLOW} Check .gitignore patterns!${NC}"
ERRORS=$((ERRORS + 1))
else
echo -e "${GREEN} βœ“ Dockerfile (tracked)${NC}"
fi
elif compgen -G "$WORKER_DIR/Dockerfile.*" > /dev/null; then
# Multi-platform Dockerfiles (e.g., Dockerfile.amd64, Dockerfile.arm64)
PLATFORM_DOCKERFILES=$(ls "$WORKER_DIR"/Dockerfile.* 2>/dev/null)
DOCKERFILE_FOUND=false
for dockerfile in $PLATFORM_DOCKERFILES; do
if git ls-files --error-unmatch "$dockerfile" &> /dev/null; then
echo -e "${GREEN} βœ“ $(basename "$dockerfile") (tracked)${NC}"
DOCKERFILE_FOUND=true
else
echo -e "${RED} ❌ File not tracked by git: $dockerfile${NC}"
ERRORS=$((ERRORS + 1))
fi
done
if [ "$DOCKERFILE_FOUND" = false ]; then
echo -e "${RED} ❌ No platform-specific Dockerfiles found${NC}"
ERRORS=$((ERRORS + 1))
fi
else
echo -e "${RED} ❌ Missing Dockerfile or Dockerfile.* files${NC}"
ERRORS=$((ERRORS + 1))
fi

# Check other required files
REQUIRED_FILES=("requirements.txt" "worker.py")
for file in "${REQUIRED_FILES[@]}"; do
FILE_PATH="$WORKER_DIR/$file"

if [ ! -f "$FILE_PATH" ]; then
echo -e "${RED} ❌ Missing file: $FILE_PATH${NC}"
ERRORS=$((ERRORS + 1))
else
# Check if file is tracked by git
if ! git ls-files --error-unmatch "$FILE_PATH" &> /dev/null; then
echo -e "${RED} ❌ File not tracked by git: $FILE_PATH${NC}"
echo -e "${YELLOW} Check .gitignore patterns!${NC}"
ERRORS=$((ERRORS + 1))
else
echo -e "${GREEN} βœ“ $file (tracked)${NC}"
fi
fi
done
done

# Check for any ignored worker files
echo ""
echo "🚫 Checking for gitignored worker files..."
IGNORED_FILES=$(git check-ignore workers/*/* 2>/dev/null || true)
if [ -n "$IGNORED_FILES" ]; then
echo -e "${YELLOW}⚠️ Warning: Some worker files are being ignored:${NC}"
echo "$IGNORED_FILES" | while read -r file; do
echo -e "${YELLOW} - $file${NC}"
done
WARNINGS=$((WARNINGS + 1))
fi

# Summary
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then
echo -e "${GREEN}βœ… All workers validated successfully!${NC}"
exit 0
elif [ $ERRORS -eq 0 ]; then
echo -e "${YELLOW}⚠️ Validation passed with $WARNINGS warning(s)${NC}"
exit 0
else
echo -e "${RED}❌ Validation failed with $ERRORS error(s) and $WARNINGS warning(s)${NC}"
exit 1
fi
99 changes: 96 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,100 @@ name: Tests

on:
push:
branches: [ main, master, develop, feature/** ]
branches: [ main, master, dev, develop, feature/** ]
pull_request:
branches: [ main, master, develop ]
branches: [ main, master, dev, develop ]

jobs:
validate-workers:
name: Validate Workers
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Run worker validation
run: |
chmod +x .github/scripts/validate-workers.sh
.github/scripts/validate-workers.sh

build-workers:
name: Build Worker Docker Images
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for proper diff

- name: Check which workers were modified
id: check-workers
run: |
if [ "${{ github.event_name }}" == "pull_request" ]; then
# For PRs, check changed files
CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)
echo "Changed files:"
echo "$CHANGED_FILES"
else
# For direct pushes, check last commit
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD)
fi

# Check if docker-compose.yml changed (build all workers)
if echo "$CHANGED_FILES" | grep -q "^docker-compose.yml"; then
echo "workers_to_build=worker-python worker-secrets worker-rust worker-android worker-ossfuzz" >> $GITHUB_OUTPUT
echo "workers_modified=true" >> $GITHUB_OUTPUT
echo "βœ… docker-compose.yml modified - building all workers"
exit 0
fi

# Detect which specific workers changed
WORKERS_TO_BUILD=""

if echo "$CHANGED_FILES" | grep -q "^workers/python/"; then
WORKERS_TO_BUILD="$WORKERS_TO_BUILD worker-python"
echo "βœ… Python worker modified"
fi

if echo "$CHANGED_FILES" | grep -q "^workers/secrets/"; then
WORKERS_TO_BUILD="$WORKERS_TO_BUILD worker-secrets"
echo "βœ… Secrets worker modified"
fi

if echo "$CHANGED_FILES" | grep -q "^workers/rust/"; then
WORKERS_TO_BUILD="$WORKERS_TO_BUILD worker-rust"
echo "βœ… Rust worker modified"
fi

if echo "$CHANGED_FILES" | grep -q "^workers/android/"; then
WORKERS_TO_BUILD="$WORKERS_TO_BUILD worker-android"
echo "βœ… Android worker modified"
fi

if echo "$CHANGED_FILES" | grep -q "^workers/ossfuzz/"; then
WORKERS_TO_BUILD="$WORKERS_TO_BUILD worker-ossfuzz"
echo "βœ… OSS-Fuzz worker modified"
fi

if [ -z "$WORKERS_TO_BUILD" ]; then
echo "workers_modified=false" >> $GITHUB_OUTPUT
echo "⏭️ No worker changes detected - skipping build"
else
echo "workers_to_build=$WORKERS_TO_BUILD" >> $GITHUB_OUTPUT
echo "workers_modified=true" >> $GITHUB_OUTPUT
echo "Building workers:$WORKERS_TO_BUILD"
fi

- name: Set up Docker Buildx
if: steps.check-workers.outputs.workers_modified == 'true'
uses: docker/setup-buildx-action@v3

- name: Build worker images
if: steps.check-workers.outputs.workers_modified == 'true'
run: |
WORKERS="${{ steps.check-workers.outputs.workers_to_build }}"
echo "Building worker Docker images: $WORKERS"
docker compose build $WORKERS --no-cache
continue-on-error: false

lint:
name: Lint
runs-on: ubuntu-latest
Expand Down Expand Up @@ -143,11 +232,15 @@ jobs:
test-summary:
name: Test Summary
runs-on: ubuntu-latest
needs: [lint, unit-tests]
needs: [validate-workers, lint, unit-tests]
if: always()
steps:
- name: Check test results
run: |
if [ "${{ needs.validate-workers.result }}" != "success" ]; then
echo "Worker validation failed"
exit 1
fi
if [ "${{ needs.unit-tests.result }}" != "success" ]; then
echo "Unit tests failed"
exit 1
Expand Down
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,10 @@ logs/
# Docker volume configs (keep .env.example but ignore actual .env)
volumes/env/.env

# Vendored proxy sources (kept locally for reference)
ai/proxy/bifrost/
ai/proxy/litellm/

# Test project databases and configurations
test_projects/*/.fuzzforge/
test_projects/*/findings.db*
Expand Down Expand Up @@ -304,4 +308,8 @@ test_projects/*/.npmrc
test_projects/*/.git-credentials
test_projects/*/credentials.*
test_projects/*/api_keys.*
test_projects/*/ci-*.sh
test_projects/*/ci-*.sh

# -------------------- Internal Documentation --------------------
# Weekly summaries and temporary project documentation
WEEK_SUMMARY*.md
Loading