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 opportunitiesfiltering
: Path-based triggering and dependency-aware change detectionparallelism
: Job dependency optimization and concurrency improvementsall
: 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
withgo.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
andpaths-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
Flag | Description | Default |
---|---|---|
--category | Optimization category (caching , filtering , parallelism , all ) | all |
--repo | Repository in owner/repo format | Auto-detected from git |
--workflow | Specific workflow file to analyze | All workflows |
--format | Output format (text , json ) | text |
--dry-run | Show proposed changes without modifying files | false |
--verbose | Show detailed analysis output | false |
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