Files
local-ci-cd-system/docs/LIFECYCLE.md
T
Simone 758f86c11c
Lint / pssa (push) Failing after 3s
Lint / python (push) Failing after 3s
docs(lifecycle): add CI/CD job lifecycle documentation with flowchart and phase breakdown
2026-05-23 21:56:59 +02:00

79 lines
2.7 KiB
Markdown

# CI/CD Job Lifecycle
```mermaid
flowchart TD
A([git push]) --> B[Gitea Actions\ntrigger workflow]
B --> C[act_runner\nWindows service]
C --> D["python -m ci_orchestrator job\njob.py · job()"]
D --> SRC{use-git-clone?}
SRC -->|false — default| HOST_CLONE["host: git clone\n+ Compress-Archive\n+ WinRM copy zip\n+ Expand-Archive in VM"]
SRC -->|true — opt-in| VM_CLONE["skip host clone\nVM: git clone --recurse-submodules\nhttps://PAT@gitea/repo\n~25.7% faster"]
HOST_CLONE --> E
VM_CLONE --> E
D --> LB
LB --> E
E["vm_new()\nlinked clone from template snapshot"]
E --> F{guestOS in VMX?}
F -->|ubuntu-*| G_WAIT["wait_ready()\nSSH poll · port 22"]
F -->|Windows| W_WAIT["wait_ready()\nWinRM poll · port 5986"]
G_WAIT --> G_PROBE["_probe_transport()\nSshTransport"]
W_WAIT --> W_PROBE["_probe_transport()\nWinRmTransport"]
G_PROBE --> G_BUILD["_linux_build()\nSSH + SFTP · paramiko"]
W_PROBE --> W_BUILD["_windows_build()\nWinRM · pypsrp"]
G_BUILD --> G_ART["_linux_collect()\nSCP artifacts"]
W_BUILD --> W_ART["_windows_collect()\nWinRM Copy-Item"]
G_ART --> DESTROY
W_ART --> DESTROY
DESTROY["_destroy_clone()\nvmrun stop + deleteVM"]
DESTROY --> DONE([Job complete])
subgraph Templates
T1["WinBuild2025\nBaseClean · WinRM"]
T2["WinBuild2022\nBaseClean · WinRM"]
T3["LinuxBuild2404\nBaseClean-Linux · SSH"]
end
E -.->|clone from| T1
E -.->|clone from| T2
E -.->|clone from| T3
subgraph Backend
LB["load_backend()\nWorkstationVmrunBackend\nwraps vmrun.exe"]
end
```
## Phase breakdown
| Phase | Module | Transport |
|-------|--------|-----------|
| Clone VM | `commands/vm.py · vm_new()` | `vmrun.exe` (host) |
| Source delivery | workflow input `use-git-clone` | WinRM (in-VM git clone) or host zip |
| Wait ready | `commands/wait.py · wait_ready()` | SSH/22 or WinRM/5986 |
| Build | `commands/build.py · build_run()` | `paramiko` (Linux) / `pypsrp` (Windows) |
| Collect artifacts | `commands/artifacts.py · artifacts_collect()` | SCP (Linux) / WinRM Copy-Item (Windows) |
| Destroy VM | `commands/job.py · _destroy_clone()` | `vmrun.exe` (host) |
## Transport selection
`job.py` reads `guestOS` from the cloned `.vmx`:
- `ubuntu-*``SshTransport` (paramiko, key auth, `ci_build` user)
- anything else → `WinRmTransport` (pypsrp, HTTPS/5986)
## Source delivery modes
| Mode | Trigger | Flow | Notes |
|------|---------|------|-------|
| Standard | `use-git-clone: false` (default) | host clone → zip → WinRM copy → expand | No credentials in VM |
| UseGitClone | `use-git-clone: true` | VM clones directly via PAT | 25.7% faster, PAT never persisted |