name: "πΉοΈ Manual"
run-name: "πΉοΈ ${{ inputs.chunk_gate && 'π ' || '' }}${{ inputs.offset != '0' && inputs.offset != '' && format('β©{0} ', inputs.offset) || '' }}${{ inputs.workspace != 'auto' && format('π§βπ»{0} ', inputs.workspace == 'true' && 'ζ―' || 'ε¦') || '' }}${{ inputs.tor != 'auto' && format('{0} ', inputs.tor == 'disabled' && 'π' || inputs.tor == 'enforced' && 'π§
εΌΊεΆ' || 'π§
η¬ε ') || '' }}${{ inputs.vpn != 'auto' && format('{0} ', inputs.vpn == 'disabled' && 'π£οΈ' || 'πεΌΊεΆ') || '' }}${{ inputs.filesystem != '' && format('ποΈ{0} ', inputs.filesystem) || '' }}${{ inputs.distros != '' && format('π§{0} ', inputs.distros) || '' }}${{ inputs.lifecycles != '' && format('β»οΈ{0} ', inputs.lifecycles) || '' }}${{ inputs.mode != 'auto' && format('π{0} ', inputs.mode) || '' }}${{ inputs.priority != '' && format('β{0} ', inputs.priority) || '' }}${{ inputs.whitelist != '' && format('π―{0}', inputs.whitelist) || 'π diff (origin/main)' }}"
concurrency:
group: global-ci-${{ github.repository }}-${{ github.ref_name }}
cancel-in-progress: true
on:
workflow_dispatch:
inputs:
distros:
description: "π§ Distro pool the rows are spread over. Empty: all five. Example: 'arch debian'"
required: false
default: ""
type: string
priority:
description: "β Roles to lead, in every combination left open (see README)"
required: false
default: ""
type: string
whitelist:
description: "π― Roles to deploy. Empty: diff vs origin/main. '__ALL__': every role"
required: false
default: ""
type: string
lifecycles:
description: "β»οΈ Lifecycle envelope for test-deploy discovery (comma/space-separated)."
required: false
default: ""
type: string
mode:
description: "π Deploy mode. 'auto' rotates a row over the modes its role offers"
required: false
default: "auto"
type: choice
options:
- "auto"
- "host"
- "compose"
- "swarm"
filesystem:
description: "ποΈ Filesystem pool the rows are spread over. Empty: ext4, btrfs, zfs"
required: false
default: ""
type: string
tor:
description: "π§
Tor axis for swarm and compose; the four values are in the README"
required: false
default: "auto"
type: choice
options:
- "auto"
- "enforced"
- "exclusive"
- "disabled"
vpn:
description: "π WireGuard axis for swarm; auto rotates, the others hold every row"
required: false
default: "auto"
type: choice
options:
- "auto"
- "enforced"
- "disabled"
meshes:
description: "πΈοΈ WireGuard layout meshed swarm rows deploy. Empty: the development lab's"
required: false
default: ""
type: string
offset:
description: "β© Where chunk 0 starts: a row count, or a token like web-app-x#2"
required: false
default: "0"
type: string
chunk_size:
description: "π¦ Rows one chunk holds. Empty: derive it from slots and queue window"
required: false
default: ""
type: string
chunk_gate:
description: "π Stop the chunk chain at its first failed chunk"
required: false
default: true
type: boolean
sweep:
description: "π Sweep number driving the mode and tor rotation. Empty: the run number"
required: false
default: ""
type: string
workspace:
description: "π§βπ» Run the workspace test. 'auto': on a global scope only"
required: false
default: "auto"
type: choice
options:
- "auto"
- "true"
- "false"
workspace_track:
description: "π§βπ» Workspace track per distro. 'rotate' splits compose and swarm"
required: false
default: "rotate"
type: choice
options:
- "rotate"
- "compose"
- "swarm"
permissions:
contents: read
jobs:
ci-orchestrator:
name: ποΈ Orchestrate CI (manual)
permissions:
actions: read
contents: read
packages: write
security-events: write
issues: write
uses: ./.github/workflows/call-orchestrator.yml
with:
distros: ${{ inputs.distros }}
whitelist: ${{ inputs.whitelist }}
lifecycles: ${{ inputs.lifecycles }}
mode: ${{ inputs.mode }}
priority: ${{ inputs.priority }}
sweep: ${{ inputs.sweep }}
offset: ${{ inputs.offset }}
chunk_size: ${{ inputs.chunk_size != '' && inputs.chunk_size || '0' }}
chunk_gate: ${{ inputs.chunk_gate }}
filesystem: ${{ inputs.filesystem }}
workspace: ${{ inputs.workspace }}
workspace_track: ${{ inputs.workspace_track }}
tor: ${{ inputs.tor }}
vpn: ${{ inputs.vpn }}
meshes: ${{ inputs.meshes }}
secrets: inherit