Files
2026-03-20 08:29:58 +01:00

7.0 KiB

CI/CD Flows

PR Quality Gates (ci.yml)

Trigger: pull_request to develop or master

                          ┌──────────────────┐
                          │    PR opened      │
                          └────────┬─────────┘
                                   │
                          ┌────────▼─────────┐
                          │       fmt         │
                          └────────┬─────────┘
                                   │
                          ┌────────▼─────────┐
                          │     clippy        │
                          └──┬───┬───┬───┬───┘
                             │   │   │   │
              ┌──────────────┘   │   │   └──────────────┐
              │          ┌───────┘   └───────┐          │
              ▼          ▼                   ▼          ▼
     ┌──────────────┐ ┌──────────────┐ ┌───────────┐ ┌──────────┐
     │ test         │ │Security Scan │ │ benchmark │ │ validate │
     │ ubuntu       │ │ cargo audit  │ │ >=80%     │ │ ai agent │
     │ windows      │ │ (advisory)   │ │ savings   │ │ doc      │
     │ macos        │ │              │ │           │ │          │
     └──────┬───────┘ └──────┬───────┘ └─────┬─────┘ └────┬─────┘
            │                │               │             │
            └────────────────┴───────┬───────┴─────────────┘
                                     │
                          ┌──────────▼─────────┐
                          │  All must pass     │
                          │  to merge          │
                          └────────────────────┘

     + DCO check (independent, develop PRs only)

Merge to develop — pre-release (cd.yml)

Trigger: push to develop | workflow_dispatch (not master) | Concurrency: cancel-in-progress

     ┌──────────────────┐
     │ push to develop   │
     │ OR dispatch       │
     └────────┬─────────┘
              │
     ┌────────▼──────────────────┐
     │ pre-release                │
     │ compute next version      │
     │ from conventional commits │
     │ tag = v{next}-rc.{run}    │
     └────────┬──────────────────┘
              │
     ┌────────▼──────────────────┐
     │ release.yml               │
     │ prerelease = true         │
     └────────┬──────────────────┘
              │
     ┌────────▼──────────────────┐
     │ Build                     │
     │ 5 platforms + DEB + RPM   │
     └────────┬──────────────────┘
              │
     ┌────────▼──────────────────┐
     │ GitHub Release            │
     │ (pre-release badge)       │
     │                           │
     │ Discord:  SKIPPED         │
     │ Homebrew: SKIPPED         │
     └──────────────────────────┘

Merge to master — stable release (cd.yml)

Trigger: push to master (only) | Concurrency: never cancelled

     ┌──────────────────┐
     │ push to master    │
     └────────┬─────────┘
              │
     ┌────────▼──────────────────┐
     │ release-please            │
     │ analyze conventional      │
     │ commits                   │
     └────────┬──────────────────┘
              │
         ┌────┴────────────────┐
         │                     │
    no release           release created
         │                     │
         ▼                     ▼
  ┌──────────────┐    ┌───────────────────────┐
  │ create/update│    │ release.yml            │
  │ release PR   │    │ prerelease = false     │
  └──────────────┘    └───────────┬───────────┘
                                  │
                     ┌────────────▼────────────┐
                     │ Build                   │
                     │ 5 platforms + DEB + RPM  │
                     └────────────┬────────────┘
                                  │
                     ┌────────────▼────────────┐
                     │ GitHub Release           │
                     │ (stable, "Latest" badge) │
                     └──┬─────────┬─────────┬──┘
                        │         │         │
                        ▼         ▼         ▼
                    Discord   Homebrew   latest
                    notify    tap update  tag

Manual release (release.yml)

Trigger: workflow_dispatch

     ┌────────────────────────┐
     │ workflow_dispatch       │
     │ inputs: tag, prerelease │
     └───────────┬────────────┘
                 │
     ┌───────────▼────────────┐
     │ Full build pipeline     │
     │ 5 platforms + DEB + RPM │
     └───────────┬────────────┘
                 │
          ┌──────┴──────┐
          │             │
   prerelease=false  prerelease=true
          │             │
          ▼             ▼
     Discord        pre-release
     Homebrew       badge only
     latest tag