From 6fe039e0eef3292c869fd862d8f5542d3f91df4c Mon Sep 17 00:00:00 2001 From: tduhamel42 Date: Wed, 22 Oct 2025 16:56:51 +0200 Subject: [PATCH] fix: resolve linter errors and optimize CI worker builds - Remove unused Literal import from backend findings model - Remove unnecessary f-string prefixes in CLI findings command - Optimize GitHub Actions to build only modified workers - Detect specific worker changes (python, secrets, rust, android, ossfuzz) - Build only changed workers instead of all 5 - Build all workers if docker-compose.yml changes - Significantly reduces CI build time --- .github/workflows/test.yml | 65 ++++++++++++++++------ backend/src/models/findings.py | 2 +- cli/src/fuzzforge_cli/commands/findings.py | 8 +-- 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c39c208..9f79b46 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,7 @@ jobs: with: fetch-depth: 0 # Fetch all history for proper diff - - name: Check if workers were modified + - name: Check which workers were modified id: check-workers run: | if [ "${{ github.event_name }}" == "pull_request" ]; then @@ -34,22 +34,54 @@ jobs: CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD) echo "Changed files:" echo "$CHANGED_FILES" - - if echo "$CHANGED_FILES" | grep -q "^workers/\|^docker-compose.yml"; then - echo "workers_modified=true" >> $GITHUB_OUTPUT - echo "✅ Workers or docker-compose.yml modified - will build" - else - echo "workers_modified=false" >> $GITHUB_OUTPUT - echo "⏭️ No worker changes detected - skipping build" - fi else # For direct pushes, check last commit CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD) - if echo "$CHANGED_FILES" | grep -q "^workers/\|^docker-compose.yml"; then - echo "workers_modified=true" >> $GITHUB_OUTPUT - else - echo "workers_modified=false" >> $GITHUB_OUTPUT - fi + 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 @@ -59,8 +91,9 @@ jobs: - name: Build worker images if: steps.check-workers.outputs.workers_modified == 'true' run: | - echo "Building worker Docker images..." - docker compose build worker-python worker-secrets worker-rust worker-android worker-ossfuzz --no-cache + 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: diff --git a/backend/src/models/findings.py b/backend/src/models/findings.py index 639f506..b71a9b6 100644 --- a/backend/src/models/findings.py +++ b/backend/src/models/findings.py @@ -14,7 +14,7 @@ Models for workflow findings and submissions # Additional attribution and requirements are provided in the NOTICE file. from pydantic import BaseModel, Field -from typing import Dict, Any, Optional, Literal, List +from typing import Dict, Any, Optional, List from datetime import datetime diff --git a/cli/src/fuzzforge_cli/commands/findings.py b/cli/src/fuzzforge_cli/commands/findings.py index 6335db1..7058527 100644 --- a/cli/src/fuzzforge_cli/commands/findings.py +++ b/cli/src/fuzzforge_cli/commands/findings.py @@ -253,15 +253,15 @@ def display_finding_detail(finding: Dict[str, Any], tool: Dict[str, Any], run_id content_lines.append(f"[bold]Tool:[/bold] {tool.get('name', 'Unknown')} v{tool.get('version', 'unknown')}") content_lines.append(f"[bold]Run ID:[/bold] {run_id}") content_lines.append("") - content_lines.append(f"[bold]Summary:[/bold]") + content_lines.append("[bold]Summary:[/bold]") content_lines.append(message_text) content_lines.append("") - content_lines.append(f"[bold]Description:[/bold]") + content_lines.append("[bold]Description:[/bold]") content_lines.append(message_markdown) if code_snippet: content_lines.append("") - content_lines.append(f"[bold]Code Snippet:[/bold]") + content_lines.append("[bold]Code Snippet:[/bold]") content_lines.append(f"[dim]{code_snippet}[/dim]") content = "\n".join(content_lines) @@ -270,7 +270,7 @@ def display_finding_detail(finding: Dict[str, Any], tool: Dict[str, Any], run_id console.print() console.print(Panel( content, - title=f"🔍 Finding Detail", + title="🔍 Finding Detail", border_style=severity_color, box=box.ROUNDED, padding=(1, 2)