This flowchart describes the logic for managing the CICD label in Cocoon for running presubmit CI.
flowchart TD PR_Opened([Event: PR Opened]) --> Is_Draft{Is Draft?} Is_Draft -- No --> Is_Privileged_Open{Is Privileged?} Is_Draft -- Yes --> Create_Awaiting[Create Awaiting Check Run] Is_Privileged_Open -- Yes --> Add_Label[Add CICD Label] Add_Label --> Start_Pre[Start Presubmits] Is_Privileged_Open -- No --> Create_Awaiting Create_Awaiting --> State_Awaiting((State: Awaiting)) Start_Pre --> State_Running((State: Running)) State_Awaiting --> Label_Added([Event: CICD Label Added]) Label_Added --> Resolve_Awaiting[Resolve Awaiting Check Run] Resolve_Awaiting --> Start_Pre State_Running --> Changes_Pushed([Event: Changes Pushed]) Changes_Pushed --> Is_Privileged_Push{Is Privileged?} Remove_Label --> Create_Awaiting Is_Privileged_Push -- No --> Remove_Label[Remove CICD Label] Is_Privileged_Push -- Yes --> Label_Present{Has CICD Label?} Label_Present -- Yes --> Start_Pre Label_Present -- No --> Create_Awaiting
@startuml state PR { state Waiting Waiting : entry / Create Awaiting Check Run Waiting : exit / resolve(awaiting check) state Running Running: entry/ Start Presubmits state if_priv2 <<choice>> Running --> if_priv2: onPushed if_priv2 --> Running: isPrivileged && labeled(CICD) if_priv2 --> Waiting : default: remove(CICD) state if_draft <<choice>> PR --> if_draft: openned if_draft --> Waiting : isDraft if_draft --> Running: isPrivileged if_draft --> Waiting : default Waiting --> Running: labeled(CICD) } @enduml