Skip to content

GitHub Workflows ArchitectureΒΆ

Detailed documentation of all GitHub Actions workflows and their interactions.

Workflow OverviewΒΆ

The project uses a sophisticated CI/CD pipeline with five interconnected workflows that handle testing, security, releases, and documentation deployment.

Complete Workflow Interaction DiagramΒΆ

flowchart TD
    %% External Triggers
    Developer[πŸ‘¨β€πŸ’» Developer] --> CodeChanges[πŸ“ Code Changes]
    CodeChanges --> FeatureBranch[🌿 Feature Branch]
    FeatureBranch --> PullRequest[πŸ”„ Pull Request to Main]

    %% PR Workflows
    PullRequest --> CI_PR[πŸš€ CI Workflow
Pull Request Trigger] PullRequest --> DepReview[πŸ” Dependency Review
Security Analysis] %% CI PR Jobs CI_PR --> TestJob[πŸ§ͺ Test Job
Matrix: Python 3.11, 3.12] CI_PR --> SecurityJob[πŸ›‘οΈ Security Job
Safety + Bandit] TestJob --> UnitTests[⚑ Unit Tests
Fast execution] TestJob --> IntegrationTests[πŸ”— Integration Tests
Component interaction] SecurityJob --> VulnerabilityCheck[🚨 Vulnerability Scan] SecurityJob --> CodeAnalysis[πŸ“Š Static Code Analysis] %% Dependency Review DepReview --> LicenseCheck[πŸ“„ License Compliance] DepReview --> SecurityAdvisory[πŸ›‘οΈ Security Advisory Check] %% PR Resolution UnitTests --> PRApproval{πŸ“‹ PR Approval} IntegrationTests --> PRApproval VulnerabilityCheck --> PRApproval CodeAnalysis --> PRApproval LicenseCheck --> PRApproval SecurityAdvisory --> PRApproval PRApproval -->|βœ… Approved| MergeToMain[🎯 Merge to Main] PRApproval -->|❌ Changes Needed| CodeChanges %% Main Branch Workflows MergeToMain --> CI_Main[πŸš€ CI Workflow
Main Branch Trigger] MergeToMain --> ReleasePleaseWorkflow[🎁 Release Please
Conventional Commit Analysis] MergeToMain --> DocsCheck{πŸ“š Documentation
Changes?} %% CI Main Branch CI_Main --> MainTestJob[πŸ§ͺ Full Test Suite
All Tests] CI_Main --> APITestJob[🌐 API Test Job
OpenAI Integration] CI_Main --> MainSecurityJob[πŸ›‘οΈ Security Validation] MainTestJob --> TestResults{βœ… All Tests Pass?} APITestJob --> TestResults MainSecurityJob --> TestResults TestResults -->|❌ Failed| NotifyFailure[πŸ“§ Failure Notification
GitHub Checks Failed] TestResults -->|βœ… Passed| CISuccess[βœ… CI Success
Main Branch Validated] %% Release Please Logic ReleasePleaseWorkflow --> ConventionalCommitCheck{πŸ“ Conventional
Commits Found?} ConventionalCommitCheck -->|❌ No| NoReleaseAction[❌ No Release Action
Wait for Next Push] ConventionalCommitCheck -->|βœ… Yes| AnalyzeCommits[πŸ” Analyze Commit Types
feat, fix, docs, etc.] AnalyzeCommits --> VersionBump[πŸ“ˆ Calculate Version Bump
Major/Minor/Patch] VersionBump --> GenerateChangelog[πŸ“‹ Generate Changelog
From Commit Messages] GenerateChangelog --> CreateReleasePR[πŸ”„ Create Release PR
Version + Changelog] CreateReleasePR --> ReleasePRReview{πŸ‘€ Release PR
Review & Merge} ReleasePRReview -->|⏳ Pending| WaitForApproval[⏳ Wait for Manual
PR Approval] ReleasePRReview -->|βœ… Merged| CreateGitTag[🏷️ Create Git Tag
Trigger Release] %% Release Workflow CreateGitTag --> ReleaseWorkflow[🚒 Release Workflow
Tag Push Trigger] ReleaseWorkflow --> ReleaseDetermine[🎯 Determine Release Type
Tag vs Manual] ReleaseDetermine --> ReleaseBuild[πŸ—οΈ Build Package
uv build] ReleaseDetermine --> ReleaseTest[πŸ§ͺ Release Tests
Final Validation] ReleaseBuild --> PackageVerify[βœ… Package Verification
twine check] ReleaseTest --> PackageVerify PackageVerify --> PublishCondition{🎯 Publish Ready?} PublishCondition -->|❌ Failed| ReleaseFailed[❌ Release Failed
Error Notification] PublishCondition -->|βœ… Success| PyPIPublish[πŸ“¦ Publish to PyPI
Package Distribution] PyPIPublish --> GitHubRelease[πŸ“‹ Create GitHub Release
Release Notes + Assets] GitHubRelease --> TriggerVersionedDocs[πŸ“š Trigger Versioned Docs
Repository Dispatch] TriggerVersionedDocs --> ReleaseComplete[βœ… Release Complete
All Artifacts Published] %% Documentation Workflows DocsCheck -->|βœ… Yes| DocsVersionedWorkflow[πŸ“š Docs Versioned Workflow
Documentation Changes] DocsCheck -->|❌ No| CISuccess DocsVersionedWorkflow --> DetermineDocsType[🎯 Determine Deployment Type
Latest vs Versioned] DetermineDocsType -->|πŸ“„ Latest| DeployLatest[🌐 Deploy Latest Docs
GitHub Pages Root] DetermineDocsType -->|🏷️ Versioned| DeployVersioned[πŸ“‹ Deploy Versioned Docs
Version-specific Path] DeployLatest --> MikeDeploy1[βš™οΈ Mike Deploy Latest
Preserve Existing Versions] DeployVersioned --> MikeDeploy2[βš™οΈ Mike Deploy Version
Add New Version] MikeDeploy1 --> UpdateVersionSelector1[πŸ”„ Update Version Selector
Latest as Default] MikeDeploy2 --> UpdateVersionSelector2[πŸ”„ Update Version Selector
Add New Version] UpdateVersionSelector1 --> DocsSuccess[βœ… Documentation Deployed
GitHub Pages Updated] UpdateVersionSelector2 --> DocsSuccess %% Repository Dispatch from Release TriggerVersionedDocs --> DispatchEvent[πŸ“‘ Repository Dispatch
release-triggered Event] DispatchEvent --> DocsVersionedWorkflow %% Styling classDef devStyle fill:#e3f2fd,stroke:#1565c0,stroke-width:2px classDef ciStyle fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px classDef releaseStyle fill:#fff3e0,stroke:#ef6c00,stroke-width:2px classDef docsStyle fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px classDef errorStyle fill:#ffebee,stroke:#c62828,stroke-width:2px classDef successStyle fill:#e0f2f1,stroke:#00695c,stroke-width:2px classDef decisionStyle fill:#fafafa,stroke:#424242,stroke-width:2px class Developer,CodeChanges,FeatureBranch devStyle class CI_PR,CI_Main,TestJob,SecurityJob,MainTestJob,APITestJob,MainSecurityJob ciStyle class ReleasePleaseWorkflow,ReleaseWorkflow,ReleaseBuild,PyPIPublish,GitHubRelease releaseStyle class DocsVersionedWorkflow,DeployLatest,DeployVersioned,MikeDeploy1,MikeDeploy2 docsStyle class ReleaseFailed,NotifyFailure errorStyle class CISuccess,ReleaseComplete,DocsSuccess successStyle class PRApproval,TestResults,ConventionalCommitCheck,ReleasePRReview,PublishCondition,DocsCheck,DetermineDocsType decisionStyle

