diff --git a/content/en/docs/components/forgejo/actions/runner-orchestration.md b/content/en/docs/components/forgejo/actions/runner-orchestration.md index 1001a6f..07fe7ff 100644 --- a/content/en/docs/components/forgejo/actions/runner-orchestration.md +++ b/content/en/docs/components/forgejo/actions/runner-orchestration.md @@ -102,30 +102,9 @@ sequenceDiagram ``` ### Sequence Diagrams -[Add sequence diagrams showing key interaction flows with other components] - The diagram below shows how a trigger of an action results in deployment of a runner on edge-connect. -```mermaid -sequenceDiagram - - rect rgb(255,200,200) - Forgejo->>GARM: (Webhook) A new job is pending - GARM->>GARM Provider Edge Connect: Create new runner - GARM Provider Edge Connect->>Edge Connect: Create App - GARM Provider Edge Connect->>Edge Connect: Create AppInstance - Edge Connect->>Runner: Deploys - end - - Runner->>GARM: Retrieve runner registration token - GARM->>Forgejo: Retrieve runner registration token - Forgejo-->>GARM: Token - GARM-->>Runner: Token - Runner->>Forgejo: Register runner - Runner->>Forgejo: Fetch job - Runner->>Runner: Work on job - Runner->>Forgejo: Send result -``` +{{}} ### Deployment Architecture diff --git a/resources/edp-likec4/deployment/otc/edp.c4 b/resources/edp-likec4/deployment/otc/edp.c4 index c5b51b5..3587b15 100644 --- a/resources/edp-likec4/deployment/otc/edp.c4 +++ b/resources/edp-likec4/deployment/otc/edp.c4 @@ -2,8 +2,8 @@ deployment { cloud otc-edp-per-tenant 'OTC EDP per tenant cluster' { - description 'OTC environment for EDP. EDP is the environment a customer gets from us. - + description 'OTC environment for EDP. EDP is the environment a customer gets from us. + This is kubernetes clusters and other infrastructure like nodes and vms, and platform services. All is set up by IaC-pipelines in the Foundry. ' technology 'OTC' @@ -15,7 +15,7 @@ deployment { cluster edp 'EDP' { instanceOf edp.argoCD - instanceOf forgejoRunner + instanceOf forgejoRunner instanceOf edp.forgejo { -> cloudServices.elasticsearch -> cloudServices.objectstorage @@ -24,6 +24,7 @@ deployment { } instanceOf edp.externalSecrets instanceOf edp.ingressNginx + instanceOf edp.garm } } @@ -36,7 +37,7 @@ deployment { instanceOf objectstorage instanceOf elasticsearch } - + computeressource forgejoRunnerInfrastructure 'EDP ForgejoRunner infrastructure' { description 'Infrastructure for Forgejo runners like pods, vms, lxds, etc' instanceOf forgejoRunner { @@ -45,5 +46,3 @@ deployment { } } } - - \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/edgeconnect.c4 b/resources/edp-likec4/models/containers/edgeconnect.c4 new file mode 100644 index 0000000..10c7615 --- /dev/null +++ b/resources/edp-likec4/models/containers/edgeconnect.c4 @@ -0,0 +1,5 @@ +model { + component edgeConnect 'Edge Connect' { + description 'Provides an API to run applications on the edge' + } +} diff --git a/resources/edp-likec4/models/containers/garm.c4 b/resources/edp-likec4/models/containers/garm.c4 new file mode 100644 index 0000000..26631e7 --- /dev/null +++ b/resources/edp-likec4/models/containers/garm.c4 @@ -0,0 +1,24 @@ +model { + extend edp { + container garm 'Garm Image' { + icon tech:docker + component garm 'Garm' { + description 'Provisions runners for Forgejo' + icon tech:go + } + + component providerEdgeConnect 'Garm Provider for EdgeConnect' { + icon tech:go + description 'Acts as abstraction layer for EdgeConnect' + } + + component providerKubernetes 'Garm Provider for Kubernetes' { + icon tech:go + description 'Acts as abstraction layer for Kubernetes' + } + + garm -> providerEdgeConnect 'calls binary' + garm -> providerKubernetes 'calls binary' + } + } +} diff --git a/resources/edp-likec4/views/dynamic/cicd/forgejo-garm.c4 b/resources/edp-likec4/views/dynamic/cicd/forgejo-garm.c4 new file mode 100644 index 0000000..321c4b1 --- /dev/null +++ b/resources/edp-likec4/views/dynamic/cicd/forgejo-garm.c4 @@ -0,0 +1,35 @@ +views { + dynamic view forgejoGarmInteraction { + title 'Forgejo <-> Garm' + + include edp, edp.garm + include edp.forgejo with { + title 'Forgejo' + } + include edp.garm.garm + include edp.garm.providerEdgeConnect + include edgeConnect + + edp.forgejo -> edp.garm.garm '(Webhook) A new job is pending' + edp.garm.garm -> edp.garm.providerEdgeConnect 'Create new runner' + edp.garm.providerEdgeConnect -> edgeConnect 'Create App (Runner)' + edp.garm.providerEdgeConnect -> edgeConnect 'Create AppInstance (Runner)' + edgeConnect -> forgejoRunner 'Deploys' + + forgejoRunner -> edp.garm.garm 'Get runner registration token' + edp.garm.garm -> edp.forgejo 'Get runner registration token' + edp.forgejo -> edp.garm.garm 'Token' + edp.garm.garm -> forgejoRunner 'Token' + forgejoRunner -> edp.forgejo 'Register runner' + forgejoRunner -> edp.forgejo 'Fetch job' + forgejoRunner -> forgejoRunner 'Work on job' + forgejoRunner -> edp.forgejo 'Send result' + edp.forgejo -> edp.forgejo 'Deregister Runner' + forgejoRunner -> forgejoRunner 'Terminate' + + edp.forgejo -> edp.garm.garm '(Webhook) A job finished' + edp.garm.garm -> edp.garm.providerEdgeConnect 'Delete runner' + edp.garm.providerEdgeConnect -> edgeConnect 'Delete AppInstance (Runner)' + edp.garm.providerEdgeConnect -> edgeConnect 'Delete App (Runner)' + } +}