GitHub Actions Workflows Reference
TL;DR: This project has 31 GitHub Actions workflows organized into 9 categories. The main CI pipeline is ci.yaml which orchestrates testing, building, and deployment.
Overview
This document provides a comprehensive reference for all GitHub Actions workflows in this project. Workflows are organized by category and include trigger conditions, dependencies, and purposes.Quick Reference
| Workflow | Trigger | Duration | Purpose |
|---|---|---|---|
| ci.yaml | push, PR | 12-35 min | MAIN - Tests, builds, deploys |
| quality-tests.yaml | push, PR, weekly | 15-25 min | Property, contract, regression tests |
| e2e-tests.yaml | push, PR, weekly | 20-30 min | End-to-end user journey tests |
| deployment-validation.yml | PR (deploy files) | 5-8 min | Helm, Kustomize, NetworkPolicy validation |
Workflow Categories
- Core CI/CD - Main build and deployment pipeline
- Quality & Testing - Advanced testing workflows
- Security & Compliance - Security scanning and compliance
- Deployment - Deployment and validation
- Documentation - Doc validation and link checking
- Monitoring & Observability - Metrics, alerts, health
- Maintenance & Automation - Automated maintenance tasks
- Infrastructure - Terraform, K8s validation
- Build & Hygiene - Build quality checks
Core CI/CD (1 workflow)
ci.yaml - Main CI/CD Pipeline
Location:.github/workflows/ci.yaml
Purpose: Main orchestrator for testing, building, and deploying the application
Triggers:
pushto main, develop branchespull_requestto any branchreleasepublishedworkflow_dispatch(manual)
- validate-workflows - Workflow YAML validation with actionlint
- validate-local-ci-parity - Local/CI parity validation
- xdist-enforcement - pytest-xdist isolation enforcement
- test - Unit tests (matrix: Python 3.10, 3.11, 3.12)
- coverage-merge - Merge coverage reports from matrix
- pre-commit - Pre-commit hooks enforcement
- push-stage-validators - Comprehensive pre-push validators
- docker-build - Build Docker images (matrix: base, full, test)
- docker-compose-smoke-test - Docker Compose validation (matrix: main, dev, test)
- docker-multiplatform - Multi-platform builds (matrix: amd64, arm64)
- docker-manifest - Multi-arch manifest creation
- deploy-dev - Development deployment (conditional on push to main)
- test → docker-build → deploy-dev
- coverage-merge depends on test
- docker-manifest depends on docker-multiplatform
- GitHub Actions cache for uv dependencies
- Docker layer caching for images
- Parallel matrix builds (3 Python versions)
- Parallel Docker image builds (3 variants)
- Parallel Docker Compose tests (3 configs)
- pytest-xdist for parallel test execution
- Matches pre-push hooks exactly (CI parity enforcement)
- Comprehensive validation before deployment
- Multi-platform Docker support (amd64, arm64)
- Automated development deployment on main branch
Quality & Testing (3 workflows)
quality-tests.yaml - Advanced Testing
Location:.github/workflows/quality-tests.yaml
Purpose: Run property-based, contract, regression, and mutation tests
Triggers:
pushto main, developpull_requestschedule- Weekly on Sundays at midnight UTCworkflow_dispatch(manual)
- pre-commit-validation - Pre-commit hook config validation
- property-tests - Hypothesis property-based tests (100 examples in CI)
- contract-tests - MCP protocol compliance tests
- regression-tests - Performance regression (matrix: 4 splits for parallelism)
- mutation-tests - Test effectiveness validation (weekly schedule only, too slow for PRs)
- benchmark-tests - Performance benchmarking with trend tracking
- quality-summary - Summary of all quality test results
e2e-tests.yaml - End-to-End Testing
Location:.github/workflows/e2e-tests.yaml
Purpose: Full user journey testing with isolated test infrastructure
Triggers:
pushto main, developpull_requestschedule- Weekly on Mondays at 2 AM UTCworkflow_dispatch(manual)
- e2e-tests - End-to-end tests with Docker Compose test environment
- PostgreSQL: 9432
- Redis: 9379/9380
- OpenFGA: 9080
- Keycloak: 9082
- Qdrant: 9333
optional-deps-test.yaml - Optional Dependency Testing
Location:.github/workflows/optional-deps-test.yaml
Purpose: Test with minimal vs full dependency sets
Triggers:
pushto mainpull_requestaffecting pyproject.tomlworkflow_dispatch(manual)
Security & Compliance (4 workflows)
security-scan.yaml - Security Scanning
Location:.github/workflows/security-scan.yaml
Purpose: Comprehensive security scanning with multiple tools
Triggers:
pushto main, developpull_requestschedule- Daily at 3 AM UTCworkflow_dispatch(manual)
- Trivy - Vulnerability scanning (containers, code, configs)
- Semgrep - Static application security testing (SAST)
- Dependency scanning - Check for vulnerable dependencies
- Gitleaks - Secret detection
security-validation.yml - Security Configuration Validation
Location:.github/workflows/security-validation.yml
Purpose: Validate security configurations
Triggers:
pull_requestaffecting security configs
- CORS configuration
- Authentication settings
- Authorization policies
gcp-compliance-scan.yaml - GCP Compliance
Location:.github/workflows/gcp-compliance-scan.yaml
Purpose: GCP best practices and compliance checking
Triggers:
pushaffecting GCP/K8s configsschedule- Weekly
gcp-drift-detection.yaml - GCP Drift Detection
Location:.github/workflows/gcp-drift-detection.yaml
Purpose: Detect configuration drift in GCP resources
Triggers:
schedule- Dailyworkflow_dispatch(manual)
Deployment (5 workflows)
deployment-validation.yml - Deployment Config Validation
Location:.github/workflows/deployment-validation.yml
Purpose: Validate Helm, Kustomize, and Kubernetes configurations
Triggers:
pull_requestaffecting deployment filespushto main affecting deployment files
- validate-helm - Helm chart validation (lint, templates, unit tests)
- validate-kustomize - Kustomize build validation (all overlays)
- validate-network-policies - NetworkPolicy port validation
- validate-service-accounts - ServiceAccount RBAC validation
deploy-staging-gke.yaml - Staging Deployment
Location:.github/workflows/deploy-staging-gke.yaml
Purpose: Deploy to GKE staging environment
Triggers:
pushto develop branchworkflow_dispatch(manual)
- GKE authentication with Workload Identity
- Helm deployment with staging values
- Smoke tests post-deployment
deploy-production-gke.yaml - Production Deployment
Location:.github/workflows/deploy-production-gke.yaml
Purpose: Deploy to GKE production environment
Triggers:
releasepublishedworkflow_dispatch(manual, with approval)
- Manual approval required
- GKE authentication
- Helm deployment with production values
- Comprehensive smoke tests
- Rollback on failure
validate-deployments.yaml - Deployment Validation
Location:.github/workflows/validate-deployments.yaml
Purpose: Validate all deployment configurations
Triggers:
pull_requestaffecting deployments/pushto main
validate-kubernetes.yaml - Kubernetes Validation
Location:.github/workflows/validate-kubernetes.yaml
Purpose: Validate Kubernetes manifests
Triggers:
pull_requestaffecting K8s filespushto main
Documentation (2 workflows)
docs-validation.yaml - Documentation Validation
Location:.github/workflows/docs-validation.yaml
Purpose: Validate Mintlify documentation
Triggers:
pull_requestaffecting docs/pushto main affecting docs/
- MDX syntax validation
- Frontmatter completeness
- Internal link checking
- Navigation consistency
- Image reference validation
link-checker.yaml - Link Validation
Location:.github/workflows/link-checker.yaml
Purpose: Check for broken links in documentation
Triggers:
schedule- Weekly on Sundaysworkflow_dispatch(manual)
Monitoring & Observability (3 workflows)
observability-alerts.yaml - Observability Alerting
Location:.github/workflows/observability-alerts.yaml
Purpose: Monitor and alert on observability metrics
Triggers:
schedule- Hourlyworkflow_dispatch(manual)
dora-metrics.yaml - DORA Metrics Tracking
Location:.github/workflows/dora-metrics.yaml
Purpose: Track DevOps Research and Assessment (DORA) metrics
Triggers:
pushto mainpull_requestmergeddeploymentcompleted
- Deployment frequency
- Lead time for changes
- Mean time to recovery (MTTR)
- Change failure rate
workflow-health-dashboard.yaml - Workflow Health
Location:.github/workflows/workflow-health-dashboard.yaml
Purpose: Monitor workflow success rates and durations
Triggers:
schedule- Dailyworkflow_dispatch(manual)
Maintenance & Automation (9 workflows)
dependabot-automerge.yaml - Auto-merge Dependabot PRs
Location:.github/workflows/dependabot-automerge.yaml
Purpose: Automatically merge Dependabot PRs after CI passes
Triggers:
pull_requestfrom Dependabot
- All CI checks pass
- Only patch and minor version bumps
- Not major version bumps (requires manual review)
stale.yaml - Stale Issue Management
Location:.github/workflows/stale.yaml
Purpose: Mark and close stale issues and PRs
Triggers:
schedule- Daily
- Stale after: 60 days of inactivity
- Close after: 7 days of being marked stale
track-skipped-tests.yaml - Skipped Test Tracking
Location:.github/workflows/track-skipped-tests.yaml
Purpose: Track and report skipped/xfail tests
Triggers:
pushto mainschedule- Weekly
coverage-trend.yaml - Coverage Trend Analysis
Location:.github/workflows/coverage-trend.yaml
Purpose: Track test coverage trends over time
Triggers:
pushto mainpull_request
performance-regression.yaml - Performance Regression Detection
Location:.github/workflows/performance-regression.yaml
Purpose: Detect performance regressions
Triggers:
pushto mainpull_request
- API response times
- Database query performance
- Build times
bump-deployment-versions.yaml - Version Bumping
Location:.github/workflows/bump-deployment-versions.yaml
Purpose: Automatically update deployment version numbers
Triggers:
releasepublishedworkflow_dispatch(manual)
weekly-reports.yaml - Weekly Reporting
Location:.github/workflows/weekly-reports.yaml
Purpose: Generate weekly project health reports
Triggers:
schedule- Weekly on Sundays at 9 AM UTC
- Test coverage trends
- Deployment frequency
- Issue/PR velocity
- Security scan results
release.yaml - Release Automation
Location:.github/workflows/release.yaml
Purpose: Automated release process
Triggers:
pushtag matchingv*workflow_dispatch(manual)
- Generate changelog
- Create GitHub release
- Build and publish Docker images
- Deploy to production (if configured)
cost-tracking.yaml - Cost Monitoring
Location:.github/workflows/cost-tracking.yaml
Purpose: Track and report GCP/AWS costs
Triggers:
schedule- Daily
Infrastructure (3 workflows)
terraform-validate.yaml - Terraform Validation
Location:.github/workflows/terraform-validate.yaml
Purpose: Validate Terraform configurations
Triggers:
pull_requestaffecting *.tf filespushto main affecting *.tf files
terraform fmt- Format checkingterraform validate- Syntax validationtflint- Best practices linting
validate-k8s-configs.yml - K8s Config Validation
Location:.github/workflows/validate-k8s-configs.yml
Purpose: Validate Kubernetes configurations
Triggers:
pull_requestaffecting K8s files
- kubeconform schema validation
- Resource limits check
- Security context validation
shell-tests.yml - Shell Script Testing
Location:.github/workflows/shell-tests.yml
Purpose: Test shell scripts with bats
Triggers:
pull_requestaffecting *.sh filespushto main
- bats (Bash Automated Testing System)
- shellcheck (already in pre-commit)
Build & Hygiene (1 workflow)
build-hygiene.yaml - Build Quality Checks
Location:.github/workflows/build-hygiene.yaml
Purpose: Enforce build quality standards
Triggers:
pushpull_request
- No TODO/FIXME in production code (warnings only)
- No console.log in production code
- No commented-out code blocks
- Consistent formatting
Workflow Dependency Graph
See WORKFLOW_DIAGRAM.mdx for a visual Mermaid diagram showing workflow dependencies and execution order.Workflow Patterns
Reusable Workflows
Location:.github/workflows/reusable/ (planned)
Purpose: Extract common patterns into reusable workflows
Current Candidates for Extraction:
- setup-python-deps - Python + uv setup (already a composite action)
- docker-build-and-push - Docker build pattern
- deploy-to-gke - GKE deployment pattern
- run-tests-with-coverage - Test execution pattern
Composite Actions
Location:.github/actions/
Existing Actions:
- setup-python-deps - Standardized Python + uv setup
- retry-step - Retry logic with exponential backoff
Consolidation Opportunities
High Priority
1. Documentation Workflows (2 → 1)- Merge
docs-validation.yaml+link-checker.yaml→docs.yaml - Both validate documentation, just different aspects
- Estimated savings: 1 workflow, clearer organization
- Merge
security-scan.yaml+security-validation.yml→security.yaml - Both focus on security, different scanners
- Estimated savings: 1 workflow
Medium Priority
3. Deployment Validation (3 → 2)- Consolidate
validate-deployments.yaml,validate-kubernetes.yaml,validate-k8s-configs.yml - All validate K8s/deployment configs
- Keep
deployment-validation.ymlseparate (runs on PR) - Estimated savings: 1-2 workflows
Low Priority
4. Smoke Tests- Currently embedded in various workflows
- Could be extracted to
smoke-tests.yaml(already exists)
Trigger Patterns
Push to Main/Develop
- ci.yaml (main pipeline)
- quality-tests.yaml
- e2e-tests.yaml (weekly)
- security-scan.yaml
- coverage-trend.yaml
- performance-regression.yaml
Pull Request
- ci.yaml
- quality-tests.yaml
- deployment-validation.yml (if deployment files changed)
- security-scan.yaml
- All validate-*.yaml workflows (if relevant files changed)
Scheduled (Recurring)
- Daily: security-scan (3 AM), gcp-drift-detection, workflow-health-dashboard, cost-tracking
- Weekly: quality-tests (Sunday 12 AM), e2e-tests (Monday 2 AM), gcp-compliance-scan, track-skipped-tests, weekly-reports (Sunday 9 AM)
- Hourly: observability-alerts
Manual (workflow_dispatch)
- All workflows support manual triggering
- Useful for testing and debugging
Performance Characteristics
| Workflow | Duration | Frequency | Cost Impact |
|---|---|---|---|
| ci.yaml | 12-35 min | Every push/PR | HIGH |
| quality-tests.yaml | 15-25 min | Push + Weekly | MEDIUM |
| e2e-tests.yaml | 20-30 min | Push + Weekly | MEDIUM |
| security-scan.yaml | 8-12 min | Daily + Push | MEDIUM |
| deployment-validation.yml | 5-8 min | PR (deploy files) | LOW |
| All others | 2-10 min | Varies | LOW |
Best Practices
When to Use Which Workflow
For Development:- Local testing:
make test-dev(1-2 min) - Before push:
make validate-push(3-5 min) - auto-runs - After push: ci.yaml runs automatically
- ci.yaml runs on all PRs
- deployment-validation.yml runs if deployment files changed
- security-scan.yaml runs on all PRs
- release.yaml creates GitHub release
- deploy-production-gke.yaml deploys to production
- Manual approval required for production
Workflow Debugging
Caching Strategy
Python Dependencies:- Cached by:
actions/cache@v4with key based onuv.lock - Saves: 1-2 minutes per workflow run
- Location:
~/.cache/uv
- Cached by: Docker Buildx layer caching
- Saves: 5-10 minutes per build
- Location: GitHub Actions cache
Troubleshooting
”Workflow failed but no logs”
Check GitHub Actions UI for detailed logs. Common issues:- Secrets not configured
- Permissions insufficient
- Cache corruption
”Workflow taking too long”
Check for:- Cache misses (slow dependency installation)
- Sequential vs parallel execution
- Unnecessary retries
”Workflow not triggering”
Check:- Trigger conditions (paths, branches)
- Workflow file syntax (use actionlint)
- Repository settings (Actions enabled?)
Related Documentation
- Validation Strategy: VALIDATION_STRATEGY.mdx - Tiered validation approach
- Commands Reference: COMMANDS.mdx - All Makefile targets
- Workflow Diagram: WORKFLOW_DIAGRAM.mdx - Visual workflow dependencies
- CI Configuration:
.github/workflows/- Workflow source files - Composite Actions:
.github/actions/- Reusable action components
Contributing
When adding new workflows:- Choose appropriate trigger - Don’t run on every push if not needed
- Add to appropriate category - Follow existing patterns
- Use composite actions - Reuse setup-python-deps, retry-step
- Add caching - Cache dependencies and build artifacts
- Set timeout - Prevent runaway workflows
- Test locally - Use
actto test before committing - Update this documentation - Add to appropriate category
Last Updated: 2025-11-16 (CI/CD Optimization - Phase 5) Total Workflows: 31 workflows Version: 1.0.0 Status: Active