Individual Workflow DetailsΒΆ

1. CI Workflow (ci.yml)ΒΆ

flowchart TD
    %% Triggers
    PRTrigger[πŸ“₯ Pull Request
to main/develop] --> CIStart[πŸš€ CI Workflow Start] PushTrigger[πŸ“₯ Push to
main branch] --> CIStart ManualTrigger[πŸ“₯ Manual
Workflow Dispatch] --> CIStart %% Job Matrix Setup CIStart --> SetupMatrix[βš™οΈ Setup Test Matrix
Python 3.11 & 3.12
Ubuntu Latest] %% Test Job SetupMatrix --> TestJob[πŸ§ͺ Test Job
Matrix Strategy] TestJob --> InstallUV[πŸ“¦ Install UV
Package Manager] InstallUV --> SyncDeps[πŸ”„ Sync Dependencies
uv sync] SyncDeps --> LintFormat[🧹 Lint & Format
ruff check & format] LintFormat --> RunTests[⚑ Run Tests
pytest with markers] RunTests --> UnitTests[πŸ”¬ Unit Tests
@pytest.mark.unit] RunTests --> IntegrationTests[πŸ”— Integration Tests
@pytest.mark.integration] RunTests --> EdgeCaseTests[⚠️ Edge Case Tests
@pytest.mark.edge_case] UnitTests --> TestResults{βœ… Test Results} IntegrationTests --> TestResults EdgeCaseTests --> TestResults %% API Tests (Conditional) TestResults -->|βœ… Passed| APICheck{🌐 API Tests
Required?} TestResults -->|❌ Failed| TestFailed[❌ CI Failed
Test Failures] APICheck -->|Main Branch or [api-test]| APITestJob[🌐 API Test Job
OpenAI Integration] APICheck -->|Other Branches| SkipAPI[⏭️ Skip API Tests
Branch Protection] APITestJob --> APIKeyCheck[πŸ”‘ API Key Validation
Test Environment Detection] APIKeyCheck --> RunAPITests[πŸ€– Run API Tests
@pytest.mark.api] RunAPITests --> APIResults{βœ… API Results} APIResults -->|βœ… Passed| SecurityJob[πŸ›‘οΈ Security Job] APIResults -->|❌ Failed| APIFailed[❌ API Tests Failed
Integration Issues] SkipAPI --> SecurityJob %% Security Job SecurityJob --> InstallSecTools[πŸ›‘οΈ Install Security Tools
safety, bandit] InstallSecTools --> VulnScan[🚨 Vulnerability Scan
safety scan] VulnScan --> StaticAnalysis[πŸ“Š Static Analysis
bandit -r src/] StaticAnalysis --> SecurityResults{πŸ›‘οΈ Security Results} SecurityResults -->|βœ… Passed| CISuccess[βœ… CI Success
All Checks Passed] SecurityResults -->|❌ Failed| SecurityFailed[❌ Security Failed
Vulnerabilities Found] %% Final States TestFailed --> CIFailed[❌ CI Pipeline Failed] APIFailed --> CIFailed SecurityFailed --> CIFailed CISuccess --> NextWorkflow[➑️ Trigger Next Workflow
If Main Branch] %% Styling classDef triggerStyle fill:#e1f5fe,stroke:#01579b,stroke-width:2px classDef jobStyle fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px classDef testStyle fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px classDef securityStyle fill:#fff8e1,stroke:#f57f17,stroke-width:2px classDef successStyle fill:#e0f2f1,stroke:#00695c,stroke-width:2px classDef errorStyle fill:#ffebee,stroke:#c62828,stroke-width:2px class PRTrigger,PushTrigger,ManualTrigger triggerStyle class TestJob,APITestJob,SecurityJob jobStyle class UnitTests,IntegrationTests,EdgeCaseTests,RunAPITests testStyle class VulnScan,StaticAnalysis,APIKeyCheck securityStyle class CISuccess,NextWorkflow successStyle class TestFailed,APIFailed,SecurityFailed,CIFailed errorStyle

2. Release Please Workflow (release-please.yml)ΒΆ

flowchart TD
    %% Trigger
    PushMain[πŸ“₯ Push to Main
Branch] --> RPStart[🎁 Release Please
Workflow Start] %% Initial Checks RPStart --> CheckCommits[πŸ” Check Recent Commits
Last 10 commits] CheckCommits --> ConventionalCheck{πŸ“ Conventional
Commits Found?} ConventionalCheck -->|❌ No| LogNoAction[πŸ“ Log: No Action
No conventional commits] ConventionalCheck -->|βœ… Yes| ShowCommits[πŸ“‹ Show Found Commits
feat, fix, docs, etc.] %% Release Please Action ShowCommits --> ReleasePleaseAction[πŸš€ Release Please Action
googleapis/release-please-action@v4] ReleasePleaseAction --> AnalyzeCommits[πŸ” Analyze Commit Types
Determine Version Bump] AnalyzeCommits --> VersionCalculation{πŸ“ˆ Version Calculation} VersionCalculation -->|feat| MinorBump[πŸ“ˆ Minor Version Bump
New Feature] VersionCalculation -->|fix| PatchBump[πŸ”§ Patch Version Bump
Bug Fix] VersionCalculation -->|BREAKING| MajorBump[πŸ’₯ Major Version Bump
Breaking Change] VersionCalculation -->|docs,chore| NoBump[πŸ“ No Version Bump
Documentation Only] %% Generate Changelog MinorBump --> GenerateChangelog[πŸ“‹ Generate Changelog
From Commit Messages] PatchBump --> GenerateChangelog MajorBump --> GenerateChangelog GenerateChangelog --> CheckExistingPR{πŸ”„ Existing
Release PR?} CheckExistingPR -->|βœ… Yes| UpdatePR[πŸ”„ Update Existing PR
New Commits + Changelog] CheckExistingPR -->|❌ No| CreatePR[πŸ†• Create New Release PR
Version Bump + Changelog] %% PR Management UpdatePR --> PRReady[πŸ“‹ Release PR Ready
For Review & Merge] CreatePR --> PRReady PRReady --> WaitForMerge[⏳ Wait for Manual
PR Review & Merge] WaitForMerge --> PRMerged{βœ… PR Merged?} PRMerged -->|❌ Not Yet| WaitForMerge PRMerged -->|βœ… Merged| CreateTag[🏷️ Create Git Tag
Trigger Release Workflow] %% Tag Creation CreateTag --> TagDetails[πŸ“‹ Tag Details
Version + Release Notes] TagDetails --> TriggerRelease[🚒 Trigger Release Workflow
Tag Push Event] %% No Action Paths NoBump --> LogNoAction LogNoAction --> WorkflowComplete[βœ… Workflow Complete
No Release Action] %% Debug Output ReleasePleaseAction --> DebugOutput[πŸ” Debug Output
Release Created, Tag Name, PR Details] DebugOutput --> CheckManifest[πŸ“‹ Check Manifest File
.release-please-manifest.json] CheckManifest --> VersionCalculation %% Final States TriggerRelease --> RPSuccess[βœ… Release Please Success
Tag Created, Release Triggered] WorkflowComplete --> RPComplete[βœ… Workflow Complete
No Changes Needed] %% Styling classDef triggerStyle fill:#e1f5fe,stroke:#01579b,stroke-width:2px classDef processStyle fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px classDef versionStyle fill:#fff3e0,stroke:#ef6c00,stroke-width:2px classDef prStyle fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px classDef successStyle fill:#e0f2f1,stroke:#00695c,stroke-width:2px classDef debugStyle fill:#f5f5f5,stroke:#757575,stroke-width:2px class PushMain triggerStyle class RPStart,CheckCommits,AnalyzeCommits,GenerateChangelog processStyle class MinorBump,PatchBump,MajorBump,NoBump versionStyle class UpdatePR,CreatePR,PRReady,WaitForMerge prStyle class RPSuccess,RPComplete,WorkflowComplete successStyle class DebugOutput,CheckManifest debugStyle

3. Release Workflow (release.yml)ΒΆ

flowchart TD
    %% Triggers
    TagPush[πŸ“₯ Git Tag Push
v*.*.* pattern] --> ReleaseStart[🚒 Release Workflow
Start] ManualDispatch[πŸ“₯ Manual Dispatch
version input] --> ReleaseStart %% Release Please Integration ReleasePleaseTag[🏷️ Tag from
Release Please] --> TagPush %% Job Setup ReleaseStart --> DetermineType[🎯 Determine Release Type
Tag Push vs Manual] DetermineType --> DebugContext[πŸ” Debug Workflow Context
Event, Ref, Secrets Check] DebugContext --> ReleaseJob[🚒 Release Job
Ubuntu Latest] %% Build Process ReleaseJob --> CheckoutCode[πŸ“₯ Checkout Repository
Full History] CheckoutCode --> InstallUV[πŸ“¦ Install UV Package Manager
Latest Version] InstallUV --> SetupPython[🐍 Setup Python 3.12
uv python install] SetupPython --> SyncDeps[πŸ”„ Install Dependencies
uv sync] %% Testing Phase SyncDeps --> RunTests[πŸ§ͺ Run Full Test Suite
All Test Markers] RunTests --> TestResults{βœ… Tests Pass?} TestResults -->|❌ Failed| TestsFailed[❌ Release Failed
Tests Not Passing] TestResults -->|βœ… Passed| BuildPackage[πŸ—οΈ Build Python Package
uv build] %% Package Verification BuildPackage --> InstallTwine[πŸ“¦ Install Twine
Package Verification] InstallTwine --> VerifyPackage[βœ… Verify Package
twine check dist/*] VerifyPackage --> VerificationResult{βœ… Package Valid?} VerificationResult -->|❌ Failed| PackageFailed[❌ Release Failed
Package Verification Error] VerificationResult -->|βœ… Passed| CheckSecrets[πŸ”‘ Check PyPI Secrets
PYPI_API_TOKEN exists] %% Publishing Phase CheckSecrets --> SecretCheck{πŸ” Secrets Available?} SecretCheck -->|❌ Missing| SecretsMissing[❌ Release Failed
Missing PyPI Token] SecretCheck -->|βœ… Available| PublishPyPI[πŸ“¦ Publish to PyPI
twine upload] PublishPyPI --> PublishResult{πŸ“¦ Publish Success?} PublishResult -->|❌ Failed| PublishFailed[❌ PyPI Publish Failed
Upload Error] PublishResult -->|βœ… Success| CreateRelease[πŸ“‹ Create GitHub Release
Tag + Release Notes] %% GitHub Release Creation CreateRelease --> AttachAssets[πŸ“Ž Attach Build Artifacts
dist/* files] AttachAssets --> ReleaseResult{πŸ“‹ Release Created?} ReleaseResult -->|❌ Failed| ReleaseFailed[❌ GitHub Release Failed
API Error] ReleaseResult -->|βœ… Success| TriggerDocs[πŸ“š Trigger Documentation
Repository Dispatch] %% Documentation Trigger TriggerDocs --> DocsDispatch[πŸ“‘ Send Repository Dispatch
release-triggered Event] DocsDispatch --> DocsResult{πŸ“‘ Dispatch Success?} DocsResult -->|❌ Failed| DocsDispatchFailed[⚠️ Docs Dispatch Failed
Manual Trigger Needed] DocsResult -->|βœ… Success| ReleaseSuccess[βœ… Release Complete
All Systems Updated] %% Error Handling TestsFailed --> NotifyFailure[πŸ“§ Notify Failure
GitHub Status Check] PackageFailed --> NotifyFailure SecretsMissing --> NotifyFailure PublishFailed --> NotifyFailure ReleaseFailed --> NotifyFailure DocsDispatchFailed --> PartialSuccess[⚠️ Partial Success
Package Released, Docs Manual] %% Final States NotifyFailure --> WorkflowFailed[❌ Release Workflow Failed] PartialSuccess --> WorkflowPartial[⚠️ Release Partially Complete] ReleaseSuccess --> WorkflowSuccess[βœ… Release Workflow Success] %% Styling classDef triggerStyle fill:#e1f5fe,stroke:#01579b,stroke-width:2px classDef processStyle fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px classDef testStyle fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px classDef buildStyle fill:#fff8e1,stroke:#f57f17,stroke-width:2px classDef publishStyle fill:#fff3e0,stroke:#ef6c00,stroke-width:2px classDef successStyle fill:#e0f2f1,stroke:#00695c,stroke-width:2px classDef errorStyle fill:#ffebee,stroke:#c62828,stroke-width:2px classDef warningStyle fill:#fffde7,stroke:#f9a825,stroke-width:2px class TagPush,ManualDispatch,ReleasePleaseTag triggerStyle class ReleaseStart,DetermineType,DebugContext,ReleaseJob processStyle class RunTests,TestResults testStyle class BuildPackage,InstallTwine,VerifyPackage buildStyle class PublishPyPI,CreateRelease,AttachAssets publishStyle class ReleaseSuccess,WorkflowSuccess successStyle class TestsFailed,PackageFailed,PublishFailed,ReleaseFailed,WorkflowFailed errorStyle class PartialSuccess,WorkflowPartial,DocsDispatchFailed warningStyle

4. Documentation Versioned Workflow (docs-versioned.yml)ΒΆ

Enhanced Trigger Logic & Safety ChecksΒΆ

The docs-versioned workflow has been significantly improved with robust trigger logic and comprehensive safety checks:

Key Improvements:

  • Enhanced Trigger Logic: Proper handling of all event types (push, release, repository_dispatch, workflow_dispatch)
  • Version Validation: Validates semantic version format before deployment
  • Conflict Resolution: Retry logic with exponential backoff for concurrent deployments
  • Safety Checks: Prevents no-op deployments with explicit verification
  • Comprehensive Logging: Debug output for troubleshooting deployment issues
flowchart TD
    %% Triggers with Enhanced Logic
    PushMain[πŸ“₯ Push to Main
docs/** changes] --> DocsStart[πŸ“š Docs Versioned
Workflow Start] ReleaseCreated[πŸ“₯ Release Created
published event] --> DocsStart RepoDispatch[πŸ“₯ Repository Dispatch
release-triggered] --> DocsStart ManualDispatch[πŸ“₯ Manual Dispatch
version input] --> DocsStart %% Enhanced Deployment Type Determination DocsStart --> ConcurrencyCheck[πŸ”„ Concurrency Control
docs-deployment-gh-pages] ConcurrencyCheck --> DetermineType[🎯 Enhanced Deployment Logic
Comprehensive Event Analysis] %% Improved Decision Logic DetermineType --> TriggerAnalysis{πŸ” Trigger Analysis} TriggerAnalysis -->|Push to Main| DeployLatest[πŸ“„ Deploy Latest
Documentation Changes] TriggerAnalysis -->|Release Event| ExtractReleaseVersion[πŸ“‹ Extract Release Version
From release.tag_name] TriggerAnalysis -->|Repository Dispatch| ExtractDispatchVersion[πŸ“‹ Extract Dispatch Version
From client_payload.tag] TriggerAnalysis -->|Manual Latest| DeployLatest TriggerAnalysis -->|Manual Version| ExtractManualVersion[πŸ“‹ Extract Manual Version
From inputs.version] %% Version Processing ExtractReleaseVersion --> ValidateVersion[βœ… Validate Version Format
Semantic Versioning Check] ExtractDispatchVersion --> ValidateVersion ExtractManualVersion --> ValidateVersion ValidateVersion --> VersionCheck{πŸ“‹ Version Valid?} VersionCheck -->|❌ Invalid| ValidationFailed[❌ Version Validation Failed
Invalid Format] VersionCheck -->|βœ… Valid| DeployVersioned[🏷️ Deploy Versioned Docs
New Version Release] %% Safety Check Job DetermineType --> SafetyCheck[πŸ›‘οΈ Safety Check Job
Prevent No-Op Deployments] SafetyCheck --> ShouldDeploy{πŸ€” Should Deploy?} ShouldDeploy -->|❌ No| WarnNoDeployment[⚠️ Warn No Deployment
Event Type Not Handled] ShouldDeploy -->|βœ… Yes| ProceedDeployment[βœ… Proceed with Deployment
Event Matches Trigger Logic] %% Latest Documentation Deployment DeployLatest --> LatestSetup[βš™οΈ Setup Latest Environment
UV + Python 3.12] LatestSetup --> LatestSync[πŸ”„ Sync Dependencies
uv sync] LatestSync --> LatestGitConfig[βš™οΈ Configure Git
GitHub Action credentials] LatestGitConfig --> FetchGHPages1[πŸ“‘ Fetch gh-pages Branch
Conflict Prevention] FetchGHPages1 --> MikeLatestLocal[πŸ“š Mike Deploy Latest Local
update-aliases + set-default] %% Enhanced Retry Logic for Latest MikeLatestLocal --> LatestRetryLoop[πŸ”„ Enhanced Retry Loop
Max 3 Attempts, Exponential Backoff] LatestRetryLoop --> LatestPushAttempt[πŸ“€ Latest Push Attempt
git push origin gh-pages] LatestPushAttempt --> LatestPushResult{πŸ“€ Push Success?} LatestPushResult -->|βœ… Success| LatestComplete[βœ… Latest Docs Deployed
Default Version Updated] LatestPushResult -->|❌ Failed| LatestConflictResolve[πŸ”„ Resolve Latest Conflicts
Rebase + Re-deploy] LatestConflictResolve --> MikeLatestLocal %% Versioned Documentation Deployment DeployVersioned --> VersionedSetup[βš™οΈ Setup Versioned Environment
UV + Python 3.12] VersionedSetup --> VersionedSync[πŸ”„ Sync Dependencies
uv sync] VersionedSync --> VersionedGitConfig[βš™οΈ Configure Git
GitHub Action credentials] VersionedGitConfig --> FetchGHPages2[πŸ“‘ Fetch gh-pages Branch
Conflict Prevention] FetchGHPages2 --> MikeVersionedLocal[πŸ“š Mike Deploy Version Local
update-aliases for vX.Y.Z] %% Enhanced Retry Logic for Versioned MikeVersionedLocal --> VersionedRetryLoop[πŸ”„ Enhanced Retry Loop
Max 3 Attempts, Exponential Backoff] VersionedRetryLoop --> VersionedPushAttempt[πŸ“€ Versioned Push Attempt
git push origin gh-pages] VersionedPushAttempt --> VersionedPushResult{πŸ“€ Push Success?} VersionedPushResult -->|βœ… Success| VersionedComplete[βœ… Versioned Docs Deployed
New Version Available] VersionedPushResult -->|❌ Failed| VersionedConflictResolve[πŸ”„ Resolve Version Conflicts
Rebase + Re-deploy] VersionedConflictResolve --> MikeVersionedLocal %% Comprehensive Error Handling LatestSetup --> LatestError{❌ Setup Error?} VersionedSetup --> VersionedError{❌ Setup Error?} LatestError -->|βœ… Success| LatestSync LatestError -->|❌ Failed| LatestFailed[❌ Latest Deploy Failed
Environment Setup Error] VersionedError -->|βœ… Success| VersionedSync VersionedError -->|❌ Failed| VersionedFailed[❌ Versioned Deploy Failed
Environment Setup Error] %% Final Success States LatestComplete --> LogLatestSuccess[πŸ“ Log Latest Success
GitHub Pages Updated] VersionedComplete --> LogVersionedSuccess[πŸ“ Log Versioned Success
Version URL Available] LogLatestSuccess --> DocsSuccess[βœ… Documentation Workflow Complete
All Systems Updated] LogVersionedSuccess --> DocsSuccess %% Final Error States ValidationFailed --> DocsFailed[❌ Documentation Workflow Failed] WarnNoDeployment --> DocsSkipped[⏭️ Documentation Workflow Skipped] LatestFailed --> DocsFailed VersionedFailed --> DocsFailed %% Integration Points DocsSuccess --> UpdateGitHubPages[🌐 GitHub Pages Updated
Documentation Live] UpdateGitHubPages --> VersionSelectorUpdate[πŸ”„ Version Selector Updated
Mike Built-in Functionality] %% Styling classDef triggerStyle fill:#e1f5fe,stroke:#01579b,stroke-width:2px classDef processStyle fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px classDef deployStyle fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px classDef mikeStyle fill:#fff8e1,stroke:#f57f17,stroke-width:2px classDef validationStyle fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px classDef retryStyle fill:#fff3e0,stroke:#ff9800,stroke-width:2px classDef successStyle fill:#e0f2f1,stroke:#00695c,stroke-width:2px classDef errorStyle fill:#ffebee,stroke:#c62828,stroke-width:2px classDef warningStyle fill:#fffde7,stroke:#f9a825,stroke-width:2px classDef skipStyle fill:#f5f5f5,stroke:#757575,stroke-width:2px class PushMain,ReleaseCreated,RepoDispatch,ManualDispatch triggerStyle class DocsStart,ConcurrencyCheck,DetermineType,TriggerAnalysis,SafetyCheck processStyle class DeployLatest,DeployVersioned,LatestSetup,VersionedSetup deployStyle class MikeLatestLocal,MikeVersionedLocal mikeStyle class ValidateVersion,VersionCheck,ExtractReleaseVersion,ExtractDispatchVersion,ExtractManualVersion validationStyle class LatestRetryLoop,VersionedRetryLoop,LatestConflictResolve,VersionedConflictResolve retryStyle class DocsSuccess,LatestComplete,VersionedComplete,UpdateGitHubPages,VersionSelectorUpdate successStyle class ValidationFailed,LatestFailed,VersionedFailed,DocsFailed errorStyle class WarnNoDeployment warningStyle class DocsSkipped skipStyle

Key Workflow FeaturesΒΆ

Enhanced Trigger Logic:

  • Push to Main: Automatically deploys latest documentation for docs changes
  • Release Events: Extracts version from release.tag_name and deploys versioned docs
  • Repository Dispatch: Handles release-triggered events from release workflow
  • Manual Dispatch: Supports both "latest" and specific version deployments

Version Validation:

  • Validates semantic versioning format (X.Y.Z or X.Y.Z-suffix)
  • Prevents deployment of invalid version formats
  • Comprehensive error reporting for validation failures

Conflict Resolution:

  • Robust retry logic with exponential backoff (3 attempts)
  • Automatic conflict resolution via rebase/reset
  • Prevents concurrent deployment conflicts with exclusive concurrency group

Safety & Monitoring:

  • Explicit no-deployment warnings for unhandled events
  • Comprehensive debug logging throughout the process
  • Clear success/failure reporting with actionable URLs

5. Dependency Review Workflow (dependency-review.yml)ΒΆ

flowchart TD
    %% Trigger
    PRCreated[πŸ“₯ Pull Request
to main/develop] --> DepStart[πŸ” Dependency Review
Workflow Start] %% Setup DepStart --> CheckoutPR[πŸ“₯ Checkout PR
Compare Changes] CheckoutPR --> DepReviewAction[πŸ” Dependency Review Action
github/dependency-review-action] %% Configuration Loading DepReviewAction --> LoadConfig[βš™οΈ Load Configuration
dependency-review-config.yml] LoadConfig --> ConfigDetails[πŸ“‹ Configuration Details
Severity: moderate
Licenses: MIT, Apache-2.0, BSD
Scopes: runtime] %% Vulnerability Analysis ConfigDetails --> VulnAnalysis[🚨 Vulnerability Analysis
Compare PR dependencies] VulnAnalysis --> SecurityAdvisory[πŸ›‘οΈ Check Security Advisories
GitHub Advisory Database] SecurityAdvisory --> VulnResults{🚨 Vulnerabilities
Found?} VulnResults -->|βœ… None| LicenseCheck[πŸ“„ License Compliance Check
Allowed licenses only] VulnResults -->|⚠️ Low/Info| VulnWarning[⚠️ Vulnerability Warning
Low severity found] VulnResults -->|❌ Moderate+| VulnFailed[❌ Vulnerability Failure
Blocked by security] %% License Checking VulnWarning --> LicenseCheck LicenseCheck --> LicenseResults{πŸ“„ License
Compliance?} LicenseResults -->|βœ… Compliant| ScopeCheck[🎯 Scope Analysis
Runtime dependencies] LicenseResults -->|❌ Non-compliant| LicenseFailed[❌ License Failure
Incompatible license found] %% Scope Analysis ScopeCheck --> ScopeResults{🎯 Scope
Analysis?} ScopeResults -->|βœ… Runtime OK| GenerateReport[πŸ“‹ Generate Report
Dependency summary] ScopeResults -->|⚠️ Dev Dependencies| ScopeWarning[⚠️ Development Dependencies
Non-runtime scope] %% Report Generation ScopeWarning --> GenerateReport GenerateReport --> LicenseReport[πŸ“„ License Report
All dependency licenses] LicenseReport --> SecurityReport[πŸ›‘οΈ Security Report
Vulnerability summary] %% Final Results SecurityReport --> ReviewSuccess[βœ… Dependency Review Passed
All checks successful] %% Failure Paths VulnFailed --> BlockPR[🚫 Block PR Merge
Security vulnerability] LicenseFailed --> BlockPR BlockPR --> NotifyFailure[πŸ“§ Notify PR Author
Dependency issues found] %% Success Path ReviewSuccess --> AllowMerge[βœ… Allow PR Merge
Dependencies approved] AllowMerge --> AddReviewComment[πŸ’¬ Add Review Comment
Dependency summary] %% Final States NotifyFailure --> ReviewFailed[❌ Dependency Review Failed] AddReviewComment --> ReviewComplete[βœ… Dependency Review Complete] %% Styling classDef triggerStyle fill:#e1f5fe,stroke:#01579b,stroke-width:2px classDef processStyle fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px classDef securityStyle fill:#fff3e0,stroke:#ef6c00,stroke-width:2px classDef licenseStyle fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px classDef reportStyle fill:#fff8e1,stroke:#f57f17,stroke-width:2px classDef successStyle fill:#e0f2f1,stroke:#00695c,stroke-width:2px classDef errorStyle fill:#ffebee,stroke:#c62828,stroke-width:2px classDef warningStyle fill:#fffde7,stroke:#f9a825,stroke-width:2px class PRCreated triggerStyle class DepStart,CheckoutPR,DepReviewAction,LoadConfig processStyle class VulnAnalysis,SecurityAdvisory,VulnResults securityStyle class LicenseCheck,LicenseResults licenseStyle class GenerateReport,LicenseReport,SecurityReport reportStyle class ReviewSuccess,AllowMerge,ReviewComplete successStyle class VulnFailed,LicenseFailed,BlockPR,ReviewFailed errorStyle class VulnWarning,ScopeWarning warningStyle

Workflow Integration PointsΒΆ

Secret ManagementΒΆ

graph TB
    Secrets[πŸ” GitHub Secrets] --> OpenAI[OPENAI_API_KEY
πŸ€– API Tests] Secrets --> PyPI[PYPI_API_TOKEN
πŸ“¦ Package Publishing] Secrets --> Analytics[GOOGLE_ANALYTICS_KEY
πŸ“Š Docs Analytics] Secrets --> Safety[SAFETY_API_KEY
πŸ›‘οΈ Security Scanning] OpenAI --> CI[πŸš€ CI Workflow
API Tests] PyPI --> Release[🚒 Release Workflow
PyPI Publishing] Analytics --> Docs[πŸ“š Documentation
Usage Tracking] Safety --> CI2[πŸš€ CI Workflow
Vulnerability Scanning] classDef secretStyle fill:#fff3e0,stroke:#ef6c00,stroke-width:2px classDef workflowStyle fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px class Secrets secretStyle class CI,CI2,Release,Docs workflowStyle

Concurrency ControlΒΆ

graph LR
    ConcurrentPRs[Multiple PRs] --> CIQueue[CI Queue
Parallel Execution] MainPush[Main Branch Push] --> MainQueue[Main Branch Queue
Sequential Execution] ReleaseTag[Release Tag] --> ReleaseQueue[Release Queue
Exclusive Access] DocChanges[Docs Changes] --> DocsQueue[πŸ“š Docs Deployment
docs-deployment-gh-pages
Sequential Only] CIQueue --> CIRuns[Multiple CI Runs
βœ… Parallel OK] MainQueue --> MainRuns[Sequential Main Builds
⚑ One at a time] ReleaseQueue --> ReleaseRuns[Exclusive Release
🚒 No interference] DocsQueue --> DocsRuns[Sequential Docs Deploy
πŸ“š Prevent conflicts] classDef concurrencyStyle fill:#e3f2fd,stroke:#1565c0,stroke-width:2px classDef executionStyle fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px class ConcurrentPRs,MainPush,ReleaseTag,DocChanges concurrencyStyle class CIRuns,MainRuns,ReleaseRuns,DocsRuns executionStyle

Monitoring and ObservabilityΒΆ

Workflow Status DashboardΒΆ

The workflows provide comprehensive monitoring through:

  1. GitHub Actions Dashboard: Real-time workflow status
  2. Status Checks: PR blocking for failed workflows
  3. Notifications: Email/GitHub notifications for failures
  4. Debug Logging: Comprehensive debug output for troubleshooting
  5. Artifact Storage: Build artifacts and logs for analysis

Key Metrics to MonitorΒΆ

  • CI Success Rate: Percentage of passing CI runs
  • Release Frequency: Number of releases per month
  • Documentation Deployment: Latest vs versioned deployment success
  • Security Scan Results: Vulnerability trends over time
  • Dependency Updates: License compliance and security updates

This architecture ensures robust, automated CI/CD with comprehensive error handling, security scanning, and documentation management.