CLI Commandsautoci optimize

optimize

Analyze CI workflows and suggest performance optimizations through intelligent caching, filtering, and parallelism improvements. Includes automatic file editing capabilities.

Usage

autoci optimize [workflow-file] [flags]

Categories

  • caching: Dependency and build artifact caching opportunities
  • filtering: Path-based triggering and dependency-aware change detection
  • parallelism: Job dependency optimization and concurrency improvements
  • all: All optimization categories (default)

Examples

Analyze All Workflows (Dry Run)

# Show optimization suggestions without modifying files
autoci optimize --category all --dry-run
 
# Focus on specific category
autoci optimize --category caching --dry-run

Apply Optimizations to Files

# Apply caching optimizations to workflow files
autoci optimize --category caching
 
# Apply filtering optimizations with dependency safety
autoci optimize --category filtering
 
# Apply all optimization categories
autoci optimize

Analyze Specific Workflow

# Target a specific workflow file
autoci optimize .github/workflows/ci.yml --dry-run
 
# With repository specification
autoci optimize --repo owner/repo --workflow .github/workflows/test.yml

Output Formats

# JSON output for automation
autoci optimize --format json --category caching
 
# Verbose output with detailed analysis
autoci optimize --verbose --category filtering

Optimization Categories

Caching

Identifies opportunities to cache dependencies, build artifacts, and tools:

  • Go module caching: GOMODCACHE with go.mod/go.sum keys
  • Build artifact caching: GOCACHE for faster compilation
  • Tool caching: golangci-lint, test binaries, Docker layers
  • Test result caching: Skip redundant test execution
autoci optimize --category caching --dry-run

Example Output:

🔧 Caching Optimizations (3):

1. Add Go module caching (.github/workflows/ci.yml)
   💡 Impact: Reduces dependency downloads from 2min to 10s

2. Enable build artifact caching (.github/workflows/test.yml)  
   💡 Impact: 40-60% reduction in compilation time

3. Cache golangci-lint binary (.github/workflows/lint.yml)
   💡 Impact: Save 30-45s per linting job

Filtering

Implements intelligent path-based workflow triggering with dependency awareness:

  • Workflow-level path filters: paths and paths-ignore configurations
  • Job-level conditional execution: Uses dorny/paths-filter for fine-grained control
  • Dependency chain preservation: Maintains job dependencies with safe if conditions
  • Monorepo optimization: Component-specific filtering strategies
autoci optimize --category filtering

Example Output:

🔧 Filtering Optimizations (4):

1. Add path filters to database test jobs (.github/workflows/test.yml)
   💡 Impact: 70% reduction in unnecessary database tests
   ✏️ Writing optimized file...
   ✅ Updated .github/workflows/test.yml

2. Optimize CodeQL analysis triggers (.github/workflows/security.yml)
   💡 Impact: Skip security scans for documentation changes
   ✅ Updated .github/workflows/security.yml

Parallelism

Optimizes job execution for maximum concurrency and efficiency:

  • Job dependency analysis: Identifies opportunities for parallel execution
  • Matrix optimization: Dynamic strategies based on changes
  • Resource allocation: Right-sized runners for different job types
  • Concurrent testing: Parallel test execution strategies
autoci optimize --category parallelism --dry-run

Safety Features

Dependency Preservation

AutoCI maintains critical job dependencies when applying filtering optimizations:

# Safe filtering - preserves job chains
jobs:
  build:
    # Might be skipped with filtering
    
  test: 
    needs: build
    if: always() && (success() || failure()) && needs.build.result != 'skipped'
    # Only runs if build completed (not skipped)
    
  deploy:
    needs: [build, test]
    if: needs.build.result == 'success' && needs.test.result == 'success'
    # Only deploys on successful build AND test

Conservative Changes

  • Preserves required checks: Never skips security scans or compliance requirements
  • Maintains functionality: All job dependencies remain intact
  • Safe defaults: When uncertain, includes rather than excludes
  • Incremental optimization: Suggests gradual improvements over aggressive changes

File Editing

In non-dry-run mode, AutoCI automatically modifies workflow files:

# Apply optimizations directly to files
autoci optimize --category filtering
 
# Output:
# 🔍 Analysis completed!
# ✏️ Writing optimized file...
# ✅ Updated .github/workflows/ci.yml
# ✅ Updated .github/workflows/test.yml

What Gets Modified

  • Complete file replacement: Full workflow files are rewritten with optimizations
  • Dependency-safe changes: Job chains preserved with proper if conditions
  • Clear explanations: Comments added explaining new filtering/caching logic
  • Incremental commits: Commit the changes to review the modifications

Flags

FlagDescriptionDefault
--categoryOptimization category (caching, filtering, parallelism, all)all
--repoRepository in owner/repo formatAuto-detected from git
--workflowSpecific workflow file to analyzeAll workflows
--formatOutput format (text, json)text
--dry-runShow proposed changes without modifying filesfalse
--verboseShow detailed analysis outputfalse

Auto-Detection

The optimize command automatically detects:

  • Repository: From current git remote URL
  • Workflow files: All .yml/.yaml files in .github/workflows/
  • Action files: Custom actions in .github/actions/
  • Project type: Go-specific optimizations for Go projects

Integration

CI/CD Pipeline Optimization

Use optimize as part of your development workflow:

# Before committing workflow changes
autoci optimize --dry-run
 
# Apply recommended optimizations
autoci optimize --category caching
git add .github/workflows/
git commit -m "Optimize CI workflows for faster builds"

Continuous Optimization

Regular optimization checks:

# Weekly optimization review
autoci optimize --category all --verbose
 
# Focus on performance after adding new tests
autoci optimize --category parallelism

Output Examples

Dry Run Mode

Shows proposed changes without modification:

📊 Found 3 optimization suggestion(s)

🔧 Filtering Optimizations (2):

1. Add path filters to test matrix jobs (.github/workflows/ci.yml)
   The database tests run for all changes. Optimize by adding path-based triggers.
   💡 Impact: 60% reduction in unnecessary test execution

   📝 Proposed changes:
   - Before:
   test-postgres:
     runs-on: ubuntu-latest

   + After:  
   test-postgres:
     needs: [build, changes]
     if: ${{ needs.changes.outputs.postgres == 'true' }}
     runs-on: ubuntu-latest

Apply Mode

Modifies files directly:

📊 Analysis started (ID: abc-123-def)
🔗 Connected to real-time updates
✅ Analysis completed!

🔧 Filtering Optimizations (2):

1. Add path filters to test matrix jobs (.github/workflows/ci.yml)
   ✏️ Writing optimized file...
   ✅ Updated .github/workflows/ci.yml