From e9b4299696c5ceead384be178317c6021318d4d6 Mon Sep 17 00:00:00 2001 From: Martin McCaffery Date: Fri, 19 Dec 2025 15:42:26 +0100 Subject: [PATCH] Remove blog pages --- content/en/blog/20250401_review.md | 84 ------------------- content/en/blog/20251027_important_links.md | 6 -- content/en/blog/240823-archsession.md | 40 --------- .../views/dynamic/cicd/garm-arch.c4 | 13 +-- static/js/likec4-webcomponent.js | 6 +- 5 files changed, 11 insertions(+), 138 deletions(-) delete mode 100644 content/en/blog/20250401_review.md delete mode 100644 content/en/blog/20251027_important_links.md delete mode 100644 content/en/blog/240823-archsession.md diff --git a/content/en/blog/20250401_review.md b/content/en/blog/20250401_review.md deleted file mode 100644 index a5a339d..0000000 --- a/content/en/blog/20250401_review.md +++ /dev/null @@ -1,84 +0,0 @@ -# Review - -1) 09h35 Marco -business plan -issue: value of software, depreciation -FTE: around 100 overall, 3 full teams of developers -tax discussion - -10h04 Discussions - -2) 10h10 Julius - -3) 10h27 Sebastiano - DevDay bis 10h40 - -schriften bei votes größer - fragen sollten lesbar sein! - -devops is dead .... claim - - -4) Stephan bis 10h55 - -5) christopher 10h58 - -6) robert 11:11 -* app -* devops-pipelines -* edp in osc deployed - -7) michal has nothing to show - -8) evgenii wants to finish -- 11:30 - -9) patrick 11:32 - - -==== - -projekt management meeting - -workshops, externe teams - -customer episodes - -wem was wo prinzipien -| -Rollen, Personas - -weiter die perspektive des nutzers bekommen, inneres verlangen eines developers, mein anspruch an das EDP -(bekommen wir das hin, möchte ic damit arbeiten) - -level 2 erklimmen - -workshops halten - -senioren bekommen - - -level1: source code structure, artefakte builden, revision control, branching model, e.g. pull requesting, tests der software, local debugging -level2: automatisierung des artefakte-builds, versionsmgmt, milestones, tickets, issues, compliances an security -level3: deployment auf stages, feedback pipeline verhalten -level4: feedback app-verhalten (logs, metrics, alerts) + development loop -level5: 3rd level support in production - -level1: coding -source code structure, artefakte builden, revision control, branching model, e.g. pull requesting, tests der software, local debugging - -level2: reaching the outdside world with output -automatisierung des artefakte-builds, versionsmgmt, milestones, tickets, issues, compliances an security - -level3: run the app anywhere -deployment auf stages, feedback pipeline verhalten - -level4: monitoring the app -feedback app-verhalten (logs, metrics, alerts) + development loop - -level5: support -3rd level support in production (or any outer stage) - - -sprint 4 -leveraging säule -eigene app säule -chore säule - diff --git a/content/en/blog/20251027_important_links.md b/content/en/blog/20251027_important_links.md deleted file mode 100644 index b84ce95..0000000 --- a/content/en/blog/20251027_important_links.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: important links -weight: 20 ---- - -* Gardener login to Edge and orca cluster: IPCEICIS-6222 \ No newline at end of file diff --git a/content/en/blog/240823-archsession.md b/content/en/blog/240823-archsession.md deleted file mode 100644 index 17ac41c..0000000 --- a/content/en/blog/240823-archsession.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Architecture session -weight: 20 ---- - - -## Platform Generics - -* https://tag-app-delivery.cncf.io/whitepapers/platforms/#capabilities-of-platforms - -* https://tag-app-delivery.cncf.io/whitepapers/platform-eng-maturity-model/ - -* https://humanitec.com/blog/wtf-internal-developer-platform-vs-internal-developer-portal-vs-paas - -## reference architecture + Portfolio - -* https://platformengineering.org/blog/create-your-own-platform-engineering-reference-architectures - -* https://humanitec.com/reference-architectures - -* https://www.youtube.com/watch?v=AimSwK8Mw-U - - -## Platform Portfolio - -### Viktor Farcic - -* https://technologyconversations.com/ - -* https://technologyconversations.com/2024/01/08/the-best-devops-tools-platforms-and-services-in-2024/ - - -### Internal devloper platform - -* https://internaldeveloperplatform.org/core-components/ - -### Workflow / CI/CD - -* https://cnoe.io/blog/optimizing-data-quality-in-dev-portals - diff --git a/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 b/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 index 2840775..61150bc 100644 --- a/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 +++ b/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 @@ -19,12 +19,15 @@ deployment { description 'GARM container with runner orchestration' } - garmService = instanceOf edp.garm.garm { - description 'GARM - Runner lifecycle manager' - } + environment edpCluster 'GARM pod' { + technology 'Kubernetes' + garmService = instanceOf edp.garm.garm { + description 'GARM - Runner lifecycle manager' + } - instanceOf edp.garm.providerEdgeConnect { - description 'GARM Provider for Edge Connect' + instanceOf edp.garm.providerEdgeConnect { + description 'GARM Provider for Edge Connect' + } } } } diff --git a/static/js/likec4-webcomponent.js b/static/js/likec4-webcomponent.js index 434ab25..e3b1072 100644 --- a/static/js/likec4-webcomponent.js +++ b/static/js/likec4-webcomponent.js @@ -223,7 +223,7 @@ Optionally we will have a WebUI/API/CLI`},tags:[],style:{opacity:15,size:"md"},d offering capabilities like code version controling collaboration and ticketing -and security scanning`},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"local.gitea.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:12542,y:844,width:340,height:180,labelBBox:{x:46,y:18,width:278,height:139}},{id:"local.gitea.forgejoRunner",parent:"local.gitea",level:2,children:[],inEdges:["1m1lj8s"],outEdges:["se5brg"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.gitea.forgejoRunner",modelRef:"forgejoRunner",x:12542,y:150,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"local.spark.sparkoperator",parent:"local",level:1,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Spark Operator",technology:"Spark",tags:[],icon:"tech:spark",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.spark.sparkoperator",modelRef:"edp.spark.sparkoperator",x:17102,y:150,width:320,height:180,labelBBox:{x:76,y:65,width:198,height:45}}],edges:[{id:"1xqlhup",source:"edgeProvider",target:"edgeSdk",label:"built using",points:[[1035,330],[1021,352],[1007,374],[995,395],[977,425],[959,458],[943,489]],labelBBox:{x:996,y:395,width:67,height:18},parent:null,relations:["1wlvsb5"],color:"gray",line:"dashed",head:"normal"},{id:"u9omtf",source:"edgeProvider",target:"edgeProviderHost.edp",label:"hosted on",points:[[1264,255],[1378,274],[1522,320],[1596,426],[1673,536],[1652,606],[1596,727],[1576,770],[1543,808],[1507,838]],labelBBox:{x:1647,y:576,width:66,height:18},parent:null,relations:["12ssq9"],color:"gray",line:"dashed",head:"normal"},{id:"r4j4sg",source:"edgeProvider",target:"edgeProviderHost.terralist",label:"published to",points:[[1160,330],[1197,379],[1244,439],[1282,489]],labelBBox:{x:1225,y:395,width:80,height:18},parent:null,relations:["1mpjz5d"],color:"gray",line:"dashed",head:"normal"},{id:"14pfq5a",source:"edgeSdk",target:"edgeProviderHost.edp",label:"hosted on",points:[[1011,677],[1077,727],[1160,788],[1228,838]],labelBBox:{x:1125,y:742,width:66,height:18},parent:null,relations:["1sm6ifh"],color:"gray",line:"dashed",head:"normal"},{id:"lw6otg",source:"edgeSdk",target:"edgeCloud.edgeApi",label:"calls",points:[[884,677],[880,725],[875,785],[871,834]],labelBBox:{x:879,y:742,width:32,height:18},parent:null,relations:["vfhcba"],color:"gray",line:"dashed",head:"normal"},{id:"1ogkmfn",source:"edgeConnectEnv",target:"otcKubernetes.edpCluster",label:"[...]",points:[[5676,330],[5725,397],[5779,491],[5779,586],[5779,586],[5779,586],[5779,1268],[5779,1420],[5657,1426],[5518,1488],[5355,1561],[4853,1609],[4586,1630]],labelBBox:{x:5780,y:922,width:25,height:18},parent:null,relations:["18dtot7","1k6h7jf","1t1b56a"],color:"gray",line:"dashed",head:"normal"},{id:"i6v3n",source:"otcKubernetes.edpCluster",target:"edgeConnectEnv",label:"runs workflows",points:[[4576,1629],[4742,1611],[5004,1565],[5205,1457],[5317,1397],[5420,1395],[5420,1268],[5420,586],[5420,586],[5420,586],[5420,495],[5470,404],[5517,338]],labelBBox:{x:5421,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"pit45i",source:"otc-edp-per-tenant.cce",target:"otc-edp-per-tenant.cloudServices",label:null,points:[[3134,1357],[3132,1391],[3130,1430],[3128,1465],[3127,1490],[3126,1518],[3125,1543]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["1fzhjm9","15njmlz","hks76r","1w18ve8"],color:"gray",line:"dashed",head:"normal"},{id:"b27cdb",source:"otc-edp-per-tenant.cce",target:"otcKubernetes.edpCluster",label:"register",points:[[3155,1357],[3167,1404],[3190,1457],[3232,1488],[3246,1498],[3370,1498],[3387,1500],[3691,1532],[4043,1584],[4246,1615]],labelBBox:{x:3233,y:1465,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"fkkf8y",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure",target:"otc-edp-per-tenant.cce",label:"registers",points:[[3135,330],[3136,521],[3139,968],[3140,1167]],labelBBox:{x:3139,y:742,width:58,height:18},parent:"otc-edp-per-tenant",relations:["g9oj4f"],color:"gray",line:"dashed",head:"normal"},{id:"r3wxut",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otc-edp-per-tenant.cce",label:"deploys edp to otc.cce",points:[[3627,990],[3508,1031],[3363,1082],[3350,1089],[3311,1112],[3272,1142],[3239,1170]],labelBBox:{x:3351,y:1089,width:143,height:18},parent:null,relations:["uk77s5"],color:"gray",line:"dashed",head:"normal"},{id:"1sng0q0",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",target:"otc-edp-per-tenant.cce",label:null,points:[[4112,1024],[4081,1043],[4046,1062],[4012,1074],[3755,1171],[3669,1110],[3403,1177],[3374,1184],[3344,1193],[3315,1203]],labelBBox:null,parent:null,relations:["jde35l"],color:"gray",line:"dashed",head:"normal"},{id:"p2umm7",source:"otcKubernetes.edpCluster",target:"otc-edp-per-tenant.cce",label:"runs workflows",points:[[4256,1627],[4014,1603],[3567,1552],[3420,1488],[3353,1459],[3287,1409],[3237,1364]],labelBBox:{x:3421,y:1465,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"e3benz",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otc-edp-per-tenant.cloudServices",label:"deploys edp to otc.paas",points:[[3627,949],[3366,976],[2865,1043],[2758,1177],[2681,1275],[2693,1351],[2758,1457],[2801,1527],[2880,1572],[2953,1599]],labelBBox:{x:2759,y:1255,width:152,height:18},parent:null,relations:["1pfc6bl"],color:"gray",line:"dashed",head:"normal"},{id:"1mbuxdd",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[2963,245],[2782,254],[2493,287],[2269,395],[2154,451],[2054,459],[2054,586],[2054,586],[2054,586],[2054,1268],[2054,1395],[2152,1408],[2269,1457],[2374,1501],[3333,1496],[3387,1500],[3691,1523],[4043,1578],[4246,1612]],labelBBox:{x:2055,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"126mt75",source:"otcKubernetes.edpCluster",target:"otc-edp-per-tenant.forgejoRunnerInfrastructure",label:"runs workflows",points:[[4256,1616],[4054,1584],[3696,1530],[3387,1500],[3294,1491],[3270,1493],[3177,1488],[3065,1481],[2774,1507],[2673,1457],[2486,1365],[2367,1310],[2367,1102],[2367,586],[2367,586],[2367,586],[2367,331],[2726,263],[2952,246]],labelBBox:{x:2368,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"llfvob",source:"otc-edpFoundry.cce",target:"otc-edpFoundry.workflowSetupEDPInfrastructure",label:"invokes",points:[[4113,677],[4050,727],[3972,788],[3908,838]],labelBBox:{x:4021,y:742,width:51,height:18},parent:"otc-edpFoundry",relations:["dola40"],color:"gray",line:"dashed",head:"normal"},{id:"fil3na",source:"otc-edpFoundry.cce",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",label:"invokes",points:[[4229,677],[4230,725],[4232,785],[4234,834]],labelBBox:{x:4233,y:742,width:51,height:18},parent:"otc-edpFoundry",relations:["1f5y9gc"],color:"gray",line:"dashed",head:"normal"},{id:"109g3jm",source:"otc-edpFoundry.forgejoRunnerInfrastructure",target:"otc-edpFoundry.cce",label:"registers",points:[[4226,330],[4226,378],[4226,438],[4226,487]],labelBBox:{x:4227,y:395,width:58,height:18},parent:"otc-edpFoundry",relations:["1umzqdy"],color:"gray",line:"dashed",head:"normal"},{id:"9r557q",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[3725,1024],[3656,1136],[3565,1330],[3663,1457],[3734,1548],[4046,1600],[4246,1625]],labelBBox:{x:3664,y:1255,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"c2grk6",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.workflowSetupEDPInfrastructure",label:"runs workflows",points:[[4256,1580],[4193,1550],[4124,1509],[4071,1457],[3948,1335],[3864,1148],[3821,1034]],labelBBox:{x:4072,y:1255,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"rivecr",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[4298,1024],[4311,1045],[4324,1068],[4335,1089],[4408,1235],[4420,1428],[4420,1543]],labelBBox:{x:4419,y:1255,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"1ean8sr",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",label:"runs workflows",points:[[4307,1553],[4281,1526],[4256,1493],[4241,1457],[4186,1319],[4200,1143],[4217,1034]],labelBBox:{x:4242,y:1255,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"1lrp92n",source:"otc-edpFoundry.forgejoRunnerInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[4397,272],[4653,324],[5107,436],[5107,586],[5107,586],[5107,586],[5107,1268],[5107,1504],[4791,1592],[4586,1624]],labelBBox:{x:5108,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"l1c2z3",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.forgejoRunnerInfrastructure",label:"runs workflows",points:[[4486,1553],[4498,1533],[4509,1510],[4516,1488],[4519,1478],[4516,1475],[4516,1465],[4505,1003],[4667,837],[4455,426],[4437,392],[4411,362],[4381,337]],labelBBox:{x:4566,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"c8rye7",source:"edgeProviderHost.terralist",target:"edgeProviderHost.edp",label:"authenticates via",points:[[1356,677],[1356,725],[1356,785],[1356,834]],labelBBox:{x:1357,y:742,width:109,height:18},parent:"edgeProviderHost",relations:["1q6ftvm"],color:"gray",line:"dashed",head:"normal"},{id:"1toht4t",source:"edgeCloud.edgeApi",target:"edgeCloud.edgeResources",label:"creates/destroys",points:[[863,1024],[863,1068],[863,1121],[863,1167]],labelBBox:{x:864,y:1089,width:107,height:18},parent:"edgeCloud",relations:["rr0lcz"],color:"gray",line:"dashed",head:"normal"},{id:"rj56uy",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantObservability",label:"deploys",points:[[18066,330],[18002,380],[17922,441],[17856,491]],labelBBox:{x:17972,y:395,width:52,height:18},parent:"otcTenantProd",relations:["1fxu52d"],color:"gray",line:"dashed",head:"normal"},{id:"u7ohgi",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantCustomerA",label:"deploys",points:[[18182,330],[18182,378],[18182,438],[18182,487]],labelBBox:{x:18183,y:395,width:52,height:18},parent:"otcTenantProd",relations:["6gfo3g"],color:"gray",line:"dashed",head:"normal"},{id:"1ypat9q",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantDev1",label:"deploys",points:[[18303,330],[18370,380],[18454,441],[18523,491]],labelBBox:{x:18418,y:395,width:52,height:18},parent:null,relations:["s1ie0n"],color:"gray",line:"dashed",head:"normal"},{id:"1oiku86",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantTestX",label:"deploys",points:[[18342,301],[18507,363],[18764,460],[18933,523]],labelBBox:{x:18643,y:395,width:52,height:18},parent:null,relations:["77azfi"],color:"gray",line:"dashed",head:"normal"},{id:"1m1lj8s",source:"otcKubernetes.edpCluster",target:"local.gitea.forgejoRunner",label:"runs workflows",points:[[4576,1640],[4990,1629],[6066,1572],[6066,1268],[6066,586],[6066,586],[6066,586],[6066,443],[6191,441],[6327,395],[6381,377],[8323,382],[8380,380],[9996,349],[11952,272],[12532,248]],labelBBox:{x:6067,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"19kg5y",source:"local.backstage.backstage",target:"local.backstage.database",label:"reads/writes",points:[[8608,1024],[8608,1068],[8608,1121],[8608,1166]],labelBBox:{x:8609,y:1089,width:79,height:18},parent:"local.backstage",relations:["c23sak"],color:"gray",line:"dashed",head:"normal"},{id:"1gfgfhk",source:"local.argocd.argocdAppController",target:"local.argocd.argocdRedis",label:"read/write",points:[[9205,1024],[9236,1043],[9270,1061],[9303,1074],[9547,1172],[9848,1223],[10033,1248]],labelBBox:{x:9397,y:1089,width:65,height:18},parent:"local.argocd",relations:["10vkxaf"],color:"gray",line:"dashed",head:"normal"},{id:"qfu5xm",source:"local.argocd.argocdAppSetController",target:"local.argocd.argocdRedis",label:"read/write",points:[[9665,1024],[9693,1042],[9724,1059],[9753,1074],[9844,1121],[9948,1166],[10034,1201]],labelBBox:{x:9826,y:1089,width:65,height:18},parent:"local.argocd",relations:["i8z0mi"],color:"gray",line:"dashed",head:"normal"},{id:"g7xnzs",source:"local.argocd.argocdRepoServer",target:"local.argocd.argocdRedis",label:"read/write",points:[[10038,1024],[10069,1069],[10106,1123],[10137,1169]],labelBBox:{x:10098,y:1089,width:65,height:18},parent:"local.argocd",relations:["iullhy"],color:"gray",line:"dashed",head:"normal"},{id:"fon3rk",source:"local.argocd.argocdServer",target:"local.argocd.argocdRedis",label:"read/write",points:[[10368,1024],[10337,1069],[10300,1123],[10269,1169]],labelBBox:{x:10323,y:1089,width:65,height:18},parent:"local.argocd",relations:["yfhhi5"],color:"gray",line:"dashed",head:"normal"},{id:"4zwy1m",source:"local.keycloak.keycloak",target:"local.keycloak.keycloakDB",label:"reads/writes",points:[[10898,1024],[10898,1068],[10898,1121],[10898,1166]],labelBBox:{x:10899,y:1089,width:79,height:18},parent:"local.keycloak",relations:["18zxrhs"],color:"gray",line:"dashed",head:"normal"},{id:"sb2j38",source:"local.monitoring.alloy",target:"local.monitoring.distributor",label:"pushes logs",points:[[7688,1024],[7688,1068],[7688,1121],[7688,1167]],labelBBox:{x:7689,y:1089,width:79,height:18},parent:"local.monitoring",relations:["11ollyi"],color:"gray",line:"dashed",head:"normal"},{id:"15juth8",source:"local.ingressNginx.ingressNginx",target:"local.backstage.backstage",label:"https",points:[[10543,677],[10519,697],[10491,716],[10462,727],[10345,772],[9461,762],[9336,765],[9308,766],[8862,765],[8836,773],[8793,787],[8751,812],[8715,839]],labelBBox:{x:10373,y:742,width:34,height:18},parent:"local",relations:["v8c8aq"],color:"gray",line:"dashed",head:"normal"},{id:"p2br4p",source:"local.ingressNginx.ingressNginx",target:"local.argocd.argocdServer",label:"https",points:[[10575,677],[10547,726],[10513,786],[10484,836]],labelBBox:{x:10534,y:742,width:34,height:18},parent:"local",relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"o229dq",source:"local.ingressNginx.ingressNginx",target:"local.gitea.forgejo",label:"https",points:[[10786,594],[11175,611],[12165,662],[12474,773],[12517,789],[12559,813],[12596,839]],labelBBox:{x:12450,y:742,width:34,height:18},parent:"local",relations:["123efwn"],color:"gray",line:"dashed",head:"normal"},{id:"2vnvvg",source:"local.ingressNginx.ingressNginx",target:"local.keycloak.keycloak",label:"https",points:[[10696,677],[10734,726],[10782,786],[10821,836]],labelBBox:{x:10763,y:742,width:34,height:18},parent:"local",relations:["h3rut2"],color:"gray",line:"dashed",head:"normal"},{id:"3znaik",source:"local.velero.velero",target:"local.minio.minio",label:"store backups",points:[[12250,677],[12250,725],[12250,784],[12250,833]],labelBBox:{x:12251,y:742,width:91,height:18},parent:"local",relations:["1mazt1x"],color:"gray",line:"dashed",head:"normal"},{id:"4ix58c",source:"local.ingressNginx.ingressNginx",target:"local.minio.minio",label:"https",points:[[10786,600],[11103,624],[11801,686],[12024,773],[12064,789],[12104,814],[12139,839]],labelBBox:{x:11986,y:742,width:34,height:18},parent:"local",relations:["fe65w2"],color:"gray",line:"dashed",head:"normal"},{id:"1hr2s5j",source:"local.ingressNginx.ingressNginx",target:"local.monitoring.alloy",label:"https",points:[[10543,677],[10519,698],[10491,716],[10462,727],[10197,827],[8182,685],[7913,773],[7871,787],[7829,812],[7794,838]],labelBBox:{x:10397,y:742,width:34,height:18},parent:"local",relations:["1jvab2g"],color:"gray",line:"dashed",head:"normal"},{id:"1nksp5g",source:"local.ingressNginx.ingressNginx",target:"local.monitoring.queryFrontend",label:"https",points:[[10543,677],[10519,698],[10491,716],[10462,727],[10244,810],[8587,701],[8366,773],[8323,787],[8281,812],[8245,839]],labelBBox:{x:10385,y:742,width:34,height:18},parent:"local",relations:["fs60l7"],color:"gray",line:"dashed",head:"normal"},{id:"m2japo",source:"local.ingressNginx.ingressNginx",target:"local.openbao.openbao",label:"https",points:[[10544,677],[10520,698],[10492,716],[10462,727],[10435,738],[8382,742],[8353,742],[8202,745],[7139,726],[6996,773],[6953,787],[6911,812],[6875,839]],labelBBox:{x:8354,y:742,width:34,height:18},parent:"local",relations:["1p30hav"],color:"gray",line:"dashed",head:"normal"},{id:"4drflo",source:"local.ingressNginx.ingressNginx",target:"local.fibonacci.fibonacci",label:"https",points:[[10786,632],[10890,664],[11027,712],[11140,773],[11174,792],[11208,815],[11239,838]],labelBBox:{x:11115,y:742,width:34,height:18},parent:"local",relations:["1i5f8um"],color:"gray",line:"dashed",head:"normal"},{id:"ihlgsc",source:"local.ingressNginx.ingressNginx",target:"local.mailhog.mailhog",label:"https",points:[[10786,599],[10980,616],[11312,660],[11574,773],[11613,790],[11652,814],[11686,839]],labelBBox:{x:11551,y:742,width:34,height:18},parent:"local",relations:["ofdedh"],color:"gray",line:"dashed",head:"normal"},{id:"se5brg",source:"local.gitea.forgejoRunner",target:"otcKubernetes.edpCluster",label:"register",points:[[12542,246],[11564,274],[6425,428],[6425,586],[6425,586],[6425,586],[6425,1268],[6425,1411],[6297,1404],[6164,1457],[5880,1571],[4968,1620],[4586,1636]],labelBBox:{x:6426,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"}]},"edp-per-tenant":{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/otc/edp.c4",description:null,title:"EDP per tenant",id:"edp-per-tenant",autoLayout:{direction:"TB"},hash:"1767a1203e463aa5c6283c309b8414cd4b5d1b8f",bounds:{x:0,y:0,width:2010,height:1175},nodes:[{id:"otc-edp-per-tenant",parent:null,level:0,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure","otc-edp-per-tenant.cce","otc-edp-per-tenant.cloudServices"],inEdges:[],outEdges:[],deploymentRef:"otc-edp-per-tenant",title:"OTC EDP per tenant cluster",kind:"cloud",technology:"OTC",color:"slate",shape:"rectangle",description:{txt:`OTC environment for EDP. EDP is the environment a customer gets from us. +and security scanning`},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"local.gitea.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:12542,y:844,width:340,height:180,labelBBox:{x:46,y:18,width:278,height:139}},{id:"local.gitea.forgejoRunner",parent:"local.gitea",level:2,children:[],inEdges:["1m1lj8s"],outEdges:["se5brg"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.gitea.forgejoRunner",modelRef:"forgejoRunner",x:12542,y:150,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"local.spark.sparkoperator",parent:"local",level:1,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Spark Operator",technology:"Spark",tags:[],icon:"tech:spark",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.spark.sparkoperator",modelRef:"edp.spark.sparkoperator",x:17102,y:150,width:320,height:180,labelBBox:{x:76,y:65,width:198,height:45}}],edges:[{id:"1xqlhup",source:"edgeProvider",target:"edgeSdk",label:"built using",points:[[1035,330],[1021,352],[1007,374],[995,395],[977,425],[959,458],[943,489]],labelBBox:{x:996,y:395,width:67,height:18},parent:null,relations:["1wlvsb5"],color:"gray",line:"dashed",head:"normal"},{id:"u9omtf",source:"edgeProvider",target:"edgeProviderHost.edp",label:"hosted on",points:[[1264,255],[1378,274],[1522,320],[1596,426],[1673,536],[1652,606],[1596,727],[1576,770],[1543,808],[1507,838]],labelBBox:{x:1647,y:576,width:66,height:18},parent:null,relations:["12ssq9"],color:"gray",line:"dashed",head:"normal"},{id:"r4j4sg",source:"edgeProvider",target:"edgeProviderHost.terralist",label:"published to",points:[[1160,330],[1197,379],[1244,439],[1282,489]],labelBBox:{x:1225,y:395,width:80,height:18},parent:null,relations:["1mpjz5d"],color:"gray",line:"dashed",head:"normal"},{id:"14pfq5a",source:"edgeSdk",target:"edgeProviderHost.edp",label:"hosted on",points:[[1011,677],[1077,727],[1160,788],[1228,838]],labelBBox:{x:1125,y:742,width:66,height:18},parent:null,relations:["1sm6ifh"],color:"gray",line:"dashed",head:"normal"},{id:"lw6otg",source:"edgeSdk",target:"edgeCloud.edgeApi",label:"calls",points:[[884,677],[880,725],[875,785],[871,834]],labelBBox:{x:879,y:742,width:32,height:18},parent:null,relations:["vfhcba"],color:"gray",line:"dashed",head:"normal"},{id:"1ogkmfn",source:"edgeConnectEnv",target:"otcKubernetes.edpCluster",label:"[...]",points:[[5676,330],[5725,397],[5779,491],[5779,586],[5779,586],[5779,586],[5779,1268],[5779,1420],[5657,1426],[5518,1488],[5355,1561],[4853,1609],[4586,1630]],labelBBox:{x:5780,y:922,width:25,height:18},parent:null,relations:["18dtot7","1k6h7jf","15ss7lz"],color:"gray",line:"dashed",head:"normal"},{id:"i6v3n",source:"otcKubernetes.edpCluster",target:"edgeConnectEnv",label:"runs workflows",points:[[4576,1629],[4742,1611],[5004,1565],[5205,1457],[5317,1397],[5420,1395],[5420,1268],[5420,586],[5420,586],[5420,586],[5420,495],[5470,404],[5517,338]],labelBBox:{x:5421,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"pit45i",source:"otc-edp-per-tenant.cce",target:"otc-edp-per-tenant.cloudServices",label:null,points:[[3134,1357],[3132,1391],[3130,1430],[3128,1465],[3127,1490],[3126,1518],[3125,1543]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["1fzhjm9","15njmlz","hks76r","1w18ve8"],color:"gray",line:"dashed",head:"normal"},{id:"b27cdb",source:"otc-edp-per-tenant.cce",target:"otcKubernetes.edpCluster",label:"register",points:[[3155,1357],[3167,1404],[3190,1457],[3232,1488],[3246,1498],[3370,1498],[3387,1500],[3691,1532],[4043,1584],[4246,1615]],labelBBox:{x:3233,y:1465,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"fkkf8y",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure",target:"otc-edp-per-tenant.cce",label:"registers",points:[[3135,330],[3136,521],[3139,968],[3140,1167]],labelBBox:{x:3139,y:742,width:58,height:18},parent:"otc-edp-per-tenant",relations:["g9oj4f"],color:"gray",line:"dashed",head:"normal"},{id:"r3wxut",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otc-edp-per-tenant.cce",label:"deploys edp to otc.cce",points:[[3627,990],[3508,1031],[3363,1082],[3350,1089],[3311,1112],[3272,1142],[3239,1170]],labelBBox:{x:3351,y:1089,width:143,height:18},parent:null,relations:["uk77s5"],color:"gray",line:"dashed",head:"normal"},{id:"1sng0q0",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",target:"otc-edp-per-tenant.cce",label:null,points:[[4112,1024],[4081,1043],[4046,1062],[4012,1074],[3755,1171],[3669,1110],[3403,1177],[3374,1184],[3344,1193],[3315,1203]],labelBBox:null,parent:null,relations:["jde35l"],color:"gray",line:"dashed",head:"normal"},{id:"p2umm7",source:"otcKubernetes.edpCluster",target:"otc-edp-per-tenant.cce",label:"runs workflows",points:[[4256,1627],[4014,1603],[3567,1552],[3420,1488],[3353,1459],[3287,1409],[3237,1364]],labelBBox:{x:3421,y:1465,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"e3benz",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otc-edp-per-tenant.cloudServices",label:"deploys edp to otc.paas",points:[[3627,949],[3366,976],[2865,1043],[2758,1177],[2681,1275],[2693,1351],[2758,1457],[2801,1527],[2880,1572],[2953,1599]],labelBBox:{x:2759,y:1255,width:152,height:18},parent:null,relations:["1pfc6bl"],color:"gray",line:"dashed",head:"normal"},{id:"1mbuxdd",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[2963,245],[2782,254],[2493,287],[2269,395],[2154,451],[2054,459],[2054,586],[2054,586],[2054,586],[2054,1268],[2054,1395],[2152,1408],[2269,1457],[2374,1501],[3333,1496],[3387,1500],[3691,1523],[4043,1578],[4246,1612]],labelBBox:{x:2055,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"126mt75",source:"otcKubernetes.edpCluster",target:"otc-edp-per-tenant.forgejoRunnerInfrastructure",label:"runs workflows",points:[[4256,1616],[4054,1584],[3696,1530],[3387,1500],[3294,1491],[3270,1493],[3177,1488],[3065,1481],[2774,1507],[2673,1457],[2486,1365],[2367,1310],[2367,1102],[2367,586],[2367,586],[2367,586],[2367,331],[2726,263],[2952,246]],labelBBox:{x:2368,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"llfvob",source:"otc-edpFoundry.cce",target:"otc-edpFoundry.workflowSetupEDPInfrastructure",label:"invokes",points:[[4113,677],[4050,727],[3972,788],[3908,838]],labelBBox:{x:4021,y:742,width:51,height:18},parent:"otc-edpFoundry",relations:["dola40"],color:"gray",line:"dashed",head:"normal"},{id:"fil3na",source:"otc-edpFoundry.cce",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",label:"invokes",points:[[4229,677],[4230,725],[4232,785],[4234,834]],labelBBox:{x:4233,y:742,width:51,height:18},parent:"otc-edpFoundry",relations:["1f5y9gc"],color:"gray",line:"dashed",head:"normal"},{id:"109g3jm",source:"otc-edpFoundry.forgejoRunnerInfrastructure",target:"otc-edpFoundry.cce",label:"registers",points:[[4226,330],[4226,378],[4226,438],[4226,487]],labelBBox:{x:4227,y:395,width:58,height:18},parent:"otc-edpFoundry",relations:["1umzqdy"],color:"gray",line:"dashed",head:"normal"},{id:"9r557q",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[3725,1024],[3656,1136],[3565,1330],[3663,1457],[3734,1548],[4046,1600],[4246,1625]],labelBBox:{x:3664,y:1255,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"c2grk6",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.workflowSetupEDPInfrastructure",label:"runs workflows",points:[[4256,1580],[4193,1550],[4124,1509],[4071,1457],[3948,1335],[3864,1148],[3821,1034]],labelBBox:{x:4072,y:1255,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"rivecr",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[4298,1024],[4311,1045],[4324,1068],[4335,1089],[4408,1235],[4420,1428],[4420,1543]],labelBBox:{x:4419,y:1255,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"1ean8sr",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",label:"runs workflows",points:[[4307,1553],[4281,1526],[4256,1493],[4241,1457],[4186,1319],[4200,1143],[4217,1034]],labelBBox:{x:4242,y:1255,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"1lrp92n",source:"otc-edpFoundry.forgejoRunnerInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[4397,272],[4653,324],[5107,436],[5107,586],[5107,586],[5107,586],[5107,1268],[5107,1504],[4791,1592],[4586,1624]],labelBBox:{x:5108,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"l1c2z3",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.forgejoRunnerInfrastructure",label:"runs workflows",points:[[4486,1553],[4498,1533],[4509,1510],[4516,1488],[4519,1478],[4516,1475],[4516,1465],[4505,1003],[4667,837],[4455,426],[4437,392],[4411,362],[4381,337]],labelBBox:{x:4566,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"c8rye7",source:"edgeProviderHost.terralist",target:"edgeProviderHost.edp",label:"authenticates via",points:[[1356,677],[1356,725],[1356,785],[1356,834]],labelBBox:{x:1357,y:742,width:109,height:18},parent:"edgeProviderHost",relations:["1q6ftvm"],color:"gray",line:"dashed",head:"normal"},{id:"1toht4t",source:"edgeCloud.edgeApi",target:"edgeCloud.edgeResources",label:"creates/destroys",points:[[863,1024],[863,1068],[863,1121],[863,1167]],labelBBox:{x:864,y:1089,width:107,height:18},parent:"edgeCloud",relations:["rr0lcz"],color:"gray",line:"dashed",head:"normal"},{id:"rj56uy",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantObservability",label:"deploys",points:[[18066,330],[18002,380],[17922,441],[17856,491]],labelBBox:{x:17972,y:395,width:52,height:18},parent:"otcTenantProd",relations:["1fxu52d"],color:"gray",line:"dashed",head:"normal"},{id:"u7ohgi",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantCustomerA",label:"deploys",points:[[18182,330],[18182,378],[18182,438],[18182,487]],labelBBox:{x:18183,y:395,width:52,height:18},parent:"otcTenantProd",relations:["6gfo3g"],color:"gray",line:"dashed",head:"normal"},{id:"1ypat9q",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantDev1",label:"deploys",points:[[18303,330],[18370,380],[18454,441],[18523,491]],labelBBox:{x:18418,y:395,width:52,height:18},parent:null,relations:["s1ie0n"],color:"gray",line:"dashed",head:"normal"},{id:"1oiku86",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantTestX",label:"deploys",points:[[18342,301],[18507,363],[18764,460],[18933,523]],labelBBox:{x:18643,y:395,width:52,height:18},parent:null,relations:["77azfi"],color:"gray",line:"dashed",head:"normal"},{id:"1m1lj8s",source:"otcKubernetes.edpCluster",target:"local.gitea.forgejoRunner",label:"runs workflows",points:[[4576,1640],[4990,1629],[6066,1572],[6066,1268],[6066,586],[6066,586],[6066,586],[6066,443],[6191,441],[6327,395],[6381,377],[8323,382],[8380,380],[9996,349],[11952,272],[12532,248]],labelBBox:{x:6067,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"19kg5y",source:"local.backstage.backstage",target:"local.backstage.database",label:"reads/writes",points:[[8608,1024],[8608,1068],[8608,1121],[8608,1166]],labelBBox:{x:8609,y:1089,width:79,height:18},parent:"local.backstage",relations:["c23sak"],color:"gray",line:"dashed",head:"normal"},{id:"1gfgfhk",source:"local.argocd.argocdAppController",target:"local.argocd.argocdRedis",label:"read/write",points:[[9205,1024],[9236,1043],[9270,1061],[9303,1074],[9547,1172],[9848,1223],[10033,1248]],labelBBox:{x:9397,y:1089,width:65,height:18},parent:"local.argocd",relations:["10vkxaf"],color:"gray",line:"dashed",head:"normal"},{id:"qfu5xm",source:"local.argocd.argocdAppSetController",target:"local.argocd.argocdRedis",label:"read/write",points:[[9665,1024],[9693,1042],[9724,1059],[9753,1074],[9844,1121],[9948,1166],[10034,1201]],labelBBox:{x:9826,y:1089,width:65,height:18},parent:"local.argocd",relations:["i8z0mi"],color:"gray",line:"dashed",head:"normal"},{id:"g7xnzs",source:"local.argocd.argocdRepoServer",target:"local.argocd.argocdRedis",label:"read/write",points:[[10038,1024],[10069,1069],[10106,1123],[10137,1169]],labelBBox:{x:10098,y:1089,width:65,height:18},parent:"local.argocd",relations:["iullhy"],color:"gray",line:"dashed",head:"normal"},{id:"fon3rk",source:"local.argocd.argocdServer",target:"local.argocd.argocdRedis",label:"read/write",points:[[10368,1024],[10337,1069],[10300,1123],[10269,1169]],labelBBox:{x:10323,y:1089,width:65,height:18},parent:"local.argocd",relations:["yfhhi5"],color:"gray",line:"dashed",head:"normal"},{id:"4zwy1m",source:"local.keycloak.keycloak",target:"local.keycloak.keycloakDB",label:"reads/writes",points:[[10898,1024],[10898,1068],[10898,1121],[10898,1166]],labelBBox:{x:10899,y:1089,width:79,height:18},parent:"local.keycloak",relations:["18zxrhs"],color:"gray",line:"dashed",head:"normal"},{id:"sb2j38",source:"local.monitoring.alloy",target:"local.monitoring.distributor",label:"pushes logs",points:[[7688,1024],[7688,1068],[7688,1121],[7688,1167]],labelBBox:{x:7689,y:1089,width:79,height:18},parent:"local.monitoring",relations:["11ollyi"],color:"gray",line:"dashed",head:"normal"},{id:"15juth8",source:"local.ingressNginx.ingressNginx",target:"local.backstage.backstage",label:"https",points:[[10543,677],[10519,697],[10491,716],[10462,727],[10345,772],[9461,762],[9336,765],[9308,766],[8862,765],[8836,773],[8793,787],[8751,812],[8715,839]],labelBBox:{x:10373,y:742,width:34,height:18},parent:"local",relations:["v8c8aq"],color:"gray",line:"dashed",head:"normal"},{id:"p2br4p",source:"local.ingressNginx.ingressNginx",target:"local.argocd.argocdServer",label:"https",points:[[10575,677],[10547,726],[10513,786],[10484,836]],labelBBox:{x:10534,y:742,width:34,height:18},parent:"local",relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"o229dq",source:"local.ingressNginx.ingressNginx",target:"local.gitea.forgejo",label:"https",points:[[10786,594],[11175,611],[12165,662],[12474,773],[12517,789],[12559,813],[12596,839]],labelBBox:{x:12450,y:742,width:34,height:18},parent:"local",relations:["123efwn"],color:"gray",line:"dashed",head:"normal"},{id:"2vnvvg",source:"local.ingressNginx.ingressNginx",target:"local.keycloak.keycloak",label:"https",points:[[10696,677],[10734,726],[10782,786],[10821,836]],labelBBox:{x:10763,y:742,width:34,height:18},parent:"local",relations:["h3rut2"],color:"gray",line:"dashed",head:"normal"},{id:"3znaik",source:"local.velero.velero",target:"local.minio.minio",label:"store backups",points:[[12250,677],[12250,725],[12250,784],[12250,833]],labelBBox:{x:12251,y:742,width:91,height:18},parent:"local",relations:["1mazt1x"],color:"gray",line:"dashed",head:"normal"},{id:"4ix58c",source:"local.ingressNginx.ingressNginx",target:"local.minio.minio",label:"https",points:[[10786,600],[11103,624],[11801,686],[12024,773],[12064,789],[12104,814],[12139,839]],labelBBox:{x:11986,y:742,width:34,height:18},parent:"local",relations:["fe65w2"],color:"gray",line:"dashed",head:"normal"},{id:"1hr2s5j",source:"local.ingressNginx.ingressNginx",target:"local.monitoring.alloy",label:"https",points:[[10543,677],[10519,698],[10491,716],[10462,727],[10197,827],[8182,685],[7913,773],[7871,787],[7829,812],[7794,838]],labelBBox:{x:10397,y:742,width:34,height:18},parent:"local",relations:["1jvab2g"],color:"gray",line:"dashed",head:"normal"},{id:"1nksp5g",source:"local.ingressNginx.ingressNginx",target:"local.monitoring.queryFrontend",label:"https",points:[[10543,677],[10519,698],[10491,716],[10462,727],[10244,810],[8587,701],[8366,773],[8323,787],[8281,812],[8245,839]],labelBBox:{x:10385,y:742,width:34,height:18},parent:"local",relations:["fs60l7"],color:"gray",line:"dashed",head:"normal"},{id:"m2japo",source:"local.ingressNginx.ingressNginx",target:"local.openbao.openbao",label:"https",points:[[10544,677],[10520,698],[10492,716],[10462,727],[10435,738],[8382,742],[8353,742],[8202,745],[7139,726],[6996,773],[6953,787],[6911,812],[6875,839]],labelBBox:{x:8354,y:742,width:34,height:18},parent:"local",relations:["1p30hav"],color:"gray",line:"dashed",head:"normal"},{id:"4drflo",source:"local.ingressNginx.ingressNginx",target:"local.fibonacci.fibonacci",label:"https",points:[[10786,632],[10890,664],[11027,712],[11140,773],[11174,792],[11208,815],[11239,838]],labelBBox:{x:11115,y:742,width:34,height:18},parent:"local",relations:["1i5f8um"],color:"gray",line:"dashed",head:"normal"},{id:"ihlgsc",source:"local.ingressNginx.ingressNginx",target:"local.mailhog.mailhog",label:"https",points:[[10786,599],[10980,616],[11312,660],[11574,773],[11613,790],[11652,814],[11686,839]],labelBBox:{x:11551,y:742,width:34,height:18},parent:"local",relations:["ofdedh"],color:"gray",line:"dashed",head:"normal"},{id:"se5brg",source:"local.gitea.forgejoRunner",target:"otcKubernetes.edpCluster",label:"register",points:[[12542,246],[11564,274],[6425,428],[6425,586],[6425,586],[6425,586],[6425,1268],[6425,1411],[6297,1404],[6164,1457],[5880,1571],[4968,1620],[4586,1636]],labelBBox:{x:6426,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"}]},"edp-per-tenant":{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/otc/edp.c4",description:null,title:"EDP per tenant",id:"edp-per-tenant",autoLayout:{direction:"TB"},hash:"1767a1203e463aa5c6283c309b8414cd4b5d1b8f",bounds:{x:0,y:0,width:2010,height:1175},nodes:[{id:"otc-edp-per-tenant",parent:null,level:0,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure","otc-edp-per-tenant.cce","otc-edp-per-tenant.cloudServices"],inEdges:[],outEdges:[],deploymentRef:"otc-edp-per-tenant",title:"OTC EDP per tenant cluster",kind:"cloud",technology:"OTC",color:"slate",shape:"rectangle",description:{txt:`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.`},tags:[],style:{opacity:15,size:"md"},depth:3,x:8,y:8,width:1994,height:1159,labelBBox:{x:6,y:0,width:181,height:15}},{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure",parent:"otc-edp-per-tenant",level:1,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner"],inEdges:[],outEdges:["1dcszi5"],deploymentRef:"otc-edp-per-tenant.forgejoRunnerInfrastructure",title:"EDP ForgejoRunner infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},tags:[],style:{opacity:15,size:"md"},depth:1,x:321,y:150,width:384,height:266,labelBBox:{x:6,y:0,width:235,height:15}},{id:"otc-edp-per-tenant.cce",parent:"otc-edp-per-tenant",level:1,children:["otc-edp-per-tenant.cce.edp"],inEdges:["1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],deploymentRef:"otc-edp-per-tenant.cce",title:"OTC CCE",kind:"kubernetes",technology:"Kubernetes",color:"red",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine"},tags:[],style:{opacity:15,size:"md"},depth:2,x:755,y:79,width:954,height:719,labelBBox:{x:6,y:0,width:54,height:15}},{id:"otc-edp-per-tenant.cce.edp",parent:"otc-edp-per-tenant.cce",level:2,children:["otc-edp-per-tenant.cce.edp.externalSecrets","otc-edp-per-tenant.cce.edp.ingressNginx","otc-edp-per-tenant.cce.edp.argoCD","otc-edp-per-tenant.cce.edp.forgejo"],inEdges:["1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],deploymentRef:"otc-edp-per-tenant.cce.edp",title:"EDP",kind:"cluster",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:787,y:132,width:890,height:634,labelBBox:{x:6,y:0,width:27,height:15}},{id:"otc-edp-per-tenant.cce.edp.externalSecrets",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:[],outEdges:[],kind:"instance",title:"external-secrets",description:{txt:"Provider to access externally stored Kubernetes secrets"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.externalSecrets",modelRef:"edp.externalSecrets",navigateTo:"externalSecrets",x:837,y:204,width:320,height:180,labelBBox:{x:39,y:54,width:242,height:65}},{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",parent:"otc-edp-per-tenant.forgejoRunnerInfrastructure",level:2,children:[],inEdges:[],outEdges:["1dcszi5"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:353,y:204,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}},{id:"otc-edp-per-tenant.cce.edp.ingressNginx",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:[],outEdges:["1ir70dd","1kr1wg1"],kind:"instance",title:"Ingress",description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.ingressNginx",modelRef:"edp.ingressNginx",navigateTo:"ingressNginx",x:1287,y:204,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:65}},{id:"otc-edp-per-tenant.cce.edp.argoCD",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:["1ir70dd"],outEdges:[],kind:"instance",title:"ArgoCD",description:{txt:"GitOps Service"},tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.argoCD",modelRef:"edp.argoCD",navigateTo:"argoCD",x:1307,y:536,width:320,height:180,labelBBox:{x:108,y:63,width:105,height:48}},{id:"otc-edp-per-tenant.cce.edp.forgejo",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:["1kr1wg1","1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],kind:"instance",title:"Forgejo",description:{txt:`Fully managed DevOps Platform offering capabilities like @@ -263,7 +263,7 @@ discover the expected and uncover the unexpected.`},technology:"Elasticsearch",t offering capabilities like code version controling collaboration and ticketing -and security scanning`},tags:[],technology:"Golang",kind:"container",isCustomized:!0,navigateTo:"forgejo",x:48,y:553,width:340,height:180,labelBBox:{x:46,y:17,width:279,height:139}},{id:"edp.garm",parent:"edp",level:1,children:["edp.garm.garm","edp.garm.providerEdgeConnect"],inEdges:["step-01","step-06","step-08","step-16"],outEdges:["step-03","step-04","step-07","step-09","step-18","step-19"],title:"Garm Image",modelRef:"edp.garm",shape:"rectangle",color:"primary",icon:"tech:docker",style:{opacity:20,size:"md"},tags:[],kind:"container",depth:1,x:709,y:142,width:1090,height:404,labelBBox:{x:6,y:0,width:77,height:15}},{id:"edp.garm.garm",parent:"edp.garm",level:2,children:[],inEdges:["step-01","step-06","step-08","step-16"],outEdges:["step-02","step-07","step-09","step-17"],title:"Garm",modelRef:"edp.garm.garm",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Provisions runners for Forgejo"},tags:[],kind:"component",x:749,y:316,width:325,height:180,labelBBox:{x:47,y:63,width:262,height:47}},{id:"edp.garm.providerEdgeConnect",parent:"edp.garm",level:2,children:[],inEdges:["step-02","step-17"],outEdges:["step-03","step-04","step-18","step-19"],title:"Garm Provider for EdgeConnect",modelRef:"edp.garm.providerEdgeConnect",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Acts as abstraction layer for EdgeConnect"},tags:[],kind:"component",x:1349,y:203,width:409,height:180,labelBBox:{x:47,y:54,width:347,height:65}},{id:"edgeConnect",parent:null,level:0,children:[],inEdges:["step-03","step-04","step-18","step-19"],outEdges:["step-05"],title:"EdgeConnect Cloud",modelRef:"edgeConnect",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Provides an API and control plane to run applications on the edge"},tags:[],kind:"system",x:2135,y:169,width:320,height:180,labelBBox:{x:24,y:54,width:273,height:65}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["step-05","step-09","step-12","step-15"],outEdges:["step-06","step-10","step-11","step-12","step-13","step-15"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:2665,y:810,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}}],edges:[{id:"step-01",source:"edp.forgejo",target:"edp.garm.garm",label:"(Webhook) A new job is pending",points:[[389,687],[482,703],[596,707],[689,664],[761,631],[818,563],[857,504]],labelBBox:{x:458,y:632,width:228,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@0"},{id:"step-02",source:"edp.garm.garm",target:"edp.garm.providerEdgeConnect",label:"Create new runner",points:[[1074,428],[1142,433],[1220,433],[1289,417],[1321,410],[1352,399],[1383,387]],labelBBox:{x:1144,y:385,width:141,height:19},parent:"edp.garm",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@1"},{id:"step-03",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Create App (Runner)",points:[[1639,203],[1692,152],[1767,92],[1847,65],[1943,32],[1980,29],[2075,65],[2128,85],[2176,124],[2214,162]],labelBBox:{x:1886,y:7,width:156,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@2"},{id:"step-04",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Create AppInstance (Runner)",points:[[1759,234],[1788,228],[1818,222],[1847,219],[1948,206],[1974,210],[2075,219],[2091,220],[2108,222],[2125,225]],labelBBox:{x:1859,y:178,width:209,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@3"},{id:"step-05",source:"edgeConnect",target:"forgejoRunner",label:"Deploys",points:[[2448,349],[2502,386],[2560,432],[2605,484],[2687,579],[2750,711],[2787,800]],labelBBox:{x:2524,y:372,width:77,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@4"},{id:"step-06",source:"forgejoRunner",target:"edp.garm.garm",label:"Get runner registration token",points:[[1084,448],[1101,452],[1118,455],[1134,459],[1784,591],[2007,420],[2605,706],[2657,731],[2706,772],[2745,810]],labelBBox:{x:1862,y:491,width:204,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@5"},{id:"step-07",source:"edp.garm.garm",target:"edp.forgejo",label:"Get runner registration token",points:[[399,600],[488,577],[595,546],[689,510],[709,503],[730,495],[750,486]],labelBBox:{x:470,y:478,width:204,height:19},dir:"back",parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@6"},{id:"step-08",source:"edp.forgejo",target:"edp.garm.garm",label:"Token",points:[[300,553],[341,514],[393,472],[449,449],[540,410],[650,399],[739,397]],labelBBox:{x:539,y:368,width:65,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@7"},{id:"step-09",source:"edp.garm.garm",target:"forgejoRunner",label:"Token",points:[[1074,487],[1094,496],[1115,504],[1134,511],[1676,699],[2346,822],[2654,873]],labelBBox:{x:1931,y:682,width:65,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@8"},{id:"step-10",source:"forgejoRunner",target:"edp.forgejo",label:"Register runner",points:[[399,713],[415,718],[432,722],[449,726],[1184,886],[1385,807],[2135,865],[2304,878],[2346,883],[2515,892],[2564,894],[2617,896],[2665,897]],labelBBox:{x:1492,y:803,width:129,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@9"},{id:"step-11",source:"forgejoRunner",target:"edp.forgejo",label:"Fetch job",points:[[272,741],[371,914],[606,1253],[911,1253],[911,1253],[911,1253],[2296,1253],[2485,1253],[2658,1094],[2751,990]],labelBBox:{x:1511,y:1220,width:92,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@10"},{id:"step-12",source:"forgejoRunner",target:"forgejoRunner",label:"Work on job",points:[[2802,810],[2796,753],[2804,700],[2825,700],[2845,700],[2852,747],[2849,799]],labelBBox:{x:2773,y:667,width:109,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@11"},{id:"step-13",source:"forgejoRunner",target:"edp.forgejo",label:"Send result",points:[[240,743],[268,866],[332,1075],[449,1217],[604,1404],[667,1512],[911,1512],[911,1512],[911,1512],[2296,1512],[2568,1512],[2731,1160],[2794,990]],labelBBox:{x:1505,y:1479,width:104,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@12"},{id:"step-14",source:"edp.forgejo",target:"edp.forgejo",label:"Deregister Runner",points:[[157,553],[142,496],[163,443],[218,443],[271,443],[292,490],[282,542]],labelBBox:{x:147,y:410,width:148,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@13"},{id:"step-15",source:"forgejoRunner",target:"forgejoRunner",label:"Terminate",points:[[2788,810],[2763,708],[2775,590],[2825,590],[2873,590],[2886,700],[2864,800]],labelBBox:{x:2779,y:557,width:97,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@14"},{id:"step-16",source:"edp.forgejo",target:"edp.garm.garm",label:"(Webhook) A job finished",points:[[258,553],[295,479],[358,379],[449,334],[538,289],[649,304],[740,332]],labelBBox:{x:477,y:273,width:189,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@15"},{id:"step-17",source:"edp.garm.garm",target:"edp.garm.providerEdgeConnect",label:"Delete runner",points:[[1074,368],[1094,363],[1115,359],[1134,356],[1201,343],[1274,332],[1340,322]],labelBBox:{x:1155,y:298,width:119,height:19},parent:"edp.garm",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@16"},{id:"step-18",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Delete AppInstance (Runner)",points:[[1759,294],[1855,294],[1971,291],[2075,284],[2091,283],[2108,282],[2125,280]],labelBBox:{x:1856,y:252,width:215,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@17"},{id:"step-19",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Delete App (Runner)",points:[[1759,350],[1856,369],[1972,381],[2075,358],[2092,355],[2109,350],[2126,344]],labelBBox:{x:1883,y:326,width:161,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@18"}]},forgejoGarmArchitecture:{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/garm-arch.c4",description:{txt:"Deployment architecture showing GARM orchestrating ephemeral runners on Edge Connect for Forgejo Actions"},title:"Architecture of Forgejo, Garm and Edge Connect",id:"forgejoGarmArchitecture",autoLayout:{direction:"TB"},hash:"b15c1909d7caa6a80c1a7e432ba68166130b8498",bounds:{x:0,y:0,width:1510,height:1457},nodes:[{id:"otcKubernetes",parent:null,level:0,children:["otcKubernetes.edpCluster"],inEdges:["16jincy","gly1kq","9r08on"],outEdges:["dvpbhz"],deploymentRef:"otcKubernetes",title:"OTC Kubernetes",kind:"environment",technology:"Kubernetes",color:"blue",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine hosting EDP platform"},tags:[],style:{opacity:15,size:"md"},depth:2,x:8,y:8,width:996,height:1441,labelBBox:{x:6,y:0,width:106,height:15}},{id:"otcKubernetes.edpCluster",parent:"otcKubernetes",level:1,children:["otcKubernetes.edpCluster.forgejoActions","otcKubernetes.edpCluster.garmService","otcKubernetes.edpCluster.forgejo","otcKubernetes.edpCluster.providerEdgeConnect"],inEdges:["16jincy","gly1kq","9r08on"],outEdges:["dvpbhz"],deploymentRef:"otcKubernetes.edpCluster",title:"EDP Cluster",kind:"cluster",color:"primary",shape:"rectangle",description:{txt:"EDP platform cluster"},tags:[],style:{opacity:15,size:"md"},depth:1,x:40,y:61,width:932,height:1356,labelBBox:{x:6,y:0,width:82,height:15}},{id:"otcKubernetes.edpCluster.forgejoActions",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["9r08on"],outEdges:["dvpbhz"],kind:"instance",title:"Forgejo Actions",description:{txt:"CI/CD orchestration for Forgejo"},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.forgejoActions",modelRef:"edp.forgejoActions",x:590,y:132,width:332,height:180,labelBBox:{x:46,y:54,width:270,height:67}},{id:"edgeConnectEnv",parent:null,level:0,children:["edgeConnectEnv.runnerInfrastructure"],inEdges:["dvpbhz"],outEdges:["16jincy","gly1kq","9r08on"],deploymentRef:"edgeConnectEnv",title:"Edge Connect",kind:"environment",technology:"Edge Connect Platform",color:"green",shape:"rectangle",modelRef:"forgejoRunner",icon:"tech:docker",description:{txt:"Edge infrastructure for ephemeral runner deployment"},tags:[],style:{opacity:15,size:"md"},depth:2,x:1054,y:408,width:448,height:351,labelBBox:{x:6,y:0,width:93,height:15}},{id:"edgeConnectEnv.runnerInfrastructure",parent:"edgeConnectEnv",level:1,children:["edgeConnectEnv.runnerInfrastructure.forgejoRunner"],inEdges:["dvpbhz"],outEdges:["16jincy","gly1kq","9r08on"],deploymentRef:"edgeConnectEnv.runnerInfrastructure",title:"Runner Infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Dynamically provisioned runner instances"},tags:[],style:{opacity:15,size:"md"},depth:1,x:1086,y:461,width:384,height:266,labelBBox:{x:6,y:0,width:156,height:15}},{id:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",parent:"edgeConnectEnv.runnerInfrastructure",level:2,children:[],inEdges:["dvpbhz"],outEdges:["16jincy","gly1kq","9r08on"],kind:"instance",title:"Forgejo Runner",description:{txt:"Ephemeral Forgejo Actions runner"},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:1118,y:515,width:320,height:180,labelBBox:{x:44,y:63,width:232,height:47}},{id:"otcKubernetes.edpCluster.garmService",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["16jincy"],outEdges:["su6mp0"],kind:"instance",title:"Garm",description:{txt:"GARM - Runner lifecycle manager"},tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.garmService",modelRef:"edp.garm.garm",x:90,y:854,width:352,height:180,labelBBox:{x:46,y:63,width:290,height:48}},{id:"otcKubernetes.edpCluster.forgejo",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["gly1kq"],outEdges:[],kind:"instance",title:"Forgejo",description:{txt:"Forgejo - Git platform with Actions"},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otcKubernetes.edpCluster.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:572,y:854,width:350,height:180,labelBBox:{x:46,y:54,width:288,height:67}},{id:"otcKubernetes.edpCluster.providerEdgeConnect",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["su6mp0"],outEdges:[],kind:"instance",title:"Garm Provider for EdgeConnect",description:{txt:"GARM Provider for Edge Connect"},tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.providerEdgeConnect",modelRef:"edp.garm.providerEdgeConnect",x:90,y:1187,width:409,height:180,labelBBox:{x:46,y:63,width:348,height:48}}],edges:[{id:"su6mp0",source:"otcKubernetes.edpCluster.garmService",target:"otcKubernetes.edpCluster.providerEdgeConnect",label:"calls binary",points:[[274,1034],[278,1078],[282,1131],[286,1177]],labelBBox:{x:282,y:1099,width:74,height:18},parent:"otcKubernetes.edpCluster",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal"},{id:"dvpbhz",source:"otcKubernetes.edpCluster.forgejoActions",target:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",label:"runs workflows",points:[[922,292],[985,323],[1056,362],[1114,408],[1149,436],[1182,473],[1209,507]],labelBBox:{x:1098,y:377,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"16jincy",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.garmService",label:"retrieves bootstrap information",points:[[1202,695],[1176,719],[1146,743],[1114,759],[869,878],[771,785],[507,854],[489,859],[470,865],[452,871]],labelBBox:{x:1086,y:766,width:193,height:18},parent:null,relations:["1t1b56a"],color:"gray",line:"dashed",head:"normal"},{id:"gly1kq",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.forgejo",label:"registers with and picks up jobs",points:[[1192,694],[1168,717],[1141,740],[1114,759],[1057,798],[991,834],[931,863]],labelBBox:{x:1097,y:766,width:199,height:18},parent:null,relations:["1k6h7jf"],color:"gray",line:"dashed",head:"normal"},{id:"9r08on",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.forgejoActions",label:"register",points:[[1211,515],[1183,480],[1149,441],[1114,408],[1062,359],[994,320],[931,290]],labelBBox:{x:1099,y:377,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"}]},"view_gitops-inner-outer-loop_15":{_type:"dynamic",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/gitops-inner-outer-loop.c4",description:null,title:"outer-ci-loop",id:"view_gitops-inner-outer-loop_15",variant:"diagram",autoLayout:{direction:"LR"},hash:"d85bdffdca5f49220457db75761ae8ba47744c16",sequenceLayout:{actors:[{id:"localbox.git",x:32,y:52,width:320,height:180,ports:[{id:"step-01_source",cx:160,cy:338,height:40,type:"source",position:"right"}]},{id:"edp.forgejogit",x:448,y:52,width:320,height:180,ports:[{id:"step-01_target",cx:160,cy:338,height:24,type:"target",position:"left"},{id:"step-02_source",cx:160,cy:360,height:40,type:"source",position:"right"},{id:"step-04_target",cx:160,cy:475,height:24,type:"target",position:"right"},{id:"step-05_source",cx:160,cy:568,height:40,type:"source",position:"right"}]},{id:"forgejoRunner",x:832,y:52,width:320,height:180,ports:[{id:"step-02_target",cx:160,cy:360,height:24,type:"target",position:"left"},{id:"step-03_source",cx:160,cy:382,height:40,type:"source",position:"right"},{id:"step-04_source",cx:160,cy:475,height:40,type:"source",position:"left"}]},{id:"edp.imageregistry",x:1216,y:52,width:373,height:180,ports:[{id:"step-03_target",cx:187,cy:382,height:24,type:"target",position:"left"},{id:"step-07_target",cx:187,cy:683,height:24,type:"target",position:"right"}]},{id:"edp.argoCD",x:1649,y:52,width:320,height:180,ports:[{id:"step-05_target",cx:160,cy:568,height:24,type:"target",position:"left"},{id:"step-06_source",cx:160,cy:590,height:40,type:"source",position:"right"}]},{id:"cloud",x:2033,y:52,width:320,height:180,ports:[{id:"step-06_target",cx:160,cy:590,height:24,type:"target",position:"left"},{id:"step-07_source",cx:160,cy:683,height:40,type:"source",position:"left"}]}],compounds:[{depth:0,x:0,y:0,width:384,height:527,id:"localbox",origin:"localbox"},{depth:0,x:416,y:0,width:384,height:735,id:"edp-1",origin:"edp"},{depth:0,x:1184,y:0,width:817,height:828,id:"edp-2",origin:"edp"}],steps:[{id:"step-01",sourceHandle:"step-01_source",targetHandle:"step-01_target",labelBBox:{width:91,height:27}},{id:"step-02",sourceHandle:"step-02_source",targetHandle:"step-02_target",labelBBox:{width:92,height:27}},{id:"step-03",sourceHandle:"step-03_source",targetHandle:"step-03_target",labelBBox:{width:159,height:27}},{id:"step-04",sourceHandle:"step-04_source",targetHandle:"step-04_target",labelBBox:{width:174,height:27}},{id:"step-05",sourceHandle:"step-05_source",targetHandle:"step-05_target",labelBBox:{width:164,height:27}},{id:"step-06",sourceHandle:"step-06_source",targetHandle:"step-06_target",labelBBox:{width:161,height:27}},{id:"step-07",sourceHandle:"step-07_source",targetHandle:"step-07_target",labelBBox:{width:113,height:27}}],parallelAreas:[],bounds:{x:0,y:0,width:2353,height:828}},bounds:{x:0,y:0,width:2150,height:1243},nodes:[{id:"localbox",parent:null,level:0,children:["localbox.git"],inEdges:[],outEdges:["step-01"],title:"localbox",modelRef:"localbox",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A local development system"},tags:[],technology:"Linux/Windows/Mac",kind:"system",depth:1,x:8,y:306,width:384,height:265,labelBBox:{x:6,y:0,width:66,height:15}},{id:"localbox.git",parent:"localbox",level:1,children:[],inEdges:[],outEdges:["step-01"],title:"git",modelRef:"localbox.git",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:15,size:"md"},description:{txt:"local git"},tags:[],technology:"Git",kind:"component",x:40,y:359,width:320,height:180,labelBBox:{x:119,y:53,width:113,height:67}},{id:"edp",parent:null,level:0,children:["edp.forgejogit","edp.imageregistry","edp.argoCD","edp.forgejo"],inEdges:["step-01","step-03","step-04","step-07"],outEdges:["step-02","step-06"],title:"EDP",modelRef:"edp",shape:"rectangle",color:"secondary",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",depth:1,navigateTo:"edp",x:528,y:8,width:1064,height:861,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edp.forgejogit",parent:"edp",level:1,children:[],inEdges:["step-01","step-04"],outEdges:["step-02","step-05"],title:"ForgejoGit",modelRef:"edp.forgejogit",shape:"rectangle",color:"secondary",icon:"tech:git",style:{opacity:15,size:"md"},tags:[],kind:"component",x:595,y:359,width:320,height:180,labelBBox:{x:97,y:74,width:155,height:24}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["step-02"],outEdges:["step-03","step-04"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:1232,y:909,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"edp.imageregistry",parent:"edp",level:1,children:[],inEdges:["step-03","step-07"],outEdges:[],title:"Forgejo OCI Image Registry",modelRef:"edp.imageregistry",shape:"rectangle",color:"secondary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Container Image Registry"},tags:[],technology:"Golang",kind:"component",x:568,y:649,width:373,height:180,labelBBox:{x:46,y:53,width:311,height:67}},{id:"edp.argoCD",parent:"edp",level:1,children:[],inEdges:["step-05"],outEdges:["step-06"],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"secondary",style:{opacity:20,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:1232,y:495,width:320,height:180,labelBBox:{x:107,y:63,width:105,height:48}},{id:"cloud",parent:null,level:0,children:[],inEdges:["step-06"],outEdges:["step-07"],title:"Cloud",modelRef:"cloud",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Cloud environments"},tags:[],technology:"IaaS/PaaS",kind:"system",x:1830,y:1063,width:320,height:180,labelBBox:{x:91,y:53,width:137,height:67}},{id:"edp.forgejo",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"gray",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform +and security scanning`},tags:[],technology:"Golang",kind:"container",isCustomized:!0,navigateTo:"forgejo",x:48,y:553,width:340,height:180,labelBBox:{x:46,y:17,width:279,height:139}},{id:"edp.garm",parent:"edp",level:1,children:["edp.garm.garm","edp.garm.providerEdgeConnect"],inEdges:["step-01","step-06","step-08","step-16"],outEdges:["step-03","step-04","step-07","step-09","step-18","step-19"],title:"Garm Image",modelRef:"edp.garm",shape:"rectangle",color:"primary",icon:"tech:docker",style:{opacity:20,size:"md"},tags:[],kind:"container",depth:1,x:709,y:142,width:1090,height:404,labelBBox:{x:6,y:0,width:77,height:15}},{id:"edp.garm.garm",parent:"edp.garm",level:2,children:[],inEdges:["step-01","step-06","step-08","step-16"],outEdges:["step-02","step-07","step-09","step-17"],title:"Garm",modelRef:"edp.garm.garm",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Provisions runners for Forgejo"},tags:[],kind:"component",x:749,y:316,width:325,height:180,labelBBox:{x:47,y:63,width:262,height:47}},{id:"edp.garm.providerEdgeConnect",parent:"edp.garm",level:2,children:[],inEdges:["step-02","step-17"],outEdges:["step-03","step-04","step-18","step-19"],title:"Garm Provider for EdgeConnect",modelRef:"edp.garm.providerEdgeConnect",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Acts as abstraction layer for EdgeConnect"},tags:[],kind:"component",x:1349,y:203,width:409,height:180,labelBBox:{x:47,y:54,width:347,height:65}},{id:"edgeConnect",parent:null,level:0,children:[],inEdges:["step-03","step-04","step-18","step-19"],outEdges:["step-05"],title:"EdgeConnect Cloud",modelRef:"edgeConnect",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Provides an API and control plane to run applications on the edge"},tags:[],kind:"system",x:2135,y:169,width:320,height:180,labelBBox:{x:24,y:54,width:273,height:65}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["step-05","step-09","step-12","step-15"],outEdges:["step-06","step-10","step-11","step-12","step-13","step-15"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:2665,y:810,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}}],edges:[{id:"step-01",source:"edp.forgejo",target:"edp.garm.garm",label:"(Webhook) A new job is pending",points:[[389,687],[482,703],[596,707],[689,664],[761,631],[818,563],[857,504]],labelBBox:{x:458,y:632,width:228,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@0"},{id:"step-02",source:"edp.garm.garm",target:"edp.garm.providerEdgeConnect",label:"Create new runner",points:[[1074,428],[1142,433],[1220,433],[1289,417],[1321,410],[1352,399],[1383,387]],labelBBox:{x:1144,y:385,width:141,height:19},parent:"edp.garm",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@1"},{id:"step-03",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Create App (Runner)",points:[[1639,203],[1692,152],[1767,92],[1847,65],[1943,32],[1980,29],[2075,65],[2128,85],[2176,124],[2214,162]],labelBBox:{x:1886,y:7,width:156,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@2"},{id:"step-04",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Create AppInstance (Runner)",points:[[1759,234],[1788,228],[1818,222],[1847,219],[1948,206],[1974,210],[2075,219],[2091,220],[2108,222],[2125,225]],labelBBox:{x:1859,y:178,width:209,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@3"},{id:"step-05",source:"edgeConnect",target:"forgejoRunner",label:"Deploys",points:[[2448,349],[2502,386],[2560,432],[2605,484],[2687,579],[2750,711],[2787,800]],labelBBox:{x:2524,y:372,width:77,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@4"},{id:"step-06",source:"forgejoRunner",target:"edp.garm.garm",label:"Get runner registration token",points:[[1084,448],[1101,452],[1118,455],[1134,459],[1784,591],[2007,420],[2605,706],[2657,731],[2706,772],[2745,810]],labelBBox:{x:1862,y:491,width:204,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@5"},{id:"step-07",source:"edp.garm.garm",target:"edp.forgejo",label:"Get runner registration token",points:[[399,600],[488,577],[595,546],[689,510],[709,503],[730,495],[750,486]],labelBBox:{x:470,y:478,width:204,height:19},dir:"back",parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@6"},{id:"step-08",source:"edp.forgejo",target:"edp.garm.garm",label:"Token",points:[[300,553],[341,514],[393,472],[449,449],[540,410],[650,399],[739,397]],labelBBox:{x:539,y:368,width:65,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@7"},{id:"step-09",source:"edp.garm.garm",target:"forgejoRunner",label:"Token",points:[[1074,487],[1094,496],[1115,504],[1134,511],[1676,699],[2346,822],[2654,873]],labelBBox:{x:1931,y:682,width:65,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@8"},{id:"step-10",source:"forgejoRunner",target:"edp.forgejo",label:"Register runner",points:[[399,713],[415,718],[432,722],[449,726],[1184,886],[1385,807],[2135,865],[2304,878],[2346,883],[2515,892],[2564,894],[2617,896],[2665,897]],labelBBox:{x:1492,y:803,width:129,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@9"},{id:"step-11",source:"forgejoRunner",target:"edp.forgejo",label:"Fetch job",points:[[272,741],[371,914],[606,1253],[911,1253],[911,1253],[911,1253],[2296,1253],[2485,1253],[2658,1094],[2751,990]],labelBBox:{x:1511,y:1220,width:92,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@10"},{id:"step-12",source:"forgejoRunner",target:"forgejoRunner",label:"Work on job",points:[[2802,810],[2796,753],[2804,700],[2825,700],[2845,700],[2852,747],[2849,799]],labelBBox:{x:2773,y:667,width:109,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@11"},{id:"step-13",source:"forgejoRunner",target:"edp.forgejo",label:"Send result",points:[[240,743],[268,866],[332,1075],[449,1217],[604,1404],[667,1512],[911,1512],[911,1512],[911,1512],[2296,1512],[2568,1512],[2731,1160],[2794,990]],labelBBox:{x:1505,y:1479,width:104,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@12"},{id:"step-14",source:"edp.forgejo",target:"edp.forgejo",label:"Deregister Runner",points:[[157,553],[142,496],[163,443],[218,443],[271,443],[292,490],[282,542]],labelBBox:{x:147,y:410,width:148,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@13"},{id:"step-15",source:"forgejoRunner",target:"forgejoRunner",label:"Terminate",points:[[2788,810],[2763,708],[2775,590],[2825,590],[2873,590],[2886,700],[2864,800]],labelBBox:{x:2779,y:557,width:97,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@14"},{id:"step-16",source:"edp.forgejo",target:"edp.garm.garm",label:"(Webhook) A job finished",points:[[258,553],[295,479],[358,379],[449,334],[538,289],[649,304],[740,332]],labelBBox:{x:477,y:273,width:189,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@15"},{id:"step-17",source:"edp.garm.garm",target:"edp.garm.providerEdgeConnect",label:"Delete runner",points:[[1074,368],[1094,363],[1115,359],[1134,356],[1201,343],[1274,332],[1340,322]],labelBBox:{x:1155,y:298,width:119,height:19},parent:"edp.garm",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@16"},{id:"step-18",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Delete AppInstance (Runner)",points:[[1759,294],[1855,294],[1971,291],[2075,284],[2091,283],[2108,282],[2125,280]],labelBBox:{x:1856,y:252,width:215,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@17"},{id:"step-19",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Delete App (Runner)",points:[[1759,350],[1856,369],[1972,381],[2075,358],[2092,355],[2109,350],[2126,344]],labelBBox:{x:1883,y:326,width:161,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@18"}]},forgejoGarmArchitecture:{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/garm-arch.c4",description:{txt:"Deployment architecture showing GARM orchestrating ephemeral runners on Edge Connect for Forgejo Actions"},title:"Architecture of Forgejo, Garm and Edge Connect",id:"forgejoGarmArchitecture",autoLayout:{direction:"TB"},hash:"c704c24d8449d144021a9ce47b0047cf36a1a865",bounds:{x:0,y:0,width:1588,height:1521},nodes:[{id:"otcKubernetes",parent:null,level:0,children:["otcKubernetes.edpCluster"],inEdges:["ldqgs7","gly1kq","9r08on"],outEdges:["dvpbhz"],deploymentRef:"otcKubernetes",title:"OTC Kubernetes",kind:"environment",technology:"Kubernetes",color:"blue",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine hosting EDP platform"},tags:[],style:{opacity:15,size:"md"},depth:3,x:8,y:8,width:1074,height:1505,labelBBox:{x:6,y:0,width:106,height:15}},{id:"otcKubernetes.edpCluster",parent:"otcKubernetes",level:1,children:["otcKubernetes.edpCluster.forgejoActions","otcKubernetes.edpCluster.edpCluster","otcKubernetes.edpCluster.forgejo"],inEdges:["ldqgs7","gly1kq","9r08on"],outEdges:["dvpbhz"],deploymentRef:"otcKubernetes.edpCluster",title:"EDP Cluster",kind:"cluster",color:"primary",shape:"rectangle",description:{txt:"EDP platform cluster"},tags:[],style:{opacity:15,size:"md"},depth:2,x:40,y:61,width:1010,height:1420,labelBBox:{x:6,y:0,width:82,height:15}},{id:"otcKubernetes.edpCluster.forgejoActions",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["9r08on"],outEdges:["dvpbhz"],kind:"instance",title:"Forgejo Actions",description:{txt:"CI/CD orchestration for Forgejo"},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.forgejoActions",modelRef:"edp.forgejoActions",x:668,y:132,width:332,height:180,labelBBox:{x:46,y:54,width:270,height:67}},{id:"edgeConnectEnv",parent:null,level:0,children:["edgeConnectEnv.runnerInfrastructure"],inEdges:["dvpbhz"],outEdges:["ldqgs7","gly1kq","9r08on"],deploymentRef:"edgeConnectEnv",title:"Edge Connect",kind:"environment",technology:"Edge Connect Platform",color:"green",shape:"rectangle",modelRef:"forgejoRunner",icon:"tech:docker",description:{txt:"Edge infrastructure for ephemeral runner deployment"},tags:[],style:{opacity:15,size:"md"},depth:2,x:1132,y:408,width:448,height:351,labelBBox:{x:6,y:0,width:93,height:15}},{id:"edgeConnectEnv.runnerInfrastructure",parent:"edgeConnectEnv",level:1,children:["edgeConnectEnv.runnerInfrastructure.forgejoRunner"],inEdges:["dvpbhz"],outEdges:["ldqgs7","gly1kq","9r08on"],deploymentRef:"edgeConnectEnv.runnerInfrastructure",title:"Runner Infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Dynamically provisioned runner instances"},tags:[],style:{opacity:15,size:"md"},depth:1,x:1164,y:461,width:384,height:266,labelBBox:{x:6,y:0,width:156,height:15}},{id:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",parent:"edgeConnectEnv.runnerInfrastructure",level:2,children:[],inEdges:["dvpbhz"],outEdges:["ldqgs7","gly1kq","9r08on"],kind:"instance",title:"Forgejo Runner",description:{txt:"Ephemeral Forgejo Actions runner"},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:1196,y:515,width:320,height:180,labelBBox:{x:44,y:63,width:232,height:47}},{id:"otcKubernetes.edpCluster.edpCluster",parent:"otcKubernetes.edpCluster",level:2,children:["otcKubernetes.edpCluster.edpCluster.garmService","otcKubernetes.edpCluster.edpCluster.providerEdgeConnect"],inEdges:["ldqgs7"],outEdges:[],deploymentRef:"otcKubernetes.edpCluster.edpCluster",title:"GARM pod",kind:"environment",technology:"Kubernetes",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:90,y:797,width:510,height:634,labelBBox:{x:6,y:0,width:65,height:15}},{id:"otcKubernetes.edpCluster.edpCluster.garmService",parent:"otcKubernetes.edpCluster.edpCluster",level:3,children:[],inEdges:["ldqgs7"],outEdges:["9d8wuc"],kind:"instance",title:"Garm",description:{txt:"GARM - Runner lifecycle manager"},tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.edpCluster.garmService",modelRef:"edp.garm.garm",x:168,y:869,width:352,height:180,labelBBox:{x:46,y:63,width:290,height:47}},{id:"otcKubernetes.edpCluster.forgejo",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["gly1kq"],outEdges:[],kind:"instance",title:"Forgejo",description:{txt:"Forgejo - Git platform with Actions"},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otcKubernetes.edpCluster.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:650,y:869,width:350,height:180,labelBBox:{x:46,y:53,width:288,height:67}},{id:"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect",parent:"otcKubernetes.edpCluster.edpCluster",level:3,children:[],inEdges:["9d8wuc"],outEdges:[],kind:"instance",title:"Garm Provider for EdgeConnect",description:{txt:"GARM Provider for Edge Connect"},tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect",modelRef:"edp.garm.providerEdgeConnect",x:140,y:1201,width:409,height:180,labelBBox:{x:46,y:63,width:348,height:48}}],edges:[{id:"9d8wuc",source:"otcKubernetes.edpCluster.edpCluster.garmService",target:"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect",label:"calls binary",points:[[344,1048],[344,1092],[345,1146],[345,1191]],labelBBox:{x:346,y:1113,width:74,height:18},parent:"otcKubernetes.edpCluster.edpCluster",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal"},{id:"dvpbhz",source:"otcKubernetes.edpCluster.forgejoActions",target:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",label:"runs workflows",points:[[1e3,292],[1063,323],[1134,362],[1192,408],[1227,436],[1260,473],[1287,507]],labelBBox:{x:1176,y:377,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"ldqgs7",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.edpCluster.garmService",label:"retrieves bootstrap information",points:[[1283,695],[1257,720],[1226,744],[1192,759],[1055,817],[661,741],[524,797],[489,812],[456,836],[429,861]],labelBBox:{x:1166,y:766,width:193,height:18},parent:null,relations:["15ss7lz"],color:"gray",line:"dashed",head:"normal"},{id:"gly1kq",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.forgejo",label:"registers with and picks up jobs",points:[[1269,695],[1245,717],[1218,740],[1192,759],[1135,799],[1069,838],[1009,870]],labelBBox:{x:1175,y:766,width:199,height:18},parent:null,relations:["1k6h7jf"],color:"gray",line:"dashed",head:"normal"},{id:"9r08on",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.forgejoActions",label:"register",points:[[1289,515],[1261,480],[1227,441],[1192,408],[1140,359],[1072,320],[1009,290]],labelBBox:{x:1177,y:377,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"}]},"view_gitops-inner-outer-loop_15":{_type:"dynamic",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/gitops-inner-outer-loop.c4",description:null,title:"outer-ci-loop",id:"view_gitops-inner-outer-loop_15",variant:"diagram",autoLayout:{direction:"LR"},hash:"d85bdffdca5f49220457db75761ae8ba47744c16",sequenceLayout:{actors:[{id:"localbox.git",x:32,y:52,width:320,height:180,ports:[{id:"step-01_source",cx:160,cy:338,height:40,type:"source",position:"right"}]},{id:"edp.forgejogit",x:448,y:52,width:320,height:180,ports:[{id:"step-01_target",cx:160,cy:338,height:24,type:"target",position:"left"},{id:"step-02_source",cx:160,cy:360,height:40,type:"source",position:"right"},{id:"step-04_target",cx:160,cy:475,height:24,type:"target",position:"right"},{id:"step-05_source",cx:160,cy:568,height:40,type:"source",position:"right"}]},{id:"forgejoRunner",x:832,y:52,width:320,height:180,ports:[{id:"step-02_target",cx:160,cy:360,height:24,type:"target",position:"left"},{id:"step-03_source",cx:160,cy:382,height:40,type:"source",position:"right"},{id:"step-04_source",cx:160,cy:475,height:40,type:"source",position:"left"}]},{id:"edp.imageregistry",x:1216,y:52,width:373,height:180,ports:[{id:"step-03_target",cx:187,cy:382,height:24,type:"target",position:"left"},{id:"step-07_target",cx:187,cy:683,height:24,type:"target",position:"right"}]},{id:"edp.argoCD",x:1649,y:52,width:320,height:180,ports:[{id:"step-05_target",cx:160,cy:568,height:24,type:"target",position:"left"},{id:"step-06_source",cx:160,cy:590,height:40,type:"source",position:"right"}]},{id:"cloud",x:2033,y:52,width:320,height:180,ports:[{id:"step-06_target",cx:160,cy:590,height:24,type:"target",position:"left"},{id:"step-07_source",cx:160,cy:683,height:40,type:"source",position:"left"}]}],compounds:[{depth:0,x:0,y:0,width:384,height:527,id:"localbox",origin:"localbox"},{depth:0,x:416,y:0,width:384,height:735,id:"edp-1",origin:"edp"},{depth:0,x:1184,y:0,width:817,height:828,id:"edp-2",origin:"edp"}],steps:[{id:"step-01",sourceHandle:"step-01_source",targetHandle:"step-01_target",labelBBox:{width:91,height:27}},{id:"step-02",sourceHandle:"step-02_source",targetHandle:"step-02_target",labelBBox:{width:92,height:27}},{id:"step-03",sourceHandle:"step-03_source",targetHandle:"step-03_target",labelBBox:{width:159,height:27}},{id:"step-04",sourceHandle:"step-04_source",targetHandle:"step-04_target",labelBBox:{width:174,height:27}},{id:"step-05",sourceHandle:"step-05_source",targetHandle:"step-05_target",labelBBox:{width:164,height:27}},{id:"step-06",sourceHandle:"step-06_source",targetHandle:"step-06_target",labelBBox:{width:161,height:27}},{id:"step-07",sourceHandle:"step-07_source",targetHandle:"step-07_target",labelBBox:{width:113,height:27}}],parallelAreas:[],bounds:{x:0,y:0,width:2353,height:828}},bounds:{x:0,y:0,width:2150,height:1243},nodes:[{id:"localbox",parent:null,level:0,children:["localbox.git"],inEdges:[],outEdges:["step-01"],title:"localbox",modelRef:"localbox",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A local development system"},tags:[],technology:"Linux/Windows/Mac",kind:"system",depth:1,x:8,y:306,width:384,height:265,labelBBox:{x:6,y:0,width:66,height:15}},{id:"localbox.git",parent:"localbox",level:1,children:[],inEdges:[],outEdges:["step-01"],title:"git",modelRef:"localbox.git",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:15,size:"md"},description:{txt:"local git"},tags:[],technology:"Git",kind:"component",x:40,y:359,width:320,height:180,labelBBox:{x:119,y:53,width:113,height:67}},{id:"edp",parent:null,level:0,children:["edp.forgejogit","edp.imageregistry","edp.argoCD","edp.forgejo"],inEdges:["step-01","step-03","step-04","step-07"],outEdges:["step-02","step-06"],title:"EDP",modelRef:"edp",shape:"rectangle",color:"secondary",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",depth:1,navigateTo:"edp",x:528,y:8,width:1064,height:861,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edp.forgejogit",parent:"edp",level:1,children:[],inEdges:["step-01","step-04"],outEdges:["step-02","step-05"],title:"ForgejoGit",modelRef:"edp.forgejogit",shape:"rectangle",color:"secondary",icon:"tech:git",style:{opacity:15,size:"md"},tags:[],kind:"component",x:595,y:359,width:320,height:180,labelBBox:{x:97,y:74,width:155,height:24}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["step-02"],outEdges:["step-03","step-04"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:1232,y:909,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"edp.imageregistry",parent:"edp",level:1,children:[],inEdges:["step-03","step-07"],outEdges:[],title:"Forgejo OCI Image Registry",modelRef:"edp.imageregistry",shape:"rectangle",color:"secondary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Container Image Registry"},tags:[],technology:"Golang",kind:"component",x:568,y:649,width:373,height:180,labelBBox:{x:46,y:53,width:311,height:67}},{id:"edp.argoCD",parent:"edp",level:1,children:[],inEdges:["step-05"],outEdges:["step-06"],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"secondary",style:{opacity:20,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:1232,y:495,width:320,height:180,labelBBox:{x:107,y:63,width:105,height:48}},{id:"cloud",parent:null,level:0,children:[],inEdges:["step-06"],outEdges:["step-07"],title:"Cloud",modelRef:"cloud",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Cloud environments"},tags:[],technology:"IaaS/PaaS",kind:"system",x:1830,y:1063,width:320,height:180,labelBBox:{x:91,y:53,width:137,height:67}},{id:"edp.forgejo",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"gray",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform offering capabilities like code version controling collaboration and ticketing @@ -298,7 +298,7 @@ and correctness.`},tags:[],technology:"PostgreSQL",kind:"container",x:859,y:0,wi 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",title:"OTC EDP per tenant cluster",id:"otc-edp-per-tenant"},"otc-faas":{style:{},kind:"cloud",description:{txt:"OTC environments for Prototype FaaS."},technology:"OTC",title:"OTC prototype FaaS",id:"otc-faas"},edge:{style:{},kind:"cloud",description:{txt:"Edge environments for distributed workloads."},technology:"Edge",title:"Edge Cloud",id:"edge"},"otc-edpFoundry":{style:{},kind:"cloud",description:{txt:`OTC environments for the central EDP Foundry services. This is kubernetes clusters and other infrastructure like nodes and vms, and optionally platform services. All is set up by IaC terraform and edpbuilder. A tenant is a folder in Foundry-Config-Forgejo. On merge triggers reconciliation to EDP. -Optionally we will have a WebUI/API/CLI`},technology:"OTC",title:"OTC EDP Foundry Central Service clusters",id:"otc-edpFoundry"},edgeProvider:{style:{icon:"tech:terraform"},kind:"paas",description:{txt:"Unlocks the terraform ecosystem"},title:"Terraform Edge provider",id:"edgeProvider"},edgeProviderHost:{style:{},kind:"environment",title:"OTC",id:"edgeProviderHost"},edgeSdk:{style:{icon:"tech:go"},kind:"paas",description:{txt:"Wrapper around API"},technology:"Cloud Services",title:"Edge Cloud SDK",id:"edgeSdk"},edgeCloud:{style:{},kind:"environment",title:"Edge cloud",id:"edgeCloud"},otcTenantProd:{style:{},kind:"environment",title:"Prod - builth.ing",id:"otcTenantProd"},otcTenantNonProd:{style:{},kind:"environment",title:"Non-Prod - t09.de",id:"otcTenantNonProd"},otcKubernetes:{style:{icon:"tech:kubernetes"},kind:"environment",description:{txt:"OTC Container Cluster Engine hosting EDP platform"},technology:"Kubernetes",title:"OTC Kubernetes",id:"otcKubernetes"},edgeConnectEnv:{style:{icon:"tech:docker"},kind:"environment",description:{txt:"Edge infrastructure for ephemeral runner deployment"},technology:"Edge Connect Platform",title:"Edge Connect",id:"edgeConnectEnv"},"local.backstage":{style:{},kind:"namespace",title:"backstage",id:"local.backstage"},"local.argocd":{style:{},kind:"namespace",title:"argocd",id:"local.argocd"},"local.gitea":{style:{},kind:"namespace",title:"gitea",id:"local.gitea"},"local.keycloak":{style:{},kind:"namespace",title:"keycloak",id:"local.keycloak"},"local.crossplane":{style:{},kind:"namespace",title:"crossplane-system",id:"local.crossplane"},"local.externalSecrets":{style:{},kind:"namespace",title:"external-secrets",id:"local.externalSecrets"},"local.velero":{style:{},kind:"namespace",title:"velero",id:"local.velero"},"local.minio":{style:{},kind:"namespace",title:"minio-backup",id:"local.minio"},"local.monitoring":{style:{},kind:"namespace",title:"monitoring",id:"local.monitoring"},"local.ingressNginx":{style:{},kind:"namespace",title:"ingress-nginx",id:"local.ingressNginx"},"local.openbao":{style:{},kind:"namespace",title:"openbao",id:"local.openbao"},"local.fibonacci":{style:{},kind:"namespace",title:"fibonacci-app",id:"local.fibonacci"},"local.mailhog":{style:{},kind:"namespace",title:"mailhog",id:"local.mailhog"},"local.spark":{style:{},kind:"namespace",title:"spark",id:"local.spark"},"otc-edp-per-tenant.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"OTC Container Cluster Engine"},technology:"Kubernetes",title:"OTC CCE",id:"otc-edp-per-tenant.cce"},"otc-edp-per-tenant.cloudServices":{style:{},kind:"paas",description:{txt:"EDP Cloud Services"},technology:"Cloud Services",title:"EDP Cloud Services",id:"otc-edp-per-tenant.cloudServices"},"otc-edp-per-tenant.forgejoRunnerInfrastructure":{style:{},kind:"computeressource",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},title:"EDP ForgejoRunner infrastructure",id:"otc-edp-per-tenant.forgejoRunnerInfrastructure"},"otc-faas.dev":{style:{},kind:"environment",description:{txt:"*.t09.de"},technology:"OTC",title:"tenant Dev",id:"otc-faas.dev"},"otc-faas.prod":{style:{},kind:"environment",description:{txt:"*.buildth.ing"},technology:"OTC",title:"Tenant Prod",id:"otc-faas.prod"},"edge.edge-dev":{style:{},kind:"environment",description:{txt:"Edge development environment"},technology:"Edge",title:"Edge Dev",id:"edge.edge-dev"},"edge.edge-prod":{style:{},kind:"environment",description:{txt:"Edge production environment"},technology:"Edge",title:"Edge Prod",id:"edge.edge-prod"},"otc-edpFoundry.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"OTC Container Cluster Engine"},technology:"Kubernetes",title:"OTC CCE",id:"otc-edpFoundry.cce"},"otc-edpFoundry.workflowSetupEDPInfrastructure":{style:{},kind:"computeressource",description:{txt:"EDP infrastructure Workflow"},title:"EDP infrastructure Workflow",id:"otc-edpFoundry.workflowSetupEDPInfrastructure"},"otc-edpFoundry.workflowSetupArgoCDInfrastructure":{style:{},kind:"computeressource",description:{txt:"EDP Setup ArgoCD Workflow"},title:"EDP ArgoCD Workflow",id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure"},"otc-edpFoundry.forgejoRunnerInfrastructure":{style:{},kind:"computeressource",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},title:"EDP ForgejoRunner infrastructure",id:"otc-edpFoundry.forgejoRunnerInfrastructure"},"edgeProviderHost.edp":{style:{icon:"tech:git"},kind:"cluster",title:"Forgejo for all EDP-tenants",id:"edgeProviderHost.edp"},"edgeProviderHost.terralist":{style:{icon:"tech:terraform"},kind:"paas",description:{txt:"Terraform provider private hosting"},technology:"Cloud Services",title:"Terralist",id:"edgeProviderHost.terralist"},"edgeCloud.edgeApi":{style:{icon:"tech:swagger"},kind:"paas",technology:"Edge Cloud (managed)",links:[{url:"https://swagger.edge.platform.mg3.mdb.osc.live",title:"Documentation"}],title:"Edge Cloud API",id:"edgeCloud.edgeApi"},"edgeCloud.edgeResources":{style:{},kind:"paas",description:{txt:"App, AppInstance, etc."},technology:"Edge Cloud (managed)",title:"Edge Cloud Resources",id:"edgeCloud.edgeResources"},"otcTenantProd.otcTenantEdpBuildthing":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Primary Instance"},title:"edp.builth.ing",id:"otcTenantProd.otcTenantEdpBuildthing"},"otcTenantProd.otcTenantObservability":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Observability Instance"},title:"observability.builth.ing",id:"otcTenantProd.otcTenantObservability"},"otcTenantProd.otcTenantCustomerA":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Customer Instance"},title:"customer-a.builth.ing",id:"otcTenantProd.otcTenantCustomerA"},"otcTenantNonProd.otcTenantDev1":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Development Instance"},title:"dev1.t09.de",id:"otcTenantNonProd.otcTenantDev1"},"otcTenantNonProd.otcTenantTestX":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Testing Instance"},title:"test-x.t09.de",id:"otcTenantNonProd.otcTenantTestX"},"otcKubernetes.edpCluster":{style:{},kind:"cluster",description:{txt:"EDP platform cluster"},title:"EDP Cluster",id:"otcKubernetes.edpCluster"},"edgeConnectEnv.runnerInfrastructure":{style:{},kind:"computeressource",description:{txt:"Dynamically provisioned runner instances"},title:"Runner Infrastructure",id:"edgeConnectEnv.runnerInfrastructure"},"local.backstage.backstage":{id:"local.backstage.backstage",element:"edp.ui.backstage",style:{}},"local.backstage.database":{id:"local.backstage.database",element:"edp.ui.database",style:{}},"local.argocd.argocdAppController":{id:"local.argocd.argocdAppController",element:"edp.argoCD.argocdAppController",style:{}},"local.argocd.argocdAppSetController":{id:"local.argocd.argocdAppSetController",element:"edp.argoCD.argocdAppSetController",style:{}},"local.argocd.argocdRedis":{id:"local.argocd.argocdRedis",element:"edp.argoCD.argocdRedis",style:{}},"local.argocd.argocdRepoServer":{id:"local.argocd.argocdRepoServer",element:"edp.argoCD.argocdRepoServer",style:{}},"local.argocd.argocdServer":{id:"local.argocd.argocdServer",element:"edp.argoCD.argocdServer",style:{}},"local.gitea.forgejo":{id:"local.gitea.forgejo",element:"edp.forgejo",style:{}},"local.gitea.forgejoRunner":{id:"local.gitea.forgejoRunner",element:"forgejoRunner",style:{}},"local.keycloak.keycloak":{id:"local.keycloak.keycloak",element:"edp.keycloak.keycloak",style:{}},"local.keycloak.keycloakDB":{id:"local.keycloak.keycloakDB",element:"edp.keycloak.keycloakDB",style:{}},"local.crossplane.crossplane":{id:"local.crossplane.crossplane",element:"edp.crossplane.crossplane",style:{}},"local.crossplane.crossplaneFunction":{id:"local.crossplane.crossplaneFunction",element:"edp.crossplane.crossplaneFunction",style:{}},"local.crossplane.crossplaneRbacManager":{id:"local.crossplane.crossplaneRbacManager",element:"edp.crossplane.crossplaneRbacManager",style:{}},"local.crossplane.providerArgoCD":{id:"local.crossplane.providerArgoCD",element:"edp.crossplane.providerArgoCD",style:{}},"local.crossplane.providerKind":{id:"local.crossplane.providerKind",element:"edp.crossplane.providerKind",style:{}},"local.crossplane.providerShell":{id:"local.crossplane.providerShell",element:"edp.crossplane.providerShell",style:{}},"local.externalSecrets.certController":{id:"local.externalSecrets.certController",element:"edp.externalSecrets.certController",style:{}},"local.externalSecrets.externalSecrets":{id:"local.externalSecrets.externalSecrets",element:"edp.externalSecrets.externalSecrets",style:{}},"local.externalSecrets.webhook":{id:"local.externalSecrets.webhook",element:"edp.externalSecrets.webhook",style:{}},"local.velero.velero":{id:"local.velero.velero",element:"edp.velero.velero",style:{}},"local.minio.minio":{id:"local.minio.minio",element:"edp.minio.minio",style:{}},"local.monitoring.alloy":{id:"local.monitoring.alloy",element:"edp.monitoring.alloy",style:{}},"local.monitoring.distributor":{id:"local.monitoring.distributor",element:"edp.monitoring.loki.distributor",style:{}},"local.monitoring.gateway":{id:"local.monitoring.gateway",element:"edp.monitoring.loki.gateway",style:{}},"local.monitoring.ingestor":{id:"local.monitoring.ingestor",element:"edp.monitoring.loki.ingestor",style:{}},"local.monitoring.querier":{id:"local.monitoring.querier",element:"edp.monitoring.loki.querier",style:{}},"local.monitoring.queryFrontend":{id:"local.monitoring.queryFrontend",element:"edp.monitoring.loki.queryFrontend",style:{}},"local.ingressNginx.ingressNginx":{id:"local.ingressNginx.ingressNginx",element:"edp.ingressNginx.ingressNginx",style:{}},"local.openbao.openbao":{id:"local.openbao.openbao",element:"edp.openbao.openbao",style:{}},"local.openbao.agentInjector":{id:"local.openbao.agentInjector",element:"edp.openbao.agentInjector",style:{}},"local.fibonacci.fibonacci":{id:"local.fibonacci.fibonacci",element:"edp.testApp.fibonacci",style:{}},"local.mailhog.mailhog":{id:"local.mailhog.mailhog",element:"edp.mailhog.mailhog",style:{}},"local.spark.sparkoperator":{id:"local.spark.sparkoperator",element:"edp.spark.sparkoperator",style:{}},"otc-edp-per-tenant.cce.edp":{style:{},kind:"cluster",title:"EDP",id:"otc-edp-per-tenant.cce.edp"},"otc-edp-per-tenant.cloudServices.postgres":{id:"otc-edp-per-tenant.cloudServices.postgres",element:"postgres",style:{}},"otc-edp-per-tenant.cloudServices.redis":{id:"otc-edp-per-tenant.cloudServices.redis",element:"redis",style:{}},"otc-edp-per-tenant.cloudServices.objectstorage":{id:"otc-edp-per-tenant.cloudServices.objectstorage",element:"objectstorage",style:{}},"otc-edp-per-tenant.cloudServices.elasticsearch":{id:"otc-edp-per-tenant.cloudServices.elasticsearch",element:"elasticsearch",style:{}},"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner":{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"otc-faas.dev.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.t09.de"},technology:"Kubernetes",title:"Central Forgejo",id:"otc-faas.dev.cce"},"otc-faas.dev.cloudServices":{style:{},kind:"paas",description:{txt:"EDP Cloud Services (Postgres, Redis, etc.)"},technology:"Cloud Services",title:"EDP Cloud Services",id:"otc-faas.dev.cloudServices"},"otc-faas.dev.observability":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.t09.de"},technology:"Kubernetes",title:"Observability",id:"otc-faas.dev.observability"},"otc-faas.prod.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.buildth.ing"},technology:"Kubernetes",title:"Central Forgejo",id:"otc-faas.prod.cce"},"otc-faas.prod.cloudServices":{style:{},kind:"paas",description:{txt:"EDP Cloud Services (Postgres, Redis, etc.)"},technology:"Cloud Services",title:"EDP Cloud Services",id:"otc-faas.prod.cloudServices"},"otc-faas.prod.observability":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.buildth.ing"},technology:"Kubernetes",title:"Observability",id:"otc-faas.prod.observability"},"otc-edpFoundry.cce.internalServices":{style:{},kind:"cluster",title:"EDP Foundry Internal Services",id:"otc-edpFoundry.cce.internalServices"},"otc-edpFoundry.cce.centralObservability":{style:{},kind:"cluster",title:"EDP Foundry Central Observability",id:"otc-edpFoundry.cce.centralObservability"},"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner":{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker":{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",element:"forgejoRunnerWorker",style:{}},"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow":{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",element:"edpworkflow",style:{}},"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner":{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker":{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",element:"forgejoRunnerWorker",style:{}},"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow":{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow",element:"edpworkflow",style:{}},"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner":{id:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"edgeProviderHost.edp.forgejo":{id:"edgeProviderHost.edp.forgejo",element:"edp.forgejo",title:"Forgejo for all EDP-tenants",description:{txt:"edp.buildth.ing"},style:{}},"otcKubernetes.edpCluster.forgejo":{id:"otcKubernetes.edpCluster.forgejo",element:"edp.forgejo",description:{txt:"Forgejo - Git platform with Actions"},style:{}},"otcKubernetes.edpCluster.forgejoActions":{id:"otcKubernetes.edpCluster.forgejoActions",element:"edp.forgejoActions",description:{txt:"CI/CD orchestration for Forgejo"},style:{}},"otcKubernetes.edpCluster.garmContainer":{id:"otcKubernetes.edpCluster.garmContainer",element:"edp.garm",description:{txt:"GARM container with runner orchestration"},style:{}},"otcKubernetes.edpCluster.garmService":{id:"otcKubernetes.edpCluster.garmService",element:"edp.garm.garm",description:{txt:"GARM - Runner lifecycle manager"},style:{}},"otcKubernetes.edpCluster.providerEdgeConnect":{id:"otcKubernetes.edpCluster.providerEdgeConnect",element:"edp.garm.providerEdgeConnect",description:{txt:"GARM Provider for Edge Connect"},style:{}},"edgeConnectEnv.runnerInfrastructure.forgejoRunner":{id:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",element:"forgejoRunner",description:{txt:"Ephemeral Forgejo Actions runner"},style:{}},"otc-edp-per-tenant.cce.edp.argoCD":{id:"otc-edp-per-tenant.cce.edp.argoCD",element:"edp.argoCD",style:{}},"otc-edp-per-tenant.cce.edp.forgejoRunner":{id:"otc-edp-per-tenant.cce.edp.forgejoRunner",element:"forgejoRunner",style:{}},"otc-edp-per-tenant.cce.edp.forgejo":{id:"otc-edp-per-tenant.cce.edp.forgejo",element:"edp.forgejo",style:{}},"otc-edp-per-tenant.cce.edp.externalSecrets":{id:"otc-edp-per-tenant.cce.edp.externalSecrets",element:"edp.externalSecrets",style:{}},"otc-edp-per-tenant.cce.edp.ingressNginx":{id:"otc-edp-per-tenant.cce.edp.ingressNginx",element:"edp.ingressNginx",style:{}},"otc-edp-per-tenant.cce.edp.garm":{id:"otc-edp-per-tenant.cce.edp.garm",element:"edp.garm",style:{}},"otc-faas.dev.cce.edp":{style:{},kind:"cluster",description:{txt:"t09.de"},title:"Forgejo Dev for platform team",id:"otc-faas.dev.cce.edp"},"otc-faas.prod.cce.edp":{style:{},kind:"cluster",title:"Forgejo for all EDP-tenants",id:"otc-faas.prod.cce.edp"},"otc-edpFoundry.cce.internalServices.argoCD":{id:"otc-edpFoundry.cce.internalServices.argoCD",element:"edp.argoCD",style:{}},"otc-edpFoundry.cce.internalServices.forgejo":{id:"otc-edpFoundry.cce.internalServices.forgejo",element:"edp.forgejo",style:{}},"otc-edpFoundry.cce.internalServices.externalSecrets":{id:"otc-edpFoundry.cce.internalServices.externalSecrets",element:"edp.externalSecrets",style:{}},"otc-edpFoundry.cce.internalServices.openbao":{id:"otc-edpFoundry.cce.internalServices.openbao",element:"edp.openbao",style:{}},"otc-edpFoundry.cce.internalServices.ingressNginx":{id:"otc-edpFoundry.cce.internalServices.ingressNginx",element:"edp.ingressNginx",style:{}},"otc-edpFoundry.cce.centralObservability.grafana":{id:"otc-edpFoundry.cce.centralObservability.grafana",element:"edp.grafana",style:{}},"otc-edpFoundry.cce.centralObservability.prometheus":{id:"otc-edpFoundry.cce.centralObservability.prometheus",element:"edp.prometheus",style:{}},"otc-edpFoundry.cce.centralObservability.loki":{id:"otc-edpFoundry.cce.centralObservability.loki",element:"edp.loki",style:{}},"otc-faas.dev.cce.edp.forgejo":{id:"otc-faas.dev.cce.edp.forgejo",element:"edp.forgejo",style:{}},"otc-faas.prod.cce.edp.forgejo":{id:"otc-faas.prod.cce.edp.forgejo",element:"edp.forgejo",title:"Forgejo for all EDP-tenants",description:{txt:"buildth.ing"},style:{}}},relations:{g9oj4f:{title:"registers",source:{deployment:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner"},target:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},id:"g9oj4f"},"1fzhjm9":{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.elasticsearch"},id:"1fzhjm9"},"15njmlz":{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.objectstorage"},id:"15njmlz"},hks76r:{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.postgres"},id:"hks76r"},"1w18ve8":{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.redis"},id:"1w18ve8"},dz2rdn:{source:{deployment:"otc-faas.dev.cce.edp.forgejo"},target:{deployment:"otc-faas.dev.cloudServices"},id:"dz2rdn"},"2shw6y":{source:{deployment:"otc-faas.prod.cce.edp.forgejo"},target:{deployment:"otc-faas.prod.cloudServices"},id:"2shw6y"},"7kqly3":{title:"runs",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner"},target:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker"},id:"7kqly3"},"12hf1w4":{title:"executes",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker"},target:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"},id:"12hf1w4"},uk77s5:{title:"deploys edp to otc.cce",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"},target:{deployment:"otc-edp-per-tenant.cce.edp"},id:"uk77s5"},"1pfc6bl":{title:"deploys edp to otc.paas",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"},target:{deployment:"otc-edp-per-tenant.cloudServices"},id:"1pfc6bl"},hqie0:{title:"runs",source:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner"},target:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker"},id:"hqie0"},"1j16hqv":{title:"executes",source:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker"},target:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow"},id:"1j16hqv"},jde35l:{source:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow"},target:{deployment:"otc-edp-per-tenant.cce.edp.argoCD"},id:"jde35l"},"1umzqdy":{title:"registers",source:{deployment:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner"},target:{deployment:"otc-edpFoundry.cce.internalServices.forgejo"},id:"1umzqdy"},dola40:{title:"invokes",source:{deployment:"otc-edpFoundry.cce.internalServices.forgejo"},target:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner"},id:"dola40"},"1f5y9gc":{title:"invokes",source:{deployment:"otc-edpFoundry.cce.internalServices.forgejo"},target:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner"},id:"1f5y9gc"},"1wlvsb5":{title:"built using",source:{deployment:"edgeProvider"},target:{deployment:"edgeSdk"},id:"1wlvsb5"},"1mpjz5d":{title:"published to",source:{deployment:"edgeProvider"},target:{deployment:"edgeProviderHost.terralist"},id:"1mpjz5d"},"12ssq9":{title:"hosted on",source:{deployment:"edgeProvider"},target:{deployment:"edgeProviderHost.edp"},id:"12ssq9"},vfhcba:{title:"calls",source:{deployment:"edgeSdk"},target:{deployment:"edgeCloud.edgeApi"},id:"vfhcba"},"1sm6ifh":{title:"hosted on",source:{deployment:"edgeSdk"},target:{deployment:"edgeProviderHost.edp"},id:"1sm6ifh"},"1q6ftvm":{title:"authenticates via",source:{deployment:"edgeProviderHost.terralist"},target:{deployment:"edgeProviderHost.edp"},id:"1q6ftvm"},rr0lcz:{title:"creates/destroys",source:{deployment:"edgeCloud.edgeApi"},target:{deployment:"edgeCloud.edgeResources"},id:"rr0lcz"},"1fxu52d":{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantProd.otcTenantObservability"},id:"1fxu52d"},"6gfo3g":{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantProd.otcTenantCustomerA"},id:"6gfo3g"},s1ie0n:{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantNonProd.otcTenantDev1"},id:"s1ie0n"},"77azfi":{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantNonProd.otcTenantTestX"},id:"77azfi"},"1k6h7jf":{title:"registers with and picks up jobs",source:{deployment:"edgeConnectEnv.runnerInfrastructure.forgejoRunner"},target:{deployment:"otcKubernetes.edpCluster.forgejo"},id:"1k6h7jf"},"1t1b56a":{title:"retrieves bootstrap information",source:{deployment:"edgeConnectEnv.runnerInfrastructure.forgejoRunner"},target:{deployment:"otcKubernetes.edpCluster.garmService"},id:"1t1b56a"}}},imports:{}}),{useLikeC4Model:KJe}=YJe(XJe);function ZJe({children:e}){const r=KJe();return y.jsx(YQe,{likec4model:r,children:e})}function QJe(e){return y.jsx(ZJe,{children:y.jsx(gJe,{renderIcon:NJe,...e})})}var $z={exports:{}},T0={},Rz={exports:{}},zz={};var one;function JJe(){return one||(one=1,(function(e){function r(B,F){var q=B.length;B.push(F);e:for(;0>>1,U=B[G];if(0>>1;Gi(O,q))Wi(Z,O)?(B[G]=Z,B[W]=q,G=W):(B[G]=O,B[K]=q,G=K);else if(Wi(Z,q))B[G]=Z,B[W]=q,G=W;else break e}}return F}function i(B,F){var q=B.sortIndex-F.sortIndex;return q!==0?q:B.id-F.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;e.unstable_now=function(){return a.now()}}else{var l=Date,s=l.now();e.unstable_now=function(){return l.now()-s}}var c=[],d=[],u=1,p=null,f=3,g=!1,v=!1,w=!1,x=!1,k=typeof setTimeout=="function"?setTimeout:null,C=typeof clearTimeout=="function"?clearTimeout:null,_=typeof setImmediate<"u"?setImmediate:null;function $(B){for(var F=n(d);F!==null;){if(F.callback===null)o(d);else if(F.startTime<=B)o(d),F.sortIndex=F.expirationTime,r(c,F);else break;F=n(d)}}function R(B){if(w=!1,$(B),!v)if(n(c)!==null)v=!0,T||(T=!0,L());else{var F=n(d);F!==null&&V(R,F.startTime-B)}}var T=!1,A=-1,z=5,j=-1;function I(){return x?!0:!(e.unstable_now()-jB&&I());){var G=p.callback;if(typeof G=="function"){p.callback=null,f=p.priorityLevel;var U=G(p.expirationTime<=B);if(B=e.unstable_now(),typeof U=="function"){p.callback=U,$(B),F=!0;break t}p===n(c)&&o(c),$(B)}else o(c);p=n(c)}if(p!==null)F=!0;else{var Y=n(d);Y!==null&&V(R,Y.startTime-B),F=!1}}break e}finally{p=null,f=q,g=!1}F=void 0}}finally{F?L():T=!1}}}var L;if(typeof _=="function")L=function(){_(P)};else if(typeof MessageChannel<"u"){var H=new MessageChannel,M=H.port2;H.port1.onmessage=P,L=function(){M.postMessage(null)}}else L=function(){k(P,0)};function V(B,F){A=k(function(){B(e.unstable_now())},F)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(B){B.callback=null},e.unstable_forceFrameRate=function(B){0>B||125G?(B.sortIndex=q,r(d,B),n(c)===null&&B===n(d)&&(w?(C(A),A=-1):w=!0,V(R,q-G))):(B.sortIndex=U,r(c,B),v||g||(v=!0,T||(T=!0,L()))),B},e.unstable_shouldYield=I,e.unstable_wrapCallback=function(B){var F=f;return function(){var q=f;f=F;try{return B.apply(this,arguments)}finally{f=q}}}})(zz)),zz}var ine;function eet(){return ine||(ine=1,Rz.exports=JJe()),Rz.exports}var ane;function tet(){if(ane)return T0;ane=1;var e=eet(),r=Z6(),n=GN();function o(h){var m="https://react.dev/errors/"+h;if(1U||(h.current=G[U],G[U]=null,U--)}function O(h,m){U++,G[U]=h.current,h.current=m}var W=Y(null),Z=Y(null),Q=Y(null),ie=Y(null);function te(h,m){switch(O(Q,m),O(Z,h),O(W,null),m.nodeType){case 9:case 11:h=(h=m.documentElement)&&(h=h.namespaceURI)?cge(h):0;break;default:if(h=m.tagName,m=m.namespaceURI)m=cge(m),h=dge(m,h);else switch(h){case"svg":h=1;break;case"math":h=2;break;default:h=0}}K(W),O(W,h)}function re(){K(W),K(Z),K(Q)}function ue(h){h.memoizedState!==null&&O(ie,h);var m=W.current,b=dge(m,h.type);m!==b&&(O(Z,h),O(W,b))}function _e(h){Z.current===h&&(K(W),K(Z)),ie.current===h&&(K(ie),pb._currentValue=q)}var ce,pe;function xe(h){if(ce===void 0)try{throw Error()}catch(b){var m=b.stack.trim().match(/\n( *(at )?)/);ce=m&&m[1]||"",pe=-1>>1,U=B[G];if(0>>1;Gi(O,q))Wi(Z,O)?(B[G]=Z,B[W]=q,G=W):(B[G]=O,B[K]=q,G=K);else if(Wi(Z,q))B[G]=Z,B[W]=q,G=W;else break e}}return F}function i(B,F){var q=B.sortIndex-F.sortIndex;return q!==0?q:B.id-F.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;e.unstable_now=function(){return a.now()}}else{var l=Date,s=l.now();e.unstable_now=function(){return l.now()-s}}var c=[],d=[],u=1,p=null,f=3,g=!1,v=!1,w=!1,x=!1,k=typeof setTimeout=="function"?setTimeout:null,C=typeof clearTimeout=="function"?clearTimeout:null,_=typeof setImmediate<"u"?setImmediate:null;function $(B){for(var F=n(d);F!==null;){if(F.callback===null)o(d);else if(F.startTime<=B)o(d),F.sortIndex=F.expirationTime,r(c,F);else break;F=n(d)}}function R(B){if(w=!1,$(B),!v)if(n(c)!==null)v=!0,T||(T=!0,L());else{var F=n(d);F!==null&&V(R,F.startTime-B)}}var T=!1,A=-1,z=5,j=-1;function I(){return x?!0:!(e.unstable_now()-jB&&I());){var G=p.callback;if(typeof G=="function"){p.callback=null,f=p.priorityLevel;var U=G(p.expirationTime<=B);if(B=e.unstable_now(),typeof U=="function"){p.callback=U,$(B),F=!0;break t}p===n(c)&&o(c),$(B)}else o(c);p=n(c)}if(p!==null)F=!0;else{var Y=n(d);Y!==null&&V(R,Y.startTime-B),F=!1}}break e}finally{p=null,f=q,g=!1}F=void 0}}finally{F?L():T=!1}}}var L;if(typeof _=="function")L=function(){_(P)};else if(typeof MessageChannel<"u"){var H=new MessageChannel,M=H.port2;H.port1.onmessage=P,L=function(){M.postMessage(null)}}else L=function(){k(P,0)};function V(B,F){A=k(function(){B(e.unstable_now())},F)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(B){B.callback=null},e.unstable_forceFrameRate=function(B){0>B||125G?(B.sortIndex=q,r(d,B),n(c)===null&&B===n(d)&&(w?(C(A),A=-1):w=!0,V(R,q-G))):(B.sortIndex=U,r(c,B),v||g||(v=!0,T||(T=!0,L()))),B},e.unstable_shouldYield=I,e.unstable_wrapCallback=function(B){var F=f;return function(){var q=f;f=F;try{return B.apply(this,arguments)}finally{f=q}}}})(zz)),zz}var ine;function eet(){return ine||(ine=1,Rz.exports=JJe()),Rz.exports}var ane;function tet(){if(ane)return T0;ane=1;var e=eet(),r=Z6(),n=GN();function o(h){var m="https://react.dev/errors/"+h;if(1U||(h.current=G[U],G[U]=null,U--)}function O(h,m){U++,G[U]=h.current,h.current=m}var W=Y(null),Z=Y(null),Q=Y(null),ie=Y(null);function te(h,m){switch(O(Q,m),O(Z,h),O(W,null),m.nodeType){case 9:case 11:h=(h=m.documentElement)&&(h=h.namespaceURI)?cge(h):0;break;default:if(h=m.tagName,m=m.namespaceURI)m=cge(m),h=dge(m,h);else switch(h){case"svg":h=1;break;case"math":h=2;break;default:h=0}}K(W),O(W,h)}function re(){K(W),K(Z),K(Q)}function ue(h){h.memoizedState!==null&&O(ie,h);var m=W.current,b=dge(m,h.type);m!==b&&(O(Z,h),O(W,b))}function _e(h){Z.current===h&&(K(W),K(Z)),ie.current===h&&(K(ie),pb._currentValue=q)}var ce,pe;function xe(h){if(ce===void 0)try{throw Error()}catch(b){var m=b.stack.trim().match(/\n( *(at )?)/);ce=m&&m[1]||"",pe=-1)":-1