From f120cbdead3fb5b8c1d61a2186705638e264fae9 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 18 Nov 2025 14:58:28 +0100 Subject: [PATCH 01/79] add environment --- .../theia-base-helm-values.yml | 12 +++ .../theia-crds-helm-values.yml | 2 + .../values.yaml | 100 ++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 deployments/test2.theia-test.artemis.cit.tum.de/theia-base-helm-values.yml create mode 100644 deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml create mode 100644 deployments/test2.theia-test.artemis.cit.tum.de/values.yaml diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/theia-base-helm-values.yml b/deployments/test2.theia-test.artemis.cit.tum.de/theia-base-helm-values.yml new file mode 100644 index 0000000..c4a6a5d --- /dev/null +++ b/deployments/test2.theia-test.artemis.cit.tum.de/theia-base-helm-values.yml @@ -0,0 +1,12 @@ +# issuerprod: +# # -- name for the let's encrypt production cluster issuer +# name: theia-letsencrypt-prod + +issuer: + # -- email used to issue let's encrypt certificates + email: ls1.itg@in.tum.de + +issuerprod: + # -- We don't want Theia to install the production issuer + name: "letsencrypt-prod" + enable: false diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml b/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml new file mode 100644 index 0000000..2dbe04f --- /dev/null +++ b/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml @@ -0,0 +1,2 @@ +# -- The cluster issuer to use for the certificate +clusterIssuer: theia-cloud-selfsigned-issuer diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml new file mode 100644 index 0000000..1587170 --- /dev/null +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -0,0 +1,100 @@ +hosts: + configuration: + &hostsConfig # This is a YAML anchor for reusability and readability + baseHost: theia-test.artemis.cit.tum.de + service: service.test2 + landing: test2 + instance: instance.test2 + +theia-certificates: + hosts: + configuration: *hostsConfig + +theia-cloud: + app: + id: nJV3nKZmpxTD4wu2 + name: Artemis Online IDE (Test2) + + issuer: + email: ls1.itg@in.tum.de + + hosts: + configuration: *hostsConfig + allWildcardInstances: ["*.webview."] + + ingress: + #instanceName: "theia-cloud-ws-ingress" + clusterIssuer: letsencrypt-prod + certManagerAnnotations: false + instances: + allWildcardSecretNames: {"*.webview.": static-theia-cert} + + monitor: + enable: true + activityTracker: + enable: true + interval: 3 + + operator: + #image: ghcr.io/ls1intum/theia/operator:latest + #eagerStart: false + replicas: 1 + sessionsPerUser: 10 + storageClassName: csi-rbd-sc + + # service: + # image: ghcr.io/ls1intum/theia/service:latest + + preloading: + images: + - ghcr.io/ls1intum/theia/landing-page:latest + - ghcr.io/ls1intum/theia/java-17:latest + - ghcr.io/ls1intum/theia/c:latest + - ghcr.io/ls1intum/theia/javascript:latest + - ghcr.io/ls1intum/theia/ocaml:latest + - ghcr.io/ls1intum/theia/rust:latest + - ghcr.io/ls1intum/theia/python:latest + + imagePullPolicy: Always + + # Do not install demoApplication + demoApplication: + install: false + + landingPage: + # We use the try now page as landing page since the default does not support mutliple apps -> https://github.com/eclipsesource/theia-cloud/discussions/301 + image: ghcr.io/ls1intum/theia/landing-page + # We can define a default blueprint + appDefinition: "java-17-latest" + ephemeralStorage: true + additionalApps: + java-17-latest: + label: Java 17 + c-latest: + label: C + javascript-latest: + label: Javascript + ocaml-latest: + label: Ocaml + python-latest: + label: Python + rust-latest: + label: Rust + infoTitle: "Welcome to Theia Test 2" + infoText: "" + loadingText: "Preparing your personal Online IDE..." + logoData: "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" + + logoFileExtension: "png" + + keycloak: + enable: true + + # -- Key cloak auth URL. Only has to be specified when enable: true + authUrl: "https://keycloak.ase.in.tum.de/" + + # -- The Keycloak Realm. Only has to be specified when enable: true + realm: "Test" + + # -- The client-id. Only has to be specified when enable: true + clientId: "theia-test" From 7df870e0a0122649f7d0690dc0888cf1e3b2ab0c Mon Sep 17 00:00:00 2001 From: Kevin Gruber <79568237+KevinGruber2001@users.noreply.github.com> Date: Tue, 18 Nov 2025 15:28:05 +0100 Subject: [PATCH 02/79] Update deployments/test2.theia-test.artemis.cit.tum.de/values.yaml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 1587170..39e1d62 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -62,7 +62,7 @@ theia-cloud: install: false landingPage: - # We use the try now page as landing page since the default does not support mutliple apps -> https://github.com/eclipsesource/theia-cloud/discussions/301 + # We use the try now page as landing page since the default does not support multiple apps -> https://github.com/eclipsesource/theia-cloud/discussions/301 image: ghcr.io/ls1intum/theia/landing-page # We can define a default blueprint appDefinition: "java-17-latest" From 392134901f46e80345dae71d7a53b7f057ea8adf Mon Sep 17 00:00:00 2001 From: Kevin Gruber <79568237+KevinGruber2001@users.noreply.github.com> Date: Tue, 18 Nov 2025 15:28:13 +0100 Subject: [PATCH 03/79] Update deployments/test2.theia-test.artemis.cit.tum.de/values.yaml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 39e1d62..bab8a9b 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -27,7 +27,7 @@ theia-cloud: clusterIssuer: letsencrypt-prod certManagerAnnotations: false instances: - allWildcardSecretNames: {"*.webview.": static-theia-cert} + allWildcardSecretNames: { "*.webview.": static-theia-cert } monitor: enable: true From d2ac8e76161922c0d279d73eb67dc7e450b54b02 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 18 Nov 2025 15:46:43 +0100 Subject: [PATCH 04/79] add test2 to workflow --- .github/workflows/deploy-pr.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/deploy-pr.yml b/.github/workflows/deploy-pr.yml index d5d5862..cbefc55 100644 --- a/.github/workflows/deploy-pr.yml +++ b/.github/workflows/deploy-pr.yml @@ -21,6 +21,7 @@ on: type: choice options: - test1 + - test2 jobs: # Job 1: Deploy to Test1 environment @@ -33,3 +34,14 @@ jobs: with: environment: test1 secrets: inherit + + # Job 2: Deploy to Test2 environment + # Runs automatically on all PR events OR when manually selected + # Environment variables NAMESPACE and HELM_VALUES_PATH are read from GitHub Environment settings + deploy-test2: + if: github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && inputs.environment == 'test2') + name: Deploy to Test2 + uses: ./.github/workflows/deploy-theia.yml + with: + environment: test2 + secrets: inherit From ca5e4f5b9966ffbd393d57d34402606b291a5259 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 16 Nov 2025 13:45:43 +0100 Subject: [PATCH 05/79] Add shared cache node helm chart --- charts/theia-cloud-combined/Chart.yaml | 4 ++++ charts/theia-cloud-combined/values.yaml | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 571564a..5173a85 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -16,3 +16,7 @@ dependencies: - name: theia-appdefinitions version: 0.1.0 repository: "file://../theia-appdefinitions" + + - name: theia-shared-cache + version: 1.0.0 + repository: "https://ls1intum.github.io/theia-shared-cache/" diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index 4e3271c..0f3b210 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -6,6 +6,10 @@ hosts: landing: theia instance: instance.theia +theia-shared-cache: + enabled: true + replicas: 1 + theia-certificates: hosts: configuration: *hostsConfig @@ -27,7 +31,7 @@ theia-cloud: clusterIssuer: letsencrypt-prod certManagerAnnotations: false instances: - allWildcardSecretNames: { "*.webview.": static-theia-cert } + allWildcardSecretNames: {"*.webview.": static-theia-cert} monitor: enable: true From 62febb9ae62d804e5a3e03e4d083399191a0bd9f Mon Sep 17 00:00:00 2001 From: = Date: Sun, 16 Nov 2025 17:26:14 +0100 Subject: [PATCH 06/79] Change storage class --- charts/theia-cloud-combined/values.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index 0f3b210..671259b 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -9,6 +9,9 @@ hosts: theia-shared-cache: enabled: true replicas: 1 + persistence: + size: 2Gi + storageClass: csi-rbd-sc theia-certificates: hosts: From f4e5a6f1d3da531c9b126900ee19b1b7fbaa710c Mon Sep 17 00:00:00 2001 From: = Date: Sun, 16 Nov 2025 18:15:47 +0100 Subject: [PATCH 07/79] Increase Cache Version number --- charts/theia-cloud-combined/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 5173a85..9e36d20 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: "file://../theia-appdefinitions" - name: theia-shared-cache - version: 1.0.0 + version: 1.0.1 repository: "https://ls1intum.github.io/theia-shared-cache/" From 6a42e81bc838f619a2d24bd5a1703bc20143699a Mon Sep 17 00:00:00 2001 From: = Date: Tue, 18 Nov 2025 14:10:32 +0100 Subject: [PATCH 08/79] set opertator --- charts/theia-cloud-combined/Chart.yaml | 2 +- value-reference-files/theia-cloud-helm-values.yml | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 9e36d20..d75fd16 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: "file://../theia-appdefinitions" - name: theia-shared-cache - version: 1.0.1 + version: 0.1.0 repository: "https://ls1intum.github.io/theia-shared-cache/" diff --git a/value-reference-files/theia-cloud-helm-values.yml b/value-reference-files/theia-cloud-helm-values.yml index 4d7bdbe..292adc7 100644 --- a/value-reference-files/theia-cloud-helm-values.yml +++ b/value-reference-files/theia-cloud-helm-values.yml @@ -18,7 +18,7 @@ ingress: clusterIssuer: letsencrypt-prod certManagerAnnotations: true instances: - allWildcardSecretNames: { "*.webview.": static-theia-cert } + allWildcardSecretNames: {"*.webview.": static-theia-cert} monitor: enable: true @@ -27,11 +27,13 @@ monitor: interval: 3 operator: - image: theiacloud/theia-cloud-operator:1.1.0-next + image: ghcr.io/ls1intum/theia/operator:pr-41 eagerStart: false replicas: 1 sessionsPerUser: 10 storageClassName: csi-rbd-sc + enableCaching: true + cacheUrl: "http://theia-shared-cache:5071" service: image: theiacloud/theia-cloud-service:1.1.0-next From d459ac9325d2f19455b0a5312733c8749da2a34a Mon Sep 17 00:00:00 2001 From: = Date: Tue, 18 Nov 2025 15:12:13 +0100 Subject: [PATCH 09/79] update shared cache version number --- charts/theia-cloud-combined/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index d75fd16..0b922ca 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: "file://../theia-appdefinitions" - name: theia-shared-cache - version: 0.1.0 + version: 0.1.1 repository: "https://ls1intum.github.io/theia-shared-cache/" From 54a63cfbac8eb21ed2d510f5df6c5c8aa56b6bbf Mon Sep 17 00:00:00 2001 From: = Date: Tue, 25 Nov 2025 18:09:27 +0100 Subject: [PATCH 10/79] update shared cache chart and add ui values --- charts/theia-cloud-combined/Chart.yaml | 2 +- charts/theia-cloud-combined/values.yaml | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 0b922ca..ba7cd2f 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: "file://../theia-appdefinitions" - name: theia-shared-cache - version: 0.1.1 + version: 0.1.2 repository: "https://ls1intum.github.io/theia-shared-cache/" diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index 671259b..08924f1 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -12,6 +12,9 @@ theia-shared-cache: persistence: size: 2Gi storageClass: csi-rbd-sc + ui: + enabled: true + host: "theia-shared-cache.theia.artemis.cit.tum.de" theia-certificates: hosts: From e6eb229961cb38d7d10e7eac31713c4640f328a5 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 25 Nov 2025 18:31:51 +0100 Subject: [PATCH 11/79] create certificate for cache --- .../templates/cache-certificate.yml | 14 ++++++++++++++ charts/theia-certificates/values.yaml | 1 + charts/theia-cloud-combined/values.yaml | 3 ++- .../values.yaml | 3 ++- .../values.yaml | 3 ++- .../theia-staging.artemis.cit.tum.de/values.yaml | 3 ++- deployments/theia.artemis.cit.tum.de/values.yaml | 3 ++- 7 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 charts/theia-certificates/templates/cache-certificate.yml diff --git a/charts/theia-certificates/templates/cache-certificate.yml b/charts/theia-certificates/templates/cache-certificate.yml new file mode 100644 index 0000000..ac0991f --- /dev/null +++ b/charts/theia-certificates/templates/cache-certificate.yml @@ -0,0 +1,14 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: cache-cert +spec: + secretName: cache-cert-secret + issuerRef: + name: letsencrypt-prod + kind: ClusterIssuer + commonName: "{{ .Values.hosts.configuration.cache }}.{{ .Values.hosts.configuration.baseHost }}" + dnsNames: + - "{{ .Values.hosts.configuration.cache }}.{{ .Values.hosts.configuration.baseHost }}" + privateKey: + rotationPolicy: Never diff --git a/charts/theia-certificates/values.yaml b/charts/theia-certificates/values.yaml index c530eac..2b6e633 100644 --- a/charts/theia-certificates/values.yaml +++ b/charts/theia-certificates/values.yaml @@ -4,6 +4,7 @@ hosts: service: service.theia landing: theia instance: instance.theia + cache: cache.theia wildcardCertificate: # The base64 encoded wildcard certificate wildcardKey: # The base64 encoded wildcard key diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index 08924f1..c4f9f66 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -14,7 +14,8 @@ theia-shared-cache: storageClass: csi-rbd-sc ui: enabled: true - host: "theia-shared-cache.theia.artemis.cit.tum.de" + hosts: + configuration: *hostsConfig theia-certificates: hosts: diff --git a/deployments/test1.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test1.theia-test.artemis.cit.tum.de/values.yaml index 5607f5e..cca5487 100644 --- a/deployments/test1.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test1.theia-test.artemis.cit.tum.de/values.yaml @@ -5,6 +5,7 @@ hosts: service: service.test1 landing: test1 instance: instance.test1 + cache: cache.test1 theia-certificates: hosts: @@ -27,7 +28,7 @@ theia-cloud: clusterIssuer: letsencrypt-prod certManagerAnnotations: false instances: - allWildcardSecretNames: { "*.webview.": static-theia-cert } + allWildcardSecretNames: {"*.webview.": static-theia-cert} monitor: enable: true diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index bab8a9b..28b5461 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -5,6 +5,7 @@ hosts: service: service.test2 landing: test2 instance: instance.test2 + cache: cache.test2 theia-certificates: hosts: @@ -27,7 +28,7 @@ theia-cloud: clusterIssuer: letsencrypt-prod certManagerAnnotations: false instances: - allWildcardSecretNames: { "*.webview.": static-theia-cert } + allWildcardSecretNames: {"*.webview.": static-theia-cert} monitor: enable: true diff --git a/deployments/theia-staging.artemis.cit.tum.de/values.yaml b/deployments/theia-staging.artemis.cit.tum.de/values.yaml index fab184f..f2dc1d6 100644 --- a/deployments/theia-staging.artemis.cit.tum.de/values.yaml +++ b/deployments/theia-staging.artemis.cit.tum.de/values.yaml @@ -5,6 +5,7 @@ hosts: service: service.theia-staging landing: theia-staging instance: instance.theia-staging + cache: cache.theia-staging theia-certificates: hosts: @@ -27,7 +28,7 @@ theia-cloud: clusterIssuer: letsencrypt-prod certManagerAnnotations: false instances: - allWildcardSecretNames: { "*.webview.": static-theia-cert } + allWildcardSecretNames: {"*.webview.": static-theia-cert} monitor: enable: true diff --git a/deployments/theia.artemis.cit.tum.de/values.yaml b/deployments/theia.artemis.cit.tum.de/values.yaml index 327e8e0..2add9ef 100644 --- a/deployments/theia.artemis.cit.tum.de/values.yaml +++ b/deployments/theia.artemis.cit.tum.de/values.yaml @@ -5,6 +5,7 @@ hosts: service: service.theia landing: theia instance: instance.theia + cache: cache.theia theia-certificates: hosts: @@ -27,7 +28,7 @@ theia-cloud: clusterIssuer: letsencrypt-prod certManagerAnnotations: false instances: - allWildcardSecretNames: { "*.webview.": static-theia-cert } + allWildcardSecretNames: {"*.webview.": static-theia-cert} monitor: enable: true From 84149d27d518f45e215629fa70dd9af7e9b2dd53 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 25 Nov 2025 18:33:14 +0100 Subject: [PATCH 12/79] add missing cache reference --- charts/theia-cloud-combined/values.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index c4f9f66..467bad4 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -5,6 +5,7 @@ hosts: service: service.theia landing: theia instance: instance.theia + cache: cache.theia theia-shared-cache: enabled: true From f7ce46134136476a75da18012f4b18792690700f Mon Sep 17 00:00:00 2001 From: = Date: Tue, 25 Nov 2025 18:53:48 +0100 Subject: [PATCH 13/79] update shared cache version --- charts/theia-cloud-combined/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index ba7cd2f..ba4df12 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: "file://../theia-appdefinitions" - name: theia-shared-cache - version: 0.1.2 + version: 0.1.3 repository: "https://ls1intum.github.io/theia-shared-cache/" From e7518e01d7ec2bcec58f82faa29bda3aaba87f3d Mon Sep 17 00:00:00 2001 From: = Date: Tue, 25 Nov 2025 19:07:12 +0100 Subject: [PATCH 14/79] add test2 configureation for cache --- .../test2.theia-test.artemis.cit.tum.de/values.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 28b5461..80df861 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -11,6 +11,13 @@ theia-certificates: hosts: configuration: *hostsConfig +theia-shared-cache: + enabled: true + ui: + enabled: true + hosts: + configuration: *hostsConfig + theia-cloud: app: id: nJV3nKZmpxTD4wu2 From 738809b97ed9fcad84f0662227cf7c0dae7103ba Mon Sep 17 00:00:00 2001 From: = Date: Tue, 25 Nov 2025 19:40:24 +0100 Subject: [PATCH 15/79] increase cache version --- charts/theia-cloud-combined/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index ba4df12..6097ac8 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: "file://../theia-appdefinitions" - name: theia-shared-cache - version: 0.1.3 + version: 0.1.4 repository: "https://ls1intum.github.io/theia-shared-cache/" From ac1826e8bc8e5ab57ecca15075b5409e098f10d0 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 25 Nov 2025 20:19:19 +0100 Subject: [PATCH 16/79] fix minor persistance issues --- charts/theia-cloud-combined/values.yaml | 2 +- .../test2.theia-test.artemis.cit.tum.de/values.yaml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index 467bad4..a254f14 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -11,7 +11,7 @@ theia-shared-cache: enabled: true replicas: 1 persistence: - size: 2Gi + size: 10Gi storageClass: csi-rbd-sc ui: enabled: true diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 80df861..54f06eb 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -17,6 +17,13 @@ theia-shared-cache: enabled: true hosts: configuration: *hostsConfig + resources: + requests: + memory: "1Gi" + cpu: 0.5 + limits: + memory: "10Gi" + cpu: 1.5 theia-cloud: app: From 314927b87319cec95322ff90fa46a75b1bd575f1 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 28 Nov 2025 15:22:30 +0100 Subject: [PATCH 17/79] add java image with gradle --- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 4 +++- value-reference-files/tum-theia-cloud-helm-test-values.yaml | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 54f06eb..502d811 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -56,6 +56,8 @@ theia-cloud: replicas: 1 sessionsPerUser: 10 storageClassName: csi-rbd-sc + enableCaching: true + cacheUrl: "http://theia-shared-cache:5071" # service: # image: ghcr.io/ls1intum/theia/service:latest @@ -63,7 +65,7 @@ theia-cloud: preloading: images: - ghcr.io/ls1intum/theia/landing-page:latest - - ghcr.io/ls1intum/theia/java-17:latest + - ghcr.io/ls1intum/theia/java-17:pr-49 - ghcr.io/ls1intum/theia/c:latest - ghcr.io/ls1intum/theia/javascript:latest - ghcr.io/ls1intum/theia/ocaml:latest diff --git a/value-reference-files/tum-theia-cloud-helm-test-values.yaml b/value-reference-files/tum-theia-cloud-helm-test-values.yaml index c664cf6..957cd0d 100644 --- a/value-reference-files/tum-theia-cloud-helm-test-values.yaml +++ b/value-reference-files/tum-theia-cloud-helm-test-values.yaml @@ -27,7 +27,7 @@ theia-cloud: clusterIssuer: letsencrypt-prod certManagerAnnotations: false instances: - allWildcardSecretNames: { "*.webview.": static-theia-cert } + allWildcardSecretNames: {"*.webview.": static-theia-cert} monitor: enable: true @@ -89,4 +89,4 @@ theia-cloud: keycloak: enable: true # -- Key cloak auth URL. Only has to be specified when enable: true - authUrl: "https://keycloak.ase.in.tum.de/" \ No newline at end of file + authUrl: "https://keycloak.ase.in.tum.de/" From c2a00f38e75cf9848eaa46d245d378bac12ab34f Mon Sep 17 00:00:00 2001 From: = Date: Fri, 28 Nov 2025 15:41:32 +0100 Subject: [PATCH 18/79] change used java appdefinition --- .../test2.theia-test.artemis.cit.tum.de/values.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 502d811..74b926f 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -7,6 +7,14 @@ hosts: instance: instance.test2 cache: cache.test2 +theia-appdefinitions: + apps: + - name: java-17-latest + image: ghcr.io/ls1intum/theia/java-17:pr-49 + requestsMemory: 2000M + requestsCpu: 500m + limitsMemory: 2400M + theia-certificates: hosts: configuration: *hostsConfig From 205fb9e48ec14a9952b415d12f06148c6edcc1ff Mon Sep 17 00:00:00 2001 From: = Date: Fri, 28 Nov 2025 15:47:17 +0100 Subject: [PATCH 19/79] set app definition directly in appdefinitions chart --- charts/theia-appdefinitions/values.yaml | 2 +- .../test2.theia-test.artemis.cit.tum.de/values.yaml | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/charts/theia-appdefinitions/values.yaml b/charts/theia-appdefinitions/values.yaml index 20b548f..9c0d577 100644 --- a/charts/theia-appdefinitions/values.yaml +++ b/charts/theia-appdefinitions/values.yaml @@ -1,6 +1,6 @@ apps: - name: java-17-latest - image: ghcr.io/ls1intum/theia/java-17:latest + image: ghcr.io/ls1intum/theia/java-17:pr-49 requestsMemory: 2000M requestsCpu: 500m limitsMemory: 2400M diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 74b926f..502d811 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -7,14 +7,6 @@ hosts: instance: instance.test2 cache: cache.test2 -theia-appdefinitions: - apps: - - name: java-17-latest - image: ghcr.io/ls1intum/theia/java-17:pr-49 - requestsMemory: 2000M - requestsCpu: 500m - limitsMemory: 2400M - theia-certificates: hosts: configuration: *hostsConfig From f9935a4ef2de053ed5707423e3e23d600af6737c Mon Sep 17 00:00:00 2001 From: = Date: Fri, 28 Nov 2025 16:21:14 +0100 Subject: [PATCH 20/79] switch to theia operator --- charts/theia-cloud-combined/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index a254f14..2b45453 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -48,7 +48,7 @@ theia-cloud: interval: 3 operator: - image: theiacloud/theia-cloud-operator:1.1.0-next + image: ghcr.io/ls1intum/theia/operator:pr-39 eagerStart: false replicas: 1 sessionsPerUser: 10 From 2caecab2313f42272fa4e11c07a5fa176e63f281 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 28 Nov 2025 18:03:15 +0100 Subject: [PATCH 21/79] add operator attributes to theia-cloud-combined --- .../templates/operator.yaml | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 charts/theia-cloud-combined/templates/operator.yaml diff --git a/charts/theia-cloud-combined/templates/operator.yaml b/charts/theia-cloud-combined/templates/operator.yaml new file mode 100644 index 0000000..c7c14e3 --- /dev/null +++ b/charts/theia-cloud-combined/templates/operator.yaml @@ -0,0 +1,115 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: operator-deployment + labels: + app: operator + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ tpl (.Values.operator.replicas | toString) . }} + selector: + matchLabels: + app: operator + template: + metadata: + labels: + app: operator + {{- if .Values.operator.logging.override }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/operator-configmap-logging.yaml") . | sha256sum }} + {{- end }} + spec: + # we need to be able to create and read operators + automountServiceAccountToken: true + serviceAccountName: operator-api-service-account + containers: + - name: operator-container + image: {{ tpl (.Values.operator.image | toString) . }} + imagePullPolicy: {{ if .Values.operator.imagePullPolicy }}{{ tpl (.Values.operator.imagePullPolicy | toString) . }}{{ else }}{{ tpl (.Values.imagePullPolicy | toString) . }}{{ end }} + args: + {{- if .Values.keycloak.enable }} + - "--keycloak" + - "--keycloakURL" + - "{{ tpl (.Values.keycloak.authUrl | toString) . }}" + - "--keycloakRealm" + - "{{ tpl (.Values.keycloak.realm | toString) . }}" + - "--keycloakClientId" + - "{{ tpl (.Values.keycloak.clientId | toString) . }}" + {{- end }} + {{ if .Values.operator.eagerStart }}- "--eagerStart"{{ end }} + - "--cloudProvider" + - {{ tpl (.Values.operator.cloudProvider | toString) . }} + - "--bandwidthLimiter" + - {{ tpl (.Values.operator.bandwidthLimiter | toString) . }} + - "--wondershaperImage" + - {{ tpl (.Values.operator.wondershaperImage | toString) . }} + - "--serviceUrl" + {{- if .Values.hosts.usePaths }} + - {{ tpl (.Values.service.protocol | toString) . }}://{{ tpl (.Values.hosts.configuration.baseHost | toString) . }}/{{ tpl (.Values.hosts.configuration.service | toString) . }} + {{- else}} + - {{ tpl (.Values.service.protocol | toString) . }}://{{ tpl (.Values.hosts.configuration.service | toString) . }}.{{ tpl (.Values.hosts.configuration.baseHost | toString) . }} + {{- end }} + - "--sessionsPerUser" + - "{{ tpl (.Values.operator.sessionsPerUser | toString) . }}" + - "--serviceAuthToken" + - {{ tpl ((.Values.service.authToken | default .Values.app.id) | toString) . }} + {{- if .Values.hosts.usePaths }} + - "--instancesHost" + - "{{ tpl (.Values.hosts.configuration.baseHost | toString) . }}" + - "--usePaths" + - "--instancesPath" + - "{{ tpl (.Values.hosts.configuration.instance | toString) . }}" + {{- else }} + - "--instancesHost" + - "{{ tpl (.Values.hosts.configuration.instance | toString) . }}.{{ tpl (.Values.hosts.configuration.baseHost | toString) . }}" + {{- end }} + - "--storageClassName" + - "{{ tpl (.Values.operator.storageClassName | toString) . }}" + - "--requestedStorage" + - "{{ tpl (.Values.operator.requestedStorage | toString) . }}" + {{- if .Values.monitor.enable }} + - "--enableMonitor" + {{- if .Values.monitor.activityTracker.enable }} + - "--enableActivityTracker" + - "--monitorInterval" + - "{{ tpl (.Values.monitor.activityTracker.interval | toString) . }}" + {{- end }} + {{- end }} + - "--leaderLeaseDuration" + - "{{ tpl (.Values.operator.leaderElection.leaseDuration | toString) . }}" + - "--leaderRenewDeadline" + - "{{ tpl (.Values.operator.leaderElection.renewDeadline | toString) . }}" + - "--leaderRetryPeriod" + - "{{ tpl (.Values.operator.leaderElection.retryPeriod | toString) . }}" + - "--maxWatchIdleTime" + - "{{ tpl (.Values.operator.maxWatchIdleTime | toString) . }}" + {{- if .Values.operator.oAuth2ProxyVersion }} + - "--oAuth2ProxyVersion" + - "{{ tpl (.Values.operator.oAuth2ProxyVersion | toString) . }}" + {{- end }} + {{- if .Values.operator.continueOnException }} + - "--continueOnException" + {{- end }} + {{- if .Values.operator.enableCaching }} + - "--enableCaching" + {{- if .Values.operator.cacheUrl }} + - "--cacheUrl" + - "{{ tpl (.Values.operator.cacheUrl | toString) . }}" + {{- end }} + {{- end }} + {{- if .Values.operator.logging.override }} + volumeMounts: + - name: operator-logging-config + mountPath: /log-config/log4j2.xml + subPath: log4j2.xml + {{- end }} + {{- if .Values.operator.logging.override }} + volumes: + - name: operator-logging-config + configMap: + name: operator-logging-config + {{- end }} + {{- if .Values.operator.imagePullSecret }} + imagePullSecrets: + - name: {{ tpl (.Values.operator.imagePullSecret | toString) . }} + {{- end }} From ddcc11661dc915ee79300395668cd5294f488e50 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 28 Nov 2025 18:17:05 +0100 Subject: [PATCH 22/79] try adding helm values directly in theia-cloud-combined --- charts/theia-cloud-combined/values.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index 2b45453..ba8e3e8 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -53,6 +53,8 @@ theia-cloud: replicas: 1 sessionsPerUser: 10 storageClassName: csi-rbd-sc + enableCaching: true + cacheUrl: "http://theia-shared-cache:5071" service: image: theiacloud/theia-cloud-service:1.1.0-next From f72821c5baa0754a3c1077a69562248b3665e5a6 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 28 Nov 2025 18:52:28 +0100 Subject: [PATCH 23/79] remove temp operator deployment --- .../templates/operator.yaml | 115 ------------------ 1 file changed, 115 deletions(-) delete mode 100644 charts/theia-cloud-combined/templates/operator.yaml diff --git a/charts/theia-cloud-combined/templates/operator.yaml b/charts/theia-cloud-combined/templates/operator.yaml deleted file mode 100644 index c7c14e3..0000000 --- a/charts/theia-cloud-combined/templates/operator.yaml +++ /dev/null @@ -1,115 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: operator-deployment - labels: - app: operator - namespace: {{ .Release.Namespace }} -spec: - replicas: {{ tpl (.Values.operator.replicas | toString) . }} - selector: - matchLabels: - app: operator - template: - metadata: - labels: - app: operator - {{- if .Values.operator.logging.override }} - annotations: - checksum/config: {{ include (print $.Template.BasePath "/operator-configmap-logging.yaml") . | sha256sum }} - {{- end }} - spec: - # we need to be able to create and read operators - automountServiceAccountToken: true - serviceAccountName: operator-api-service-account - containers: - - name: operator-container - image: {{ tpl (.Values.operator.image | toString) . }} - imagePullPolicy: {{ if .Values.operator.imagePullPolicy }}{{ tpl (.Values.operator.imagePullPolicy | toString) . }}{{ else }}{{ tpl (.Values.imagePullPolicy | toString) . }}{{ end }} - args: - {{- if .Values.keycloak.enable }} - - "--keycloak" - - "--keycloakURL" - - "{{ tpl (.Values.keycloak.authUrl | toString) . }}" - - "--keycloakRealm" - - "{{ tpl (.Values.keycloak.realm | toString) . }}" - - "--keycloakClientId" - - "{{ tpl (.Values.keycloak.clientId | toString) . }}" - {{- end }} - {{ if .Values.operator.eagerStart }}- "--eagerStart"{{ end }} - - "--cloudProvider" - - {{ tpl (.Values.operator.cloudProvider | toString) . }} - - "--bandwidthLimiter" - - {{ tpl (.Values.operator.bandwidthLimiter | toString) . }} - - "--wondershaperImage" - - {{ tpl (.Values.operator.wondershaperImage | toString) . }} - - "--serviceUrl" - {{- if .Values.hosts.usePaths }} - - {{ tpl (.Values.service.protocol | toString) . }}://{{ tpl (.Values.hosts.configuration.baseHost | toString) . }}/{{ tpl (.Values.hosts.configuration.service | toString) . }} - {{- else}} - - {{ tpl (.Values.service.protocol | toString) . }}://{{ tpl (.Values.hosts.configuration.service | toString) . }}.{{ tpl (.Values.hosts.configuration.baseHost | toString) . }} - {{- end }} - - "--sessionsPerUser" - - "{{ tpl (.Values.operator.sessionsPerUser | toString) . }}" - - "--serviceAuthToken" - - {{ tpl ((.Values.service.authToken | default .Values.app.id) | toString) . }} - {{- if .Values.hosts.usePaths }} - - "--instancesHost" - - "{{ tpl (.Values.hosts.configuration.baseHost | toString) . }}" - - "--usePaths" - - "--instancesPath" - - "{{ tpl (.Values.hosts.configuration.instance | toString) . }}" - {{- else }} - - "--instancesHost" - - "{{ tpl (.Values.hosts.configuration.instance | toString) . }}.{{ tpl (.Values.hosts.configuration.baseHost | toString) . }}" - {{- end }} - - "--storageClassName" - - "{{ tpl (.Values.operator.storageClassName | toString) . }}" - - "--requestedStorage" - - "{{ tpl (.Values.operator.requestedStorage | toString) . }}" - {{- if .Values.monitor.enable }} - - "--enableMonitor" - {{- if .Values.monitor.activityTracker.enable }} - - "--enableActivityTracker" - - "--monitorInterval" - - "{{ tpl (.Values.monitor.activityTracker.interval | toString) . }}" - {{- end }} - {{- end }} - - "--leaderLeaseDuration" - - "{{ tpl (.Values.operator.leaderElection.leaseDuration | toString) . }}" - - "--leaderRenewDeadline" - - "{{ tpl (.Values.operator.leaderElection.renewDeadline | toString) . }}" - - "--leaderRetryPeriod" - - "{{ tpl (.Values.operator.leaderElection.retryPeriod | toString) . }}" - - "--maxWatchIdleTime" - - "{{ tpl (.Values.operator.maxWatchIdleTime | toString) . }}" - {{- if .Values.operator.oAuth2ProxyVersion }} - - "--oAuth2ProxyVersion" - - "{{ tpl (.Values.operator.oAuth2ProxyVersion | toString) . }}" - {{- end }} - {{- if .Values.operator.continueOnException }} - - "--continueOnException" - {{- end }} - {{- if .Values.operator.enableCaching }} - - "--enableCaching" - {{- if .Values.operator.cacheUrl }} - - "--cacheUrl" - - "{{ tpl (.Values.operator.cacheUrl | toString) . }}" - {{- end }} - {{- end }} - {{- if .Values.operator.logging.override }} - volumeMounts: - - name: operator-logging-config - mountPath: /log-config/log4j2.xml - subPath: log4j2.xml - {{- end }} - {{- if .Values.operator.logging.override }} - volumes: - - name: operator-logging-config - configMap: - name: operator-logging-config - {{- end }} - {{- if .Values.operator.imagePullSecret }} - imagePullSecrets: - - name: {{ tpl (.Values.operator.imagePullSecret | toString) . }} - {{- end }} From 9841b73d652a096cc64068b78d0eb41ca65d4087 Mon Sep 17 00:00:00 2001 From: = Date: Mon, 1 Dec 2025 18:03:02 +0100 Subject: [PATCH 24/79] update app definitions java blueprint --- charts/theia-appdefinitions/values.yaml | 2 +- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 2 +- value-reference-files/tum-theia-cloud-helm-test-values.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/charts/theia-appdefinitions/values.yaml b/charts/theia-appdefinitions/values.yaml index 9c0d577..1490946 100644 --- a/charts/theia-appdefinitions/values.yaml +++ b/charts/theia-appdefinitions/values.yaml @@ -1,6 +1,6 @@ apps: - name: java-17-latest - image: ghcr.io/ls1intum/theia/java-17:pr-49 + image: ghcr.io/ls1intum/theia/java-17:48-add-gradle-to-java-blueprint requestsMemory: 2000M requestsCpu: 500m limitsMemory: 2400M diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 502d811..dd3e35a 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -65,7 +65,7 @@ theia-cloud: preloading: images: - ghcr.io/ls1intum/theia/landing-page:latest - - ghcr.io/ls1intum/theia/java-17:pr-49 + - ghcr.io/ls1intum/theia/java-17:48-add-gradle-to-java-blueprint - ghcr.io/ls1intum/theia/c:latest - ghcr.io/ls1intum/theia/javascript:latest - ghcr.io/ls1intum/theia/ocaml:latest diff --git a/value-reference-files/tum-theia-cloud-helm-test-values.yaml b/value-reference-files/tum-theia-cloud-helm-test-values.yaml index 957cd0d..2158d04 100644 --- a/value-reference-files/tum-theia-cloud-helm-test-values.yaml +++ b/value-reference-files/tum-theia-cloud-helm-test-values.yaml @@ -48,7 +48,7 @@ theia-cloud: preloading: images: - ghcr.io/ls1intum/theia/landing-page:latest - - ghcr.io/ls1intum/theia/java-17:latest + - ghcr.io/ls1intum/theia/java-17:48-add-gradle-to-java-blueprint - ghcr.io/ls1intum/theia/c:latest - ghcr.io/ls1intum/theia/javascript:latest - ghcr.io/ls1intum/theia/ocaml:latest From 102b511430e637e11d07931951fc6da7cb649ec8 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 2 Dec 2025 15:05:49 +0100 Subject: [PATCH 25/79] switch java image back to latest --- charts/theia-appdefinitions/values.yaml | 2 +- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 2 +- value-reference-files/tum-theia-cloud-helm-test-values.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/charts/theia-appdefinitions/values.yaml b/charts/theia-appdefinitions/values.yaml index 1490946..20b548f 100644 --- a/charts/theia-appdefinitions/values.yaml +++ b/charts/theia-appdefinitions/values.yaml @@ -1,6 +1,6 @@ apps: - name: java-17-latest - image: ghcr.io/ls1intum/theia/java-17:48-add-gradle-to-java-blueprint + image: ghcr.io/ls1intum/theia/java-17:latest requestsMemory: 2000M requestsCpu: 500m limitsMemory: 2400M diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index dd3e35a..72a3486 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -65,7 +65,7 @@ theia-cloud: preloading: images: - ghcr.io/ls1intum/theia/landing-page:latest - - ghcr.io/ls1intum/theia/java-17:48-add-gradle-to-java-blueprint + - ghcr.io/ls1intum/theia/java-17:latest - ghcr.io/ls1intum/theia/c:latest - ghcr.io/ls1intum/theia/javascript:latest - ghcr.io/ls1intum/theia/ocaml:latest diff --git a/value-reference-files/tum-theia-cloud-helm-test-values.yaml b/value-reference-files/tum-theia-cloud-helm-test-values.yaml index 2158d04..957cd0d 100644 --- a/value-reference-files/tum-theia-cloud-helm-test-values.yaml +++ b/value-reference-files/tum-theia-cloud-helm-test-values.yaml @@ -48,7 +48,7 @@ theia-cloud: preloading: images: - ghcr.io/ls1intum/theia/landing-page:latest - - ghcr.io/ls1intum/theia/java-17:48-add-gradle-to-java-blueprint + - ghcr.io/ls1intum/theia/java-17:latest - ghcr.io/ls1intum/theia/c:latest - ghcr.io/ls1intum/theia/javascript:latest - ghcr.io/ls1intum/theia/ocaml:latest From 273cc857ef45a1ccbc0d667c765e77a555ffd2aa Mon Sep 17 00:00:00 2001 From: = Date: Tue, 2 Dec 2025 17:38:01 +0100 Subject: [PATCH 26/79] update to new java blueprint, with configured cache --- charts/theia-appdefinitions/values.yaml | 2 +- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/theia-appdefinitions/values.yaml b/charts/theia-appdefinitions/values.yaml index 20b548f..83c82fe 100644 --- a/charts/theia-appdefinitions/values.yaml +++ b/charts/theia-appdefinitions/values.yaml @@ -1,6 +1,6 @@ apps: - name: java-17-latest - image: ghcr.io/ls1intum/theia/java-17:latest + image: ghcr.io/ls1intum/theia/java-17:pr-50 requestsMemory: 2000M requestsCpu: 500m limitsMemory: 2400M diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 72a3486..de12316 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -65,7 +65,7 @@ theia-cloud: preloading: images: - ghcr.io/ls1intum/theia/landing-page:latest - - ghcr.io/ls1intum/theia/java-17:latest + - ghcr.io/ls1intum/theia/java-17:pr-50 - ghcr.io/ls1intum/theia/c:latest - ghcr.io/ls1intum/theia/javascript:latest - ghcr.io/ls1intum/theia/ocaml:latest From 88da72ec6c3faf808f4b1d1405b06931648a7036 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 6 Dec 2025 17:28:14 +0100 Subject: [PATCH 27/79] Add internal tls for cache --- .../templates/cache-internal-certificate.yml | 15 +++++++++++++++ charts/theia-cloud-combined/Chart.yaml | 2 +- charts/theia-cloud-combined/values.yaml | 5 ++++- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 charts/theia-certificates/templates/cache-internal-certificate.yml diff --git a/charts/theia-certificates/templates/cache-internal-certificate.yml b/charts/theia-certificates/templates/cache-internal-certificate.yml new file mode 100644 index 0000000..eba1631 --- /dev/null +++ b/charts/theia-certificates/templates/cache-internal-certificate.yml @@ -0,0 +1,15 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: cache-internal-cert +spec: + secretName: cache-internal-cert-secret + issuerRef: + name: theia-cloud-selfsigned-issuer + kind: ClusterIssuer + commonName: "theia-shared-cache" + dnsNames: + - theia-shared-cache + - theia-shared-cache.theia-cloud.svc.cluster.local + privateKey: + rotationPolicy: never diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 6097ac8..c839d9e 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: "file://../theia-appdefinitions" - name: theia-shared-cache - version: 0.1.4 + version: 0.1.5 repository: "https://ls1intum.github.io/theia-shared-cache/" diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index ba8e3e8..e469a7a 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -15,6 +15,9 @@ theia-shared-cache: storageClass: csi-rbd-sc ui: enabled: true + tls: + enabled: true + secretName: cache-internal-cert-secret hosts: configuration: *hostsConfig @@ -54,7 +57,7 @@ theia-cloud: sessionsPerUser: 10 storageClassName: csi-rbd-sc enableCaching: true - cacheUrl: "http://theia-shared-cache:5071" + cacheUrl: "https://theia-shared-cache:5071" service: image: theiacloud/theia-cloud-service:1.1.0-next From 787083a0d888647f1f534caa570d031f797f5051 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 6 Dec 2025 17:34:43 +0100 Subject: [PATCH 28/79] Minor typo --- .../theia-certificates/templates/cache-internal-certificate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-certificates/templates/cache-internal-certificate.yml b/charts/theia-certificates/templates/cache-internal-certificate.yml index eba1631..b731f86 100644 --- a/charts/theia-certificates/templates/cache-internal-certificate.yml +++ b/charts/theia-certificates/templates/cache-internal-certificate.yml @@ -12,4 +12,4 @@ spec: - theia-shared-cache - theia-shared-cache.theia-cloud.svc.cluster.local privateKey: - rotationPolicy: never + rotationPolicy: Never From 591fc3cbfa903bd9e6bfe40bc55f3c81ba35c015 Mon Sep 17 00:00:00 2001 From: = Date: Mon, 8 Dec 2025 14:20:01 +0100 Subject: [PATCH 29/79] Fix wrong url --- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index de12316..4f88717 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -57,7 +57,7 @@ theia-cloud: sessionsPerUser: 10 storageClassName: csi-rbd-sc enableCaching: true - cacheUrl: "http://theia-shared-cache:5071" + cacheUrl: "https://theia-shared-cache:5071" # service: # image: ghcr.io/ls1intum/theia/service:latest From 8c3fd22a79baa12430e6c82056568e40b4e4b47d Mon Sep 17 00:00:00 2001 From: = Date: Sat, 17 Jan 2026 13:49:55 +0100 Subject: [PATCH 30/79] Use new gradle cache --- charts/theia-cloud-combined/values.yaml | 16 +------ .../values.yaml | 42 ++++++++++++++----- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index d13cd32..56f07f8 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -8,18 +8,7 @@ hosts: cache: cache.theia theia-shared-cache: - enabled: true - replicas: 1 - persistence: - size: 10Gi - storageClass: csi-rbd-sc - ui: - enabled: true - tls: - enabled: true - secretName: cache-internal-cert-secret - hosts: - configuration: *hostsConfig + enabled: false theia-certificates: hosts: @@ -56,8 +45,7 @@ theia-cloud: replicas: 1 sessionsPerUser: 10 storageClassName: csi-rbd-sc - enableCaching: true - cacheUrl: "https://theia-shared-cache:5071" + enableCaching: false service: image: ghcr.io/ls1intum/theia/service:latest diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index f897772..d7c5ae2 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -13,17 +13,37 @@ theia-certificates: theia-shared-cache: enabled: true - ui: - enabled: true - hosts: - configuration: *hostsConfig + + image: + repository: ghcr.io/ls1intum/theia-shared-cache/gradle-cache + tag: "latest" + pullPolicy: IfNotPresent + + auth: + username: "gradle" + password: "gradle" + + storage: + size: 50Gi + storageClass: "csi-rbd-sc" + resources: - requests: - memory: "1Gi" - cpu: 0.5 - limits: - memory: "10Gi" - cpu: 1.5 + cacheServer: + requests: + memory: "256Mi" + cpu: "100m" + limits: + memory: "1Gi" + cpu: "500m" + + minio: + requests: + memory: "512Mi" + cpu: "250m" + limits: + memory: "2Gi" + cpu: "1000m" + theia-cloud: app: @@ -57,7 +77,7 @@ theia-cloud: sessionsPerUser: 10 storageClassName: csi-rbd-sc enableCaching: true - cacheUrl: "https://theia-shared-cache:5071" + cacheUrl: "https://theia-shared-cache:8080" # service: # image: ghcr.io/ls1intum/theia/service:latest From b6d0bc36ba46a14a4668dfa87d29f0d128eed173 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 17 Jan 2026 13:53:48 +0100 Subject: [PATCH 31/79] temperorarly use without auth --- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index d7c5ae2..caab1c0 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -20,8 +20,7 @@ theia-shared-cache: pullPolicy: IfNotPresent auth: - username: "gradle" - password: "gradle" + enabled: false storage: size: 50Gi From 868498dd2685420b21c737e183d30d72c5dc85a8 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 17 Jan 2026 14:32:15 +0100 Subject: [PATCH 32/79] use main tag for now --- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index caab1c0..fba6d27 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -16,11 +16,12 @@ theia-shared-cache: image: repository: ghcr.io/ls1intum/theia-shared-cache/gradle-cache - tag: "latest" + tag: "main" pullPolicy: IfNotPresent auth: - enabled: false + username: "gradle" + password: "gradle" storage: size: 50Gi From 51d41a53f374506a8989316c2477f71b629fe0c8 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 17 Jan 2026 14:54:18 +0100 Subject: [PATCH 33/79] Update to correct shared cache url --- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index fba6d27..eba6638 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -77,7 +77,7 @@ theia-cloud: sessionsPerUser: 10 storageClassName: csi-rbd-sc enableCaching: true - cacheUrl: "https://theia-shared-cache:8080" + cacheUrl: "http://theia-cloud-combined-cache:8080/cache/" # service: # image: ghcr.io/ls1intum/theia/service:latest From db4f1a7e9c4b347a70f652ee5d00dca3fbe33558 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 6 Feb 2026 17:55:15 +0100 Subject: [PATCH 34/79] add monitoring for shared cache --- charts/theia-cloud-combined/Chart.yaml | 2 +- .../templates/dashboard-cache.yaml | 531 ++++++++++++++++++ .../templates/servicemonitor-cache.yaml | 0 charts/theia-monitoring/values.yaml | 3 + 4 files changed, 535 insertions(+), 1 deletion(-) create mode 100644 charts/theia-monitoring/templates/dashboard-cache.yaml create mode 100644 charts/theia-monitoring/templates/servicemonitor-cache.yaml diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 87ae0ce..c8cbb99 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: "file://../theia-appdefinitions" - name: theia-shared-cache - version: 0.2.0 + version: 0.2.1 repository: "https://ls1intum.github.io/theia-shared-cache/" diff --git a/charts/theia-monitoring/templates/dashboard-cache.yaml b/charts/theia-monitoring/templates/dashboard-cache.yaml new file mode 100644 index 0000000..53bcce9 --- /dev/null +++ b/charts/theia-monitoring/templates/dashboard-cache.yaml @@ -0,0 +1,531 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + grafana_dashboard: "1" + name: theia-cloud-dashboard-shared-cache + namespace: {{ .Values.dashboardNamespace }} +data: + shared-cache.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { "type": "grafana", "uid": "-- Grafana --" }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Monitoring dashboard for the Theia Shared Cache (Gradle Build Cache)", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, + "id": 100, + "panels": [], + "title": "Cache Performance", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Rate of cache hits vs cache misses per second", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 1 }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(cache_hits_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Hits", + "range": true, + "refId": "A" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(cache_misses_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Misses", + "range": true, + "refId": "B" + } + ], + "title": "Cache Hits vs Misses (rate/s)", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Percentage of cache requests that resulted in a hit", + "fieldConfig": { + "defaults": { + "color": { "mode": "thresholds" }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "red", "value": null }, + { "color": "yellow", "value": 50 }, + { "color": "green", "value": 80 } + ] + }, + "unit": "percentunit", + "min": 0, + "max": 1 + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 1 }, + "id": 2, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(cache_hits_total{namespace=\"$namespace\"}[5m]) / (rate(cache_hits_total{namespace=\"$namespace\"}[5m]) + rate(cache_misses_total{namespace=\"$namespace\"}[5m]))", + "instant": false, + "legendFormat": "Hit Rate", + "range": true, + "refId": "A" + } + ], + "title": "Cache Hit Rate", + "type": "gauge" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 }, + "id": 101, + "panels": [], + "title": "HTTP Requests", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Rate of HTTP requests per second to the cache server", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(requests_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Requests/s", + "range": true, + "refId": "A" + } + ], + "title": "Request Rate", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Average request duration to the cache server", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(request_duration_seconds_sum{namespace=\"$namespace\"}[5m]) / rate(request_duration_seconds_count{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Avg Duration", + "range": true, + "refId": "A" + } + ], + "title": "Average Request Duration", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 18 }, + "id": 102, + "panels": [], + "title": "Cache Entry Size", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Average size of cache entries being stored", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 19 }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(entry_size_bytes_sum{namespace=\"$namespace\"}[5m]) / rate(entry_size_bytes_count{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Avg Entry Size", + "range": true, + "refId": "A" + } + ], + "title": "Average Cache Entry Size", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 }, + "id": 103, + "panels": [], + "title": "Resource Usage", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "CPU usage of the cache server and MinIO containers", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 28 }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "sum(rate(container_cpu_usage_seconds_total{container!=\"POD\", container!=\"\", job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\"}[1m])) by (pod)", + "instant": false, + "legendFormat": "{{ "{{" }}pod{{ "}}" }}", + "range": true, + "refId": "A" + } + ], + "title": "Cache CPU Usage", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Memory usage of the cache server and MinIO containers", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 28 }, + "id": 7, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\", container!=\"POD\", container!=\"\"}", + "instant": false, + "legendFormat": "{{ "{{" }}pod{{ "}}" }}", + "range": true, + "refId": "A" + } + ], + "title": "Cache Memory Usage", + "type": "timeseries" + } + ], + "refresh": "30s", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": { "selected": false, "text": "test2", "value": "test2" }, + "hide": 0, + "includeAll": false, + "label": "Namespace", + "multi": false, + "name": "namespace", + "options": [ + { "selected": true, "text": "test2", "value": "test2" } + ], + "query": "test2", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { "from": "now-3h", "to": "now" }, + "timeRangeUpdatedDuringEditOrView": false, + "timepicker": {}, + "timezone": "browser", + "title": "Theia Shared Cache", + "uid": "theia-shared-cache-dash", + "version": 1, + "weekStart": "" + } diff --git a/charts/theia-monitoring/templates/servicemonitor-cache.yaml b/charts/theia-monitoring/templates/servicemonitor-cache.yaml new file mode 100644 index 0000000..e69de29 diff --git a/charts/theia-monitoring/values.yaml b/charts/theia-monitoring/values.yaml index f8287c6..0f8a859 100644 --- a/charts/theia-monitoring/values.yaml +++ b/charts/theia-monitoring/values.yaml @@ -23,3 +23,6 @@ sessionNamespaces: - test2 - test3 +# -- List of namespaces to monitor for Theia shared cache +sharedCacheNamespaces: + - test2 \ No newline at end of file From 7e02f13326ffe6b2edb7b303eaed83dd1dba26e7 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 7 Feb 2026 09:44:11 +0100 Subject: [PATCH 35/79] disabled cache auth --- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index eba6638..915afdb 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -20,8 +20,7 @@ theia-shared-cache: pullPolicy: IfNotPresent auth: - username: "gradle" - password: "gradle" + enabled: false storage: size: 50Gi From 8b298e738d1f8c1f5a9e5102c260cfca28d7908d Mon Sep 17 00:00:00 2001 From: = Date: Sat, 7 Feb 2026 10:46:14 +0100 Subject: [PATCH 36/79] add servicemonitor config --- .../templates/servicemonitor-cache.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/charts/theia-monitoring/templates/servicemonitor-cache.yaml b/charts/theia-monitoring/templates/servicemonitor-cache.yaml index e69de29..ca16012 100644 --- a/charts/theia-monitoring/templates/servicemonitor-cache.yaml +++ b/charts/theia-monitoring/templates/servicemonitor-cache.yaml @@ -0,0 +1,18 @@ +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: theia-shared-cache + namespace: {{ .Values.namespace }} +spec: + selector: + matchLabels: + component: cache-server + namespaceSelector: + matchNames: + {{- range .Values.sharedCacheNamespaces }} + - {{ . }} + {{- end }} + endpoints: + - port: http + path: /metrics + interval: 15s \ No newline at end of file From 687461c69c43e70f1d2ebf8e4bdebb5db742c30c Mon Sep 17 00:00:00 2001 From: = Date: Sat, 7 Feb 2026 11:12:03 +0100 Subject: [PATCH 37/79] update grafana dashboard --- .../templates/dashboard-cache.yaml | 964 +++++++++--------- 1 file changed, 482 insertions(+), 482 deletions(-) diff --git a/charts/theia-monitoring/templates/dashboard-cache.yaml b/charts/theia-monitoring/templates/dashboard-cache.yaml index 53bcce9..bf380d3 100644 --- a/charts/theia-monitoring/templates/dashboard-cache.yaml +++ b/charts/theia-monitoring/templates/dashboard-cache.yaml @@ -8,524 +8,524 @@ metadata: data: shared-cache.json: |- { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { "type": "grafana", "uid": "-- Grafana --" }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { "type": "grafana", "uid": "-- Grafana --" }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Monitoring dashboard for the Theia Shared Cache (Gradle Build Cache)", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, + "id": 100, + "panels": [], + "title": "Cache Performance", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Rate of cache hits per second", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] } - ] + }, + "overrides": [] }, - "description": "Monitoring dashboard for the Theia Shared Cache (Gradle Build Cache)", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": null, - "links": [], - "panels": [ + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 1 }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ { - "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, - "id": 100, - "panels": [], - "title": "Cache Performance", - "type": "row" + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(gradle_cache_cache_hits_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Hits", + "range": true, + "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Rate of cache hits vs cache misses per second", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] - } - }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 1 }, - "id": 1, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + "editorMode": "code", + "expr": "rate(gradle_cache_cache_misses_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Misses", + "range": true, + "refId": "B" + } + ], + "title": "Cache Hits vs Misses (rate/s)", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Percentage of cache requests that resulted in a hit", + "fieldConfig": { + "defaults": { + "color": { "mode": "thresholds" }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "red", "value": null }, + { "color": "yellow", "value": 50 }, + { "color": "green", "value": 80 } + ] }, - "targets": [ - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(cache_hits_total{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Hits", - "range": true, - "refId": "A" - }, - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(cache_misses_total{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Misses", - "range": true, - "refId": "B" - } - ], - "title": "Cache Hits vs Misses (rate/s)", - "type": "timeseries" + "unit": "percentunit", + "min": 0, + "max": 1 }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 1 }, + "id": 2, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Percentage of cache requests that resulted in a hit", - "fieldConfig": { - "defaults": { - "color": { "mode": "thresholds" }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "red", "value": null }, - { "color": "yellow", "value": 50 }, - { "color": "green", "value": 80 } - ] - }, - "unit": "percentunit", - "min": 0, - "max": 1 - }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 1 }, - "id": 2, - "options": { - "orientation": "auto", - "reduceOptions": { - "calcs": ["lastNotNull"], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" + "editorMode": "code", + "expr": "rate(gradle_cache_cache_hits_total{namespace=\"$namespace\"}[5m]) / rate(gradle_cache_requests_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Hit Rate", + "range": true, + "refId": "A" + } + ], + "title": "Cache Hit Rate", + "type": "gauge" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 }, + "id": 101, + "panels": [], + "title": "HTTP Requests", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Rate of HTTP requests per second to the cache server", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } }, - "targets": [ - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(cache_hits_total{namespace=\"$namespace\"}[5m]) / (rate(cache_hits_total{namespace=\"$namespace\"}[5m]) + rate(cache_misses_total{namespace=\"$namespace\"}[5m]))", - "instant": false, - "legendFormat": "Hit Rate", - "range": true, - "refId": "A" - } - ], - "title": "Cache Hit Rate", - "type": "gauge" + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } }, - { - "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 }, - "id": 101, - "panels": [], - "title": "HTTP Requests", - "type": "row" + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Rate of HTTP requests per second to the cache server", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] - } - }, - "overrides": [] + "editorMode": "code", + "expr": "rate(gradle_cache_requests_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Requests/s", + "range": true, + "refId": "A" + } + ], + "title": "Request Rate", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Average request duration to the cache server", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 }, - "id": 3, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] }, - "targets": [ - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(requests_total{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Requests/s", - "range": true, - "refId": "A" - } - ], - "title": "Request Rate", - "type": "timeseries" + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Average request duration to the cache server", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] - }, - "unit": "s" - }, - "overrides": [] + "editorMode": "code", + "expr": "rate(gradle_cache_request_duration_seconds_sum{namespace=\"$namespace\"}[5m]) / rate(gradle_cache_request_duration_seconds_count{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Avg Duration", + "range": true, + "refId": "A" + } + ], + "title": "Average Request Duration", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 18 }, + "id": 102, + "panels": [], + "title": "Cache Entry Size", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Average size of cache entries being stored", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 }, - "id": 4, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] }, - "targets": [ - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(request_duration_seconds_sum{namespace=\"$namespace\"}[5m]) / rate(request_duration_seconds_count{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Avg Duration", - "range": true, - "refId": "A" - } - ], - "title": "Average Request Duration", - "type": "timeseries" + "unit": "decbytes" }, - { - "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 18 }, - "id": 102, - "panels": [], - "title": "Cache Entry Size", - "type": "row" + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 19 }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Average size of cache entries being stored", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] - }, - "unit": "decbytes" - }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 19 }, - "id": 5, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + "editorMode": "code", + "expr": "rate(gradle_cache_entry_size_bytes_sum{namespace=\"$namespace\"}[5m]) / rate(gradle_cache_entry_size_bytes_count{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Avg Entry Size", + "range": true, + "refId": "A" + } + ], + "title": "Average Cache Entry Size", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 }, + "id": 103, + "panels": [], + "title": "Resource Usage", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "CPU usage of the cache server and MinIO containers", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } }, - "targets": [ - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(entry_size_bytes_sum{namespace=\"$namespace\"}[5m]) / rate(entry_size_bytes_count{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Avg Entry Size", - "range": true, - "refId": "A" - } - ], - "title": "Average Cache Entry Size", - "type": "timeseries" + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } }, - { - "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 }, - "id": 103, - "panels": [], - "title": "Resource Usage", - "type": "row" + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 28 }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "CPU usage of the cache server and MinIO containers", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] - } - }, - "overrides": [] + "editorMode": "code", + "expr": "sum(rate(container_cpu_usage_seconds_total{container!=\"POD\", container!=\"\", job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\"}[1m])) by (pod)", + "instant": false, + "legendFormat": "{{ \"{{\" }}pod{{ \"}}\" }}", + "range": true, + "refId": "A" + } + ], + "title": "Cache CPU Usage", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Memory usage of the cache server and MinIO containers", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 28 }, - "id": 6, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] }, - "targets": [ - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "sum(rate(container_cpu_usage_seconds_total{container!=\"POD\", container!=\"\", job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\"}[1m])) by (pod)", - "instant": false, - "legendFormat": "{{ "{{" }}pod{{ "}}" }}", - "range": true, - "refId": "A" - } - ], - "title": "Cache CPU Usage", - "type": "timeseries" + "unit": "decbytes" }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 28 }, + "id": 7, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Memory usage of the cache server and MinIO containers", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] - }, - "unit": "decbytes" - }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 28 }, - "id": 7, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } - }, - "targets": [ - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\", container!=\"POD\", container!=\"\"}", - "instant": false, - "legendFormat": "{{ "{{" }}pod{{ "}}" }}", - "range": true, - "refId": "A" - } - ], - "title": "Cache Memory Usage", - "type": "timeseries" + "editorMode": "code", + "expr": "container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\", container!=\"POD\", container!=\"\"}", + "instant": false, + "legendFormat": "{{ \"{{\" }}pod{{ \"}}\" }}", + "range": true, + "refId": "A" } ], - "refresh": "30s", - "schemaVersion": 39, - "tags": [], - "templating": { - "list": [ - { - "current": { "selected": false, "text": "test2", "value": "test2" }, - "hide": 0, - "includeAll": false, - "label": "Namespace", - "multi": false, - "name": "namespace", - "options": [ - { "selected": true, "text": "test2", "value": "test2" } - ], - "query": "test2", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { "from": "now-3h", "to": "now" }, - "timeRangeUpdatedDuringEditOrView": false, - "timepicker": {}, - "timezone": "browser", - "title": "Theia Shared Cache", - "uid": "theia-shared-cache-dash", - "version": 1, - "weekStart": "" + "title": "Cache Memory Usage", + "type": "timeseries" } + ], + "refresh": "30s", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": { "selected": false, "text": "test2", "value": "test2" }, + "hide": 0, + "includeAll": false, + "label": "Namespace", + "multi": false, + "name": "namespace", + "options": [ + { "selected": true, "text": "test2", "value": "test2" } + ], + "query": "test2", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { "from": "now-3h", "to": "now" }, + "timeRangeUpdatedDuringEditOrView": false, + "timepicker": {}, + "timezone": "browser", + "title": "Theia Shared Cache", + "uid": "theia-shared-cache-dash", + "version": 1, + "weekStart": "" +} From 87a3b65946a0181ec7949a9ee4599aa0aeecd31e Mon Sep 17 00:00:00 2001 From: = Date: Sat, 7 Feb 2026 16:47:36 +0100 Subject: [PATCH 38/79] setup tls --- .../templates/cache-internal-certificate.yml | 6 +- .../templates/internal-ca.yml | 24 + .../templates/trust-bundle.yml | 36 + charts/theia-cloud-combined/Chart.yaml | 2 +- .../templates/dashboard-cache.yaml | 964 +++++++++--------- .../values.yaml | 6 +- 6 files changed, 551 insertions(+), 487 deletions(-) create mode 100644 charts/theia-certificates/templates/internal-ca.yml create mode 100644 charts/theia-certificates/templates/trust-bundle.yml diff --git a/charts/theia-certificates/templates/cache-internal-certificate.yml b/charts/theia-certificates/templates/cache-internal-certificate.yml index b731f86..732ef2a 100644 --- a/charts/theia-certificates/templates/cache-internal-certificate.yml +++ b/charts/theia-certificates/templates/cache-internal-certificate.yml @@ -5,11 +5,11 @@ metadata: spec: secretName: cache-internal-cert-secret issuerRef: - name: theia-cloud-selfsigned-issuer + name: theia-internal-ca-issuer kind: ClusterIssuer commonName: "theia-shared-cache" dnsNames: - - theia-shared-cache - - theia-shared-cache.theia-cloud.svc.cluster.local + - theia-cloud-combined-cache + - theia-cloud-combined-cache.theia-cloud.svc.cluster.local privateKey: rotationPolicy: Never diff --git a/charts/theia-certificates/templates/internal-ca.yml b/charts/theia-certificates/templates/internal-ca.yml new file mode 100644 index 0000000..4385b2e --- /dev/null +++ b/charts/theia-certificates/templates/internal-ca.yml @@ -0,0 +1,24 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: theia-internal-ca +spec: + isCA: true + commonName: theia-internal-ca + secretName: theia-internal-ca-secret + issuerRef: + name: theia-cloud-selfsigned-issuer + kind: ClusterIssuer + privateKey: + algorithm: ECDSA + size: 256 + duration: 87600h # 10 years + renewBefore: 8760h # renew 1 year before expiry +--- +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: theia-internal-ca-issuer +spec: + ca: + secretName: theia-internal-ca-secret \ No newline at end of file diff --git a/charts/theia-certificates/templates/trust-bundle.yml b/charts/theia-certificates/templates/trust-bundle.yml new file mode 100644 index 0000000..8d84e64 --- /dev/null +++ b/charts/theia-certificates/templates/trust-bundle.yml @@ -0,0 +1,36 @@ +apiVersion: trust.cert-manager.io/v1alpha1 +kind: Bundle +metadata: + name: theia-internal-trust +spec: + sources: + # Include the default public CAs (Let's Encrypt, etc.) + - useDefaultCAs: true + + # Internal CA certificate from cert-manager + - secret: + name: "theia-internal-ca-secret" + key: "ca.crt" + + target: + # trust-manager creates a ConfigMap with this name in target namespaces + configMap: + key: "trust-bundle.pem" + + # Also generate a JKS truststore (Java KeyStore) + # This is what Java/Gradle will use directly + additionalFormats: + jks: + key: "truststore.jks" + + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: In + values: + - test2 + - theia + - theia-staging + - test1 + - test3 + diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index c8cbb99..62138e5 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: "file://../theia-appdefinitions" - name: theia-shared-cache - version: 0.2.1 + version: 0.2.2 repository: "https://ls1intum.github.io/theia-shared-cache/" diff --git a/charts/theia-monitoring/templates/dashboard-cache.yaml b/charts/theia-monitoring/templates/dashboard-cache.yaml index bf380d3..640e12e 100644 --- a/charts/theia-monitoring/templates/dashboard-cache.yaml +++ b/charts/theia-monitoring/templates/dashboard-cache.yaml @@ -8,524 +8,524 @@ metadata: data: shared-cache.json: |- { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { "type": "grafana", "uid": "-- Grafana --" }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "description": "Monitoring dashboard for the Theia Shared Cache (Gradle Build Cache)", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": null, - "links": [], - "panels": [ - { - "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, - "id": 100, - "panels": [], - "title": "Cache Performance", - "type": "row" - }, - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Rate of cache hits per second", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { "type": "grafana", "uid": "-- Grafana --" }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" } - }, - "overrides": [] + ] }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 1 }, - "id": 1, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } - }, - "targets": [ + "description": "Monitoring dashboard for the Theia Shared Cache (Gradle Build Cache)", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "panels": [ { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(gradle_cache_cache_hits_total{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Hits", - "range": true, - "refId": "A" + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, + "id": 100, + "panels": [], + "title": "Cache Performance", + "type": "row" }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(gradle_cache_cache_misses_total{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Misses", - "range": true, - "refId": "B" - } - ], - "title": "Cache Hits vs Misses (rate/s)", - "type": "timeseries" - }, - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Percentage of cache requests that resulted in a hit", - "fieldConfig": { - "defaults": { - "color": { "mode": "thresholds" }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "red", "value": null }, - { "color": "yellow", "value": 50 }, - { "color": "green", "value": 80 } - ] + "description": "Rate of cache hits vs cache misses per second", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [] }, - "unit": "percentunit", - "min": 0, - "max": 1 - }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 1 }, - "id": 2, - "options": { - "orientation": "auto", - "reduceOptions": { - "calcs": ["lastNotNull"], - "fields": "", - "values": false + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 1 }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(gradle_cache_cache_hits_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Hits", + "range": true, + "refId": "A" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(gradle_cache_cache_misses_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Misses", + "range": true, + "refId": "B" + } + ], + "title": "Cache Hits vs Misses (rate/s)", + "type": "timeseries" }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(gradle_cache_cache_hits_total{namespace=\"$namespace\"}[5m]) / rate(gradle_cache_requests_total{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Hit Rate", - "range": true, - "refId": "A" - } - ], - "title": "Cache Hit Rate", - "type": "gauge" - }, - { - "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 }, - "id": 101, - "panels": [], - "title": "HTTP Requests", - "type": "row" - }, - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Rate of HTTP requests per second to the cache server", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "description": "Percentage of cache requests that resulted in a hit", + "fieldConfig": { + "defaults": { + "color": { "mode": "thresholds" }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "red", "value": null }, + { "color": "yellow", "value": 50 }, + { "color": "green", "value": 80 } + ] + }, + "unit": "percentunit", + "min": 0, + "max": 1 + }, + "overrides": [] }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] - } + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 1 }, + "id": 2, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(gradle_cache_cache_hits_total{namespace=\"$namespace\"}[5m]) / rate(gradle_cache_requests_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Hit Rate", + "range": true, + "refId": "A" + } + ], + "title": "Cache Hit Rate", + "type": "gauge" }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 }, - "id": 3, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 }, + "id": 101, + "panels": [], + "title": "HTTP Requests", + "type": "row" }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } - }, - "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(gradle_cache_requests_total{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Requests/s", - "range": true, - "refId": "A" - } - ], - "title": "Request Rate", - "type": "timeseries" - }, - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Average request duration to the cache server", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "description": "Rate of HTTP requests per second to the cache server", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [] }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 }, - "id": 4, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(gradle_cache_requests_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Requests/s", + "range": true, + "refId": "A" + } + ], + "title": "Request Rate", + "type": "timeseries" }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } - }, - "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(gradle_cache_request_duration_seconds_sum{namespace=\"$namespace\"}[5m]) / rate(gradle_cache_request_duration_seconds_count{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Avg Duration", - "range": true, - "refId": "A" - } - ], - "title": "Average Request Duration", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 18 }, - "id": 102, - "panels": [], - "title": "Cache Entry Size", - "type": "row" - }, - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Average size of cache entries being stored", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "description": "Average request duration to the cache server", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + }, + "unit": "s" + }, + "overrides": [] }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } }, - "unit": "decbytes" + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(gradle_cache_request_duration_seconds_sum{namespace=\"$namespace\"}[5m]) / rate(gradle_cache_request_duration_seconds_count{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Avg Duration", + "range": true, + "refId": "A" + } + ], + "title": "Average Request Duration", + "type": "timeseries" }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 19 }, - "id": 5, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 18 }, + "id": 102, + "panels": [], + "title": "Cache Entry Size", + "type": "row" }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } - }, - "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "rate(gradle_cache_entry_size_bytes_sum{namespace=\"$namespace\"}[5m]) / rate(gradle_cache_entry_size_bytes_count{namespace=\"$namespace\"}[5m])", - "instant": false, - "legendFormat": "Avg Entry Size", - "range": true, - "refId": "A" - } - ], - "title": "Average Cache Entry Size", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 }, - "id": 103, - "panels": [], - "title": "Resource Usage", - "type": "row" - }, - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "CPU usage of the cache server and MinIO containers", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "description": "Average size of cache entries being stored", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + }, + "unit": "decbytes" + }, + "overrides": [] }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] - } + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 19 }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(gradle_cache_entry_size_bytes_sum{namespace=\"$namespace\"}[5m]) / rate(gradle_cache_entry_size_bytes_count{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Avg Entry Size", + "range": true, + "refId": "A" + } + ], + "title": "Average Cache Entry Size", + "type": "timeseries" }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 28 }, - "id": 6, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 }, + "id": 103, + "panels": [], + "title": "Resource Usage", + "type": "row" }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } - }, - "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "sum(rate(container_cpu_usage_seconds_total{container!=\"POD\", container!=\"\", job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\"}[1m])) by (pod)", - "instant": false, - "legendFormat": "{{ \"{{\" }}pod{{ \"}}\" }}", - "range": true, - "refId": "A" - } - ], - "title": "Cache CPU Usage", - "type": "timeseries" - }, - { - "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Memory usage of the cache server and MinIO containers", - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "description": "CPU usage of the cache server and MinIO containers", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [] }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 80 } - ] + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 28 }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } }, - "unit": "decbytes" + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "sum(rate(container_cpu_usage_seconds_total{container!=\"POD\", container!=\"\", job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\"}[1m])) by (pod)", + "instant": false, + "legendFormat": "{{ "{{" }}pod{{ "}}" }}", + "range": true, + "refId": "A" + } + ], + "title": "Cache CPU Usage", + "type": "timeseries" }, - "overrides": [] - }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 28 }, - "id": 7, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } - }, - "targets": [ { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "editorMode": "code", - "expr": "container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\", container!=\"POD\", container!=\"\"}", - "instant": false, - "legendFormat": "{{ \"{{\" }}pod{{ \"}}\" }}", - "range": true, - "refId": "A" + "description": "Memory usage of the cache server and MinIO containers", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 28 }, + "id": 7, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\", container!=\"POD\", container!=\"\"}", + "instant": false, + "legendFormat": "{{ "{{" }}pod{{ "}}" }}", + "range": true, + "refId": "A" + } + ], + "title": "Cache Memory Usage", + "type": "timeseries" } ], - "title": "Cache Memory Usage", - "type": "timeseries" + "refresh": "30s", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": { "selected": false, "text": "test2", "value": "test2" }, + "hide": 0, + "includeAll": false, + "label": "Namespace", + "multi": false, + "name": "namespace", + "options": [ + { "selected": true, "text": "test2", "value": "test2" } + ], + "query": "test2", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { "from": "now-3h", "to": "now" }, + "timeRangeUpdatedDuringEditOrView": false, + "timepicker": {}, + "timezone": "browser", + "title": "Theia Shared Cache", + "uid": "theia-shared-cache-dash", + "version": 1, + "weekStart": "" } - ], - "refresh": "30s", - "schemaVersion": 39, - "tags": [], - "templating": { - "list": [ - { - "current": { "selected": false, "text": "test2", "value": "test2" }, - "hide": 0, - "includeAll": false, - "label": "Namespace", - "multi": false, - "name": "namespace", - "options": [ - { "selected": true, "text": "test2", "value": "test2" } - ], - "query": "test2", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { "from": "now-3h", "to": "now" }, - "timeRangeUpdatedDuringEditOrView": false, - "timepicker": {}, - "timezone": "browser", - "title": "Theia Shared Cache", - "uid": "theia-shared-cache-dash", - "version": 1, - "weekStart": "" -} diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 915afdb..9f60b34 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -42,6 +42,10 @@ theia-shared-cache: limits: memory: "2Gi" cpu: "1000m" + + tls: + enabled: true + secretName: cache-internal-cert-secret theia-cloud: @@ -76,7 +80,7 @@ theia-cloud: sessionsPerUser: 10 storageClassName: csi-rbd-sc enableCaching: true - cacheUrl: "http://theia-cloud-combined-cache:8080/cache/" + cacheUrl: "https://theia-cloud-combined-cache:8080/cache/" # service: # image: ghcr.io/ls1intum/theia/service:latest From 7c17b6682ce8c3f56a7f5e6965dc755fde7f0d1f Mon Sep 17 00:00:00 2001 From: = Date: Sat, 7 Feb 2026 22:24:08 +0100 Subject: [PATCH 39/79] fixx indenting --- .../templates/trust-bundle.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/charts/theia-certificates/templates/trust-bundle.yml b/charts/theia-certificates/templates/trust-bundle.yml index 8d84e64..2829594 100644 --- a/charts/theia-certificates/templates/trust-bundle.yml +++ b/charts/theia-certificates/templates/trust-bundle.yml @@ -24,13 +24,13 @@ spec: key: "truststore.jks" namespaceSelector: - matchExpressions: - - key: kubernetes.io/metadata.name - operator: In - values: - - test2 - - theia - - theia-staging - - test1 - - test3 + matchExpressions: + - key: kubernetes.io/metadata.name + operator: In + values: + - test2 + - theia + - theia-staging + - test1 + - test3 From 1a64474854e6dbfe78ab2c5bd0d2e75e2450a8b3 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 8 Feb 2026 22:49:46 +0100 Subject: [PATCH 40/79] test new dependency cache --- charts/theia-cloud-combined/Chart.yaml | 4 ++-- charts/theia-monitoring/templates/servicemonitor-cache.yaml | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 62138e5..5d31ace 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: "file://../theia-appdefinitions" - name: theia-shared-cache - version: 0.2.2 - repository: "https://ls1intum.github.io/theia-shared-cache/" + version: "0.2.3-pr.24" + repository: "oci://ghcr.io/ls1intum/charts" diff --git a/charts/theia-monitoring/templates/servicemonitor-cache.yaml b/charts/theia-monitoring/templates/servicemonitor-cache.yaml index ca16012..1a794bb 100644 --- a/charts/theia-monitoring/templates/servicemonitor-cache.yaml +++ b/charts/theia-monitoring/templates/servicemonitor-cache.yaml @@ -15,4 +15,7 @@ spec: endpoints: - port: http path: /metrics - interval: 15s \ No newline at end of file + interval: 15s + scheme: https + tlsConfig: + insecureSkipVerify: true \ No newline at end of file From c4853286996d20002569ce78fa0e694cc872f56d Mon Sep 17 00:00:00 2001 From: = Date: Sun, 8 Feb 2026 22:57:32 +0100 Subject: [PATCH 41/79] add trust manager to cicd --- .github/workflows/deploy-theia.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy-theia.yml b/.github/workflows/deploy-theia.yml index b8aa192..07bdae9 100644 --- a/.github/workflows/deploy-theia.yml +++ b/.github/workflows/deploy-theia.yml @@ -107,7 +107,22 @@ jobs: # This is installed once per cluster, not per environment helm upgrade theia-monitoring ./charts/theia-monitoring --install - # Step 5: Install the main Theia Cloud application with environment-specific configuration + # Step 5: Install trust-manager for internal TLS certificate distribution + # trust-manager distributes the internal CA as ConfigMaps (PEM + JKS) to session namespaces + - name: Install trust-manager + env: + KUBECONFIG: ${{ github.workspace }}/kubeconfig + run: | + helm repo add jetstack https://charts.jetstack.io --force-update + helm upgrade --install trust-manager jetstack/trust-manager \ + --namespace cert-manager \ + --set app.trust.namespace="" \ + --set resources.requests.cpu=50m \ + --set resources.requests.memory=128Mi \ + --set resources.limits.memory=256Mi \ + --wait --timeout 180s + + # Step 6: Install the main Theia Cloud application with environment-specific configuration # This includes the operator, service, certificates, and app definitions - name: Install Theia Cloud in namespace ${{ vars.NAMESPACE }} env: From 8c5f1446a4ce5cd4752f49162ca3e1e7b5205db6 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 8 Feb 2026 23:04:40 +0100 Subject: [PATCH 42/79] try burst limit --- .github/workflows/deploy-theia.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy-theia.yml b/.github/workflows/deploy-theia.yml index 07bdae9..a35ed77 100644 --- a/.github/workflows/deploy-theia.yml +++ b/.github/workflows/deploy-theia.yml @@ -120,7 +120,8 @@ jobs: --set resources.requests.cpu=50m \ --set resources.requests.memory=128Mi \ --set resources.limits.memory=256Mi \ - --wait --timeout 180s + --burst-limit 100 \ + --wait --timeout 60s # Step 6: Install the main Theia Cloud application with environment-specific configuration # This includes the operator, service, certificates, and app definitions From 98ff4634eb58dfe8eb634fec3acc13ef9ff49eb4 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 8 Feb 2026 23:14:51 +0100 Subject: [PATCH 43/79] remove trust manager from pipeline --- .github/workflows/deploy-theia.yml | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/.github/workflows/deploy-theia.yml b/.github/workflows/deploy-theia.yml index a35ed77..b8aa192 100644 --- a/.github/workflows/deploy-theia.yml +++ b/.github/workflows/deploy-theia.yml @@ -107,23 +107,7 @@ jobs: # This is installed once per cluster, not per environment helm upgrade theia-monitoring ./charts/theia-monitoring --install - # Step 5: Install trust-manager for internal TLS certificate distribution - # trust-manager distributes the internal CA as ConfigMaps (PEM + JKS) to session namespaces - - name: Install trust-manager - env: - KUBECONFIG: ${{ github.workspace }}/kubeconfig - run: | - helm repo add jetstack https://charts.jetstack.io --force-update - helm upgrade --install trust-manager jetstack/trust-manager \ - --namespace cert-manager \ - --set app.trust.namespace="" \ - --set resources.requests.cpu=50m \ - --set resources.requests.memory=128Mi \ - --set resources.limits.memory=256Mi \ - --burst-limit 100 \ - --wait --timeout 60s - - # Step 6: Install the main Theia Cloud application with environment-specific configuration + # Step 5: Install the main Theia Cloud application with environment-specific configuration # This includes the operator, service, certificates, and app definitions - name: Install Theia Cloud in namespace ${{ vars.NAMESPACE }} env: From 4295ad0bcf6c7f59931588fb7d7f9f682cdee6c9 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 8 Feb 2026 23:57:39 +0100 Subject: [PATCH 44/79] switch to ls1 theia-cloud-helm chart --- charts/theia-cloud-combined/Chart.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 5d31ace..29fa221 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -6,8 +6,8 @@ appVersion: 1.0.0 dependencies: - name: theia-cloud - version: 1.1.0-next.1 - repository: "https://eclipse-theia.github.io/theia-cloud-helm" + version: 1.3.0-next.3 + repository: "https://ls1intum.github.io/theia-cloud-helm" - name: theia-certificates version: 0.1.0 From be09286a05aca63ba26024f9503d36e90a66a787 Mon Sep 17 00:00:00 2001 From: = Date: Mon, 9 Feb 2026 15:04:43 +0100 Subject: [PATCH 45/79] add reposilite servicemonitor and dashboard --- .../templates/dashboard-reposilite.yaml | 800 ++++++++++++++++++ .../templates/servicemonitor-reposilite.yaml | 18 + charts/theia-monitoring/values.yaml | 4 + 3 files changed, 822 insertions(+) create mode 100644 charts/theia-monitoring/templates/dashboard-reposilite.yaml create mode 100644 charts/theia-monitoring/templates/servicemonitor-reposilite.yaml diff --git a/charts/theia-monitoring/templates/dashboard-reposilite.yaml b/charts/theia-monitoring/templates/dashboard-reposilite.yaml new file mode 100644 index 0000000..ce087d0 --- /dev/null +++ b/charts/theia-monitoring/templates/dashboard-reposilite.yaml @@ -0,0 +1,800 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + grafana_dashboard: "1" + name: theia-cloud-dashboard-reposilite + namespace: {{ .Values.dashboardNamespace }} +data: + reposilite.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { "type": "grafana", "uid": "-- Grafana --" }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Monitoring dashboard for the Reposilite Maven Proxy", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, + "id": 100, + "panels": [], + "title": "HTTP Requests", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Rate of HTTP requests per second", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 1 }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(jetty_requests_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Requests/s", + "range": true, + "refId": "A" + } + ], + "title": "Request Rate", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Currently active requests being handled", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 1 }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "jetty_requests_active{namespace=\"$namespace\"}", + "instant": false, + "legendFormat": "Active Requests", + "range": true, + "refId": "A" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "jetty_requests_active_max{namespace=\"$namespace\"}", + "instant": false, + "legendFormat": "Peak Active", + "range": true, + "refId": "B" + } + ], + "title": "Active Requests", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 }, + "id": 101, + "panels": [], + "title": "Response Codes", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Rate of HTTP responses by status code class", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "normal" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [ + { + "matcher": { "id": "byName", "options": "2xx" }, + "properties": [{ "id": "color", "value": { "fixedColor": "green", "mode": "fixed" } }] + }, + { + "matcher": { "id": "byName", "options": "3xx" }, + "properties": [{ "id": "color", "value": { "fixedColor": "blue", "mode": "fixed" } }] + }, + { + "matcher": { "id": "byName", "options": "4xx" }, + "properties": [{ "id": "color", "value": { "fixedColor": "yellow", "mode": "fixed" } }] + }, + { + "matcher": { "id": "byName", "options": "5xx" }, + "properties": [{ "id": "color", "value": { "fixedColor": "red", "mode": "fixed" } }] + } + ] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(jetty_responses_total{namespace=\"$namespace\", code=\"2xx\"}[5m])", + "instant": false, + "legendFormat": "2xx", + "range": true, + "refId": "A" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(jetty_responses_total{namespace=\"$namespace\", code=\"3xx\"}[5m])", + "instant": false, + "legendFormat": "3xx", + "range": true, + "refId": "B" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(jetty_responses_total{namespace=\"$namespace\", code=\"4xx\"}[5m])", + "instant": false, + "legendFormat": "4xx", + "range": true, + "refId": "C" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(jetty_responses_total{namespace=\"$namespace\", code=\"5xx\"}[5m])", + "instant": false, + "legendFormat": "5xx", + "range": true, + "refId": "D" + } + ], + "title": "Response Codes (rate/s)", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Total bytes sent in responses", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(jetty_responses_bytes_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Bytes/s", + "range": true, + "refId": "A" + } + ], + "title": "Response Throughput", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 18 }, + "id": 102, + "panels": [], + "title": "Request Timing", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Average request handling time", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 19 }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(jetty_request_time_seconds_total{namespace=\"$namespace\"}[5m]) / rate(jetty_requests_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Avg Request Time", + "range": true, + "refId": "A" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "jetty_request_time_max_seconds{namespace=\"$namespace\"}", + "instant": false, + "legendFormat": "Max Request Time", + "range": true, + "refId": "B" + } + ], + "title": "Request Duration", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Average dispatch handling time", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 19 }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "rate(jetty_dispatched_time_seconds_total{namespace=\"$namespace\"}[5m]) / rate(jetty_dispatched_total{namespace=\"$namespace\"}[5m])", + "instant": false, + "legendFormat": "Avg Dispatch Time", + "range": true, + "refId": "A" + } + ], + "title": "Dispatch Duration", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 }, + "id": 103, + "panels": [], + "title": "Thread Pool", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Thread pool utilization percentage", + "fieldConfig": { + "defaults": { + "color": { "mode": "thresholds" }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "yellow", "value": 60 }, + { "color": "red", "value": 85 } + ] + }, + "unit": "percentunit", + "min": 0, + "max": 1 + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 8, "x": 0, "y": 28 }, + "id": 7, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "jetty_queued_thread_pool_utilization{namespace=\"$namespace\"}", + "instant": false, + "legendFormat": "Utilization", + "range": true, + "refId": "A" + } + ], + "title": "Thread Pool Utilization", + "type": "gauge" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Thread pool threads: total, idle, and queued jobs", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 16, "x": 8, "y": 28 }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "jetty_queued_thread_pool_threads{namespace=\"$namespace\"}", + "instant": false, + "legendFormat": "Total Threads", + "range": true, + "refId": "A" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "jetty_queued_thread_pool_threads_idle{namespace=\"$namespace\"}", + "instant": false, + "legendFormat": "Idle Threads", + "range": true, + "refId": "B" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "jetty_queued_thread_pool_jobs{namespace=\"$namespace\"}", + "instant": false, + "legendFormat": "Queued Jobs", + "range": true, + "refId": "C" + } + ], + "title": "Thread Pool Details", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 36 }, + "id": 104, + "panels": [], + "title": "Resource Usage", + "type": "row" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "CPU usage of the Reposilite pod", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + } + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 37 }, + "id": 9, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "sum(rate(container_cpu_usage_seconds_total{container!=\"POD\", container!=\"\", job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=~\".*reposilite.*\"}[1m])) by (pod)", + "instant": false, + "legendFormat": "{{ \"{{\" }}pod{{ \"}}\" }}", + "range": true, + "refId": "A" + } + ], + "title": "Reposilite CPU Usage", + "type": "timeseries" + }, + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "description": "Memory usage of the Reposilite pod", + "fieldConfig": { + "defaults": { + "color": { "mode": "palette-classic" }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { "type": "linear" }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { "group": "A", "mode": "none" }, + "thresholdsStyle": { "mode": "off" } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "red", "value": 80 } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 37 }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { "maxHeight": 600, "mode": "single", "sort": "none" } + }, + "targets": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "editorMode": "code", + "expr": "container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\".*reposilite.*\", container!=\"POD\", container!=\"\"}", + "instant": false, + "legendFormat": "{{ \"{{\" }}pod{{ \"}}\" }}", + "range": true, + "refId": "A" + } + ], + "title": "Reposilite Memory Usage", + "type": "timeseries" + } + ], + "refresh": "30s", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": { "selected": false, "text": "test2", "value": "test2" }, + "hide": 0, + "includeAll": false, + "label": "Namespace", + "multi": false, + "name": "namespace", + "options": [ + { "selected": true, "text": "test2", "value": "test2" } + ], + "query": "test2", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { "from": "now-3h", "to": "now" }, + "timeRangeUpdatedDuringEditOrView": false, + "timepicker": {}, + "timezone": "browser", + "title": "Reposilite Maven Proxy", + "uid": "reposilite-dash", + "version": 1, + "weekStart": "" + } diff --git a/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml b/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml new file mode 100644 index 0000000..7d3a9fe --- /dev/null +++ b/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml @@ -0,0 +1,18 @@ +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: theia-cloud-reposilite + namespace: {{ .Values.namespace }} +spec: + selector: + matchLabels: + app.kubernetes.io/name: reposilite + namespaceSelector: + matchNames: + {{- range .Values.reposiliteNamespaces }} + - {{ . }} + {{- end }} + endpoints: + - port: http + path: /metrics + interval: 15s \ No newline at end of file diff --git a/charts/theia-monitoring/values.yaml b/charts/theia-monitoring/values.yaml index 0f8a859..4782d17 100644 --- a/charts/theia-monitoring/values.yaml +++ b/charts/theia-monitoring/values.yaml @@ -25,4 +25,8 @@ sessionNamespaces: # -- List of namespaces to monitor for Theia shared cache sharedCacheNamespaces: + - test2 + +# -- List of namespaces to monitor for Theia Repository Cache (Reposilite) +reposiliteNamespaces: - test2 \ No newline at end of file From 18307146f93332e11064406d16eb5d9df0fa168f Mon Sep 17 00:00:00 2001 From: = Date: Mon, 9 Feb 2026 15:14:00 +0100 Subject: [PATCH 46/79] minor grafana fix --- charts/theia-monitoring/templates/dashboard-reposilite.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/theia-monitoring/templates/dashboard-reposilite.yaml b/charts/theia-monitoring/templates/dashboard-reposilite.yaml index ce087d0..b3bb0af 100644 --- a/charts/theia-monitoring/templates/dashboard-reposilite.yaml +++ b/charts/theia-monitoring/templates/dashboard-reposilite.yaml @@ -695,7 +695,7 @@ data: "editorMode": "code", "expr": "sum(rate(container_cpu_usage_seconds_total{container!=\"POD\", container!=\"\", job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=~\".*reposilite.*\"}[1m])) by (pod)", "instant": false, - "legendFormat": "{{ \"{{\" }}pod{{ \"}}\" }}", + "legendFormat": "{{ "{{" }}pod{{ "}}" }}", "range": true, "refId": "A" } @@ -759,7 +759,7 @@ data: "editorMode": "code", "expr": "container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\".*reposilite.*\", container!=\"POD\", container!=\"\"}", "instant": false, - "legendFormat": "{{ \"{{\" }}pod{{ \"}}\" }}", + "legendFormat": "{{ "{{" }}pod{{ "}}" }}", "range": true, "refId": "A" } From 1acb48dbbadf8a333f508708060f362e65ac37b5 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 7 Mar 2026 12:02:02 +0100 Subject: [PATCH 47/79] minor fixes --- .../templates/cache-certificate.yml | 14 -------------- .../templates/cache-internal-certificate.yml | 2 +- charts/theia-certificates/values.yaml | 1 - charts/theia-cloud-combined/Chart.yaml | 2 +- charts/theia-cloud-combined/values.yaml | 1 - .../templates/dashboard-cache.yaml | 8 ++++---- .../templates/servicemonitor-cache.yaml | 2 +- .../values.yaml | 1 - .../values.yaml | 13 ++++--------- .../theia-staging.artemis.cit.tum.de/values.yaml | 1 - deployments/theia.artemis.cit.tum.de/values.yaml | 1 - 11 files changed, 11 insertions(+), 35 deletions(-) delete mode 100644 charts/theia-certificates/templates/cache-certificate.yml diff --git a/charts/theia-certificates/templates/cache-certificate.yml b/charts/theia-certificates/templates/cache-certificate.yml deleted file mode 100644 index ac0991f..0000000 --- a/charts/theia-certificates/templates/cache-certificate.yml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: cache-cert -spec: - secretName: cache-cert-secret - issuerRef: - name: letsencrypt-prod - kind: ClusterIssuer - commonName: "{{ .Values.hosts.configuration.cache }}.{{ .Values.hosts.configuration.baseHost }}" - dnsNames: - - "{{ .Values.hosts.configuration.cache }}.{{ .Values.hosts.configuration.baseHost }}" - privateKey: - rotationPolicy: Never diff --git a/charts/theia-certificates/templates/cache-internal-certificate.yml b/charts/theia-certificates/templates/cache-internal-certificate.yml index 732ef2a..228b174 100644 --- a/charts/theia-certificates/templates/cache-internal-certificate.yml +++ b/charts/theia-certificates/templates/cache-internal-certificate.yml @@ -10,6 +10,6 @@ spec: commonName: "theia-shared-cache" dnsNames: - theia-cloud-combined-cache - - theia-cloud-combined-cache.theia-cloud.svc.cluster.local + - theia-cloud-combined-cache.{{ .Release.Namespace }}.svc.cluster.local privateKey: rotationPolicy: Never diff --git a/charts/theia-certificates/values.yaml b/charts/theia-certificates/values.yaml index 2b6e633..c530eac 100644 --- a/charts/theia-certificates/values.yaml +++ b/charts/theia-certificates/values.yaml @@ -4,7 +4,6 @@ hosts: service: service.theia landing: theia instance: instance.theia - cache: cache.theia wildcardCertificate: # The base64 encoded wildcard certificate wildcardKey: # The base64 encoded wildcard key diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 868516e..828cd67 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -22,5 +22,5 @@ dependencies: repository: "https://ls1intum.github.io/theia-workspace-garbage-collector/" - name: theia-shared-cache - version: "0.2.3-pr.24" + version: "0.3.1" repository: "oci://ghcr.io/ls1intum/charts" diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index 9356615..8714c1e 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -5,7 +5,6 @@ hosts: service: service.theia landing: theia instance: instance.theia - cache: cache.theia theia-shared-cache: enabled: false diff --git a/charts/theia-monitoring/templates/dashboard-cache.yaml b/charts/theia-monitoring/templates/dashboard-cache.yaml index 640e12e..a0f1734 100644 --- a/charts/theia-monitoring/templates/dashboard-cache.yaml +++ b/charts/theia-monitoring/templates/dashboard-cache.yaml @@ -373,7 +373,7 @@ data: }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "CPU usage of the cache server and MinIO containers", + "description": "CPU usage of the cache server and Redis containers", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, @@ -424,7 +424,7 @@ data: { "datasource": { "type": "prometheus", "uid": "prometheus" }, "editorMode": "code", - "expr": "sum(rate(container_cpu_usage_seconds_total{container!=\"POD\", container!=\"\", job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\"}[1m])) by (pod)", + "expr": "sum(rate(container_cpu_usage_seconds_total{container!=\"POD\", container!=\"\", job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=~\".*cache.*|.*redis.*\"}[1m])) by (pod)", "instant": false, "legendFormat": "{{ "{{" }}pod{{ "}}" }}", "range": true, @@ -436,7 +436,7 @@ data: }, { "datasource": { "type": "prometheus", "uid": "prometheus" }, - "description": "Memory usage of the cache server and MinIO containers", + "description": "Memory usage of the cache server and Redis containers", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, @@ -488,7 +488,7 @@ data: { "datasource": { "type": "prometheus", "uid": "prometheus" }, "editorMode": "code", - "expr": "container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\".*cache.*|.*minio.*\", container!=\"POD\", container!=\"\"}", + "expr": "container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\".*cache.*|.*redis.*\", container!=\"POD\", container!=\"\"}", "instant": false, "legendFormat": "{{ "{{" }}pod{{ "}}" }}", "range": true, diff --git a/charts/theia-monitoring/templates/servicemonitor-cache.yaml b/charts/theia-monitoring/templates/servicemonitor-cache.yaml index 1a794bb..bcb6550 100644 --- a/charts/theia-monitoring/templates/servicemonitor-cache.yaml +++ b/charts/theia-monitoring/templates/servicemonitor-cache.yaml @@ -6,7 +6,7 @@ metadata: spec: selector: matchLabels: - component: cache-server + app.kubernetes.io/component: cache-server namespaceSelector: matchNames: {{- range .Values.sharedCacheNamespaces }} diff --git a/deployments/test1.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test1.theia-test.artemis.cit.tum.de/values.yaml index 51bb27b..0c43346 100644 --- a/deployments/test1.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test1.theia-test.artemis.cit.tum.de/values.yaml @@ -5,7 +5,6 @@ hosts: service: service.test1 landing: test1 instance: instance.test1 - cache: cache.test1 theia-certificates: hosts: diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index b7d7700..bac8964 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -5,7 +5,6 @@ hosts: service: service.test2 landing: test2 instance: instance.test2 - cache: cache.test2 theia-certificates: hosts: @@ -22,10 +21,6 @@ theia-shared-cache: auth: enabled: false - storage: - size: 50Gi - storageClass: "csi-rbd-sc" - resources: cacheServer: requests: @@ -35,14 +30,14 @@ theia-shared-cache: memory: "1Gi" cpu: "500m" - minio: + redis: requests: - memory: "512Mi" - cpu: "250m" + memory: "128Mi" + cpu: "100m" limits: memory: "2Gi" cpu: "1000m" - + tls: enabled: true secretName: cache-internal-cert-secret diff --git a/deployments/theia-staging.artemis.cit.tum.de/values.yaml b/deployments/theia-staging.artemis.cit.tum.de/values.yaml index 8a6183f..db6cfac 100644 --- a/deployments/theia-staging.artemis.cit.tum.de/values.yaml +++ b/deployments/theia-staging.artemis.cit.tum.de/values.yaml @@ -5,7 +5,6 @@ hosts: service: service.theia-staging landing: theia-staging instance: instance.theia-staging - cache: cache.theia-staging theia-certificates: hosts: diff --git a/deployments/theia.artemis.cit.tum.de/values.yaml b/deployments/theia.artemis.cit.tum.de/values.yaml index 6832cb2..b633b1b 100644 --- a/deployments/theia.artemis.cit.tum.de/values.yaml +++ b/deployments/theia.artemis.cit.tum.de/values.yaml @@ -5,7 +5,6 @@ hosts: service: service.theia landing: theia instance: instance.theia - cache: cache.theia theia-certificates: hosts: From 36610c9b83410ce055c958f6ae73a1b8e9fc81a9 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 7 Mar 2026 12:24:48 +0100 Subject: [PATCH 48/79] update org --- charts/theia-cloud-combined/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 828cd67..0a29d83 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -23,4 +23,4 @@ dependencies: - name: theia-shared-cache version: "0.3.1" - repository: "oci://ghcr.io/ls1intum/charts" + repository: "oci://ghcr.io/eduide/charts" From 4567c8dec68536f82fc2ab1436a021afe5dcced2 Mon Sep 17 00:00:00 2001 From: = Date: Mon, 9 Mar 2026 15:13:16 +0100 Subject: [PATCH 49/79] minor syntax fix --- charts/theia-cloud-combined/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 0a29d83..8935216 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -22,5 +22,5 @@ dependencies: repository: "https://ls1intum.github.io/theia-workspace-garbage-collector/" - name: theia-shared-cache - version: "0.3.1" + version: 0.3.1 repository: "oci://ghcr.io/eduide/charts" From 80c5f0047d5387873e309bba868b13e71f0492cc Mon Sep 17 00:00:00 2001 From: = Date: Mon, 9 Mar 2026 17:42:17 +0100 Subject: [PATCH 50/79] update eduide url --- charts/theia-cloud-combined/Chart.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 8935216..05f32c2 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -7,7 +7,7 @@ appVersion: 1.0.0 dependencies: - name: theia-cloud version: 1.4.0-next.0 - repository: "https://ls1intum.github.io/theia-cloud-helm" + repository: "https://eduide.github.io/EduIDE-helm" - name: theia-certificates version: 0.1.0 @@ -19,7 +19,7 @@ dependencies: - name: theia-workspace-garbage-collector version: 0.1.0 - repository: "https://ls1intum.github.io/theia-workspace-garbage-collector/" + repository: "oci://ghcr.io/eduide/charts" - name: theia-shared-cache version: 0.3.1 From e197807c99d53a0a6c93e8cc6cc6272e4f50cd65 Mon Sep 17 00:00:00 2001 From: = Date: Mon, 9 Mar 2026 17:51:56 +0100 Subject: [PATCH 51/79] temporarly use ubutu runners --- .github/workflows/deploy-theia.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-theia.yml b/.github/workflows/deploy-theia.yml index 4562a30..e690e6f 100644 --- a/.github/workflows/deploy-theia.yml +++ b/.github/workflows/deploy-theia.yml @@ -80,7 +80,7 @@ jobs: name: Install Theia Cloud Helm Chart permissions: contents: read - runs-on: arc-runner-set-stateless + runs-on: ubuntu-latest # Link to GitHub Environment for secrets and protection rules environment: ${{ inputs.environment }} From ae18595f0c91b89dca16850de09aaca09b642651 Mon Sep 17 00:00:00 2001 From: = Date: Mon, 9 Mar 2026 17:59:14 +0100 Subject: [PATCH 52/79] minor error --- charts/theia-cloud-combined/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 05f32c2..766ed45 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -7,7 +7,7 @@ appVersion: 1.0.0 dependencies: - name: theia-cloud version: 1.4.0-next.0 - repository: "https://eduide.github.io/EduIDE-helm" + repository: "https://eduide.github.io/EduIDE-Helm" - name: theia-certificates version: 0.1.0 From 8a84d02c5e8f1b189967ab905be3f1e8b06e3bdd Mon Sep 17 00:00:00 2001 From: = Date: Mon, 9 Mar 2026 18:51:00 +0100 Subject: [PATCH 53/79] add reposilite metrics secret --- .../templates/servicemonitor-reposilite.yaml | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml b/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml index 7d3a9fe..6e9f7e0 100644 --- a/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml +++ b/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml @@ -1,3 +1,15 @@ +--- +# This Secret is only needed for the reposilite metrics endpoint. The metrics dont need to be secure, so the credentials are written in plain text +apiVersion: v1 +kind: Secret +metadata: + name: reposilite-prometheus-credentials + namespace: {{ .Values.namespace }} +type: Opaque +stringData: + username: "prometheus" + password: "prometheus" +--- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: @@ -15,4 +27,11 @@ spec: endpoints: - port: http path: /metrics - interval: 15s \ No newline at end of file + interval: 15s + basicAuth: + username: + name: reposilite-prometheus-credentials + key: username + password: + name: reposilite-prometheus-credentials + key: password \ No newline at end of file From 3f16f1e89abdfeb9e3b01cbe23e7b89e3685776b Mon Sep 17 00:00:00 2001 From: = Date: Mon, 9 Mar 2026 21:36:27 +0100 Subject: [PATCH 54/79] add operator arguments --- .../test2.theia-test.artemis.cit.tum.de/values.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index bac8964..ed3b4f2 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -81,8 +81,11 @@ theia-cloud: replicas: 1 sessionsPerUser: 10 storageClassName: csi-rbd-sc - enableCaching: true - cacheUrl: "https://theia-cloud-combined-cache:8080/cache/" + enableBuildCaching: true + buildCacheUrl: "https://theia-cloud-combined-cache-server:8080/cache/" + enableBuildCachePush: true + enableDependencyCaching: true + dependencyCacheUrl: "http://theia-cloud-combined-reposilite:8080" # service: # image: ghcr.io/ls1intum/theia/service:latest From a56f7388a0e598ccb000039081e367ee5ab85415 Mon Sep 17 00:00:00 2001 From: CodeByNikolas Date: Mon, 16 Mar 2026 10:31:11 +0100 Subject: [PATCH 55/79] Migrate test3 to AppDefinition v1beta11 sidecars on clean main-based branch --- .../templates/appdefinition.yaml | 31 +++++++++++++++-- .../values.yaml | 33 ++++++++++++++----- 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/charts/theia-appdefinitions/templates/appdefinition.yaml b/charts/theia-appdefinitions/templates/appdefinition.yaml index 2225114..560b8f3 100644 --- a/charts/theia-appdefinitions/templates/appdefinition.yaml +++ b/charts/theia-appdefinitions/templates/appdefinition.yaml @@ -1,5 +1,5 @@ {{- range .Values.apps }} -{{- $existingApp := lookup "theia.cloud/v1beta10" "AppDefinition" $.Release.Namespace .name }} +{{- $existingApp := lookup "theia.cloud/v1beta11" "AppDefinition" $.Release.Namespace .name }} {{- $existingSpec := dict }} {{- if $existingApp }} {{- $existingSpec = get $existingApp "spec" | default dict }} @@ -14,7 +14,7 @@ {{- $maxInstances = get $existingSpec "maxInstances" }} {{- end }} --- -apiVersion: theia.cloud/v1beta10 +apiVersion: theia.cloud/v1beta11 kind: AppDefinition metadata: name: {{ .name }} @@ -54,4 +54,31 @@ spec: options: {{- toYaml .options | nindent 4 }} {{- end }} + {{- if .sidecars }} + sidecars: + {{- range .sidecars }} + - name: {{ .name }} + image: {{ .image }} + port: {{ .port | default 5000 }} + {{- if .languages }} + languages: + {{- range .languages }} + - {{ . }} + {{- end }} + {{- end }} + {{- if .cpuLimit }} + cpuLimit: {{ .cpuLimit }} + {{- end }} + {{- if .memoryLimit }} + memoryLimit: {{ .memoryLimit }} + {{- end }} + {{- if .cpuRequest }} + cpuRequest: {{ .cpuRequest }} + {{- end }} + {{- if .memoryRequest }} + memoryRequest: {{ .memoryRequest }} + {{- end }} + mountWorkspace: {{ .mountWorkspace | default true }} + {{- end }} + {{- end }} {{- end }} diff --git a/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml index 4afaaca..3bd4fec 100644 --- a/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml @@ -105,10 +105,12 @@ theia-cloud: label: Python rust-latest: label: Rust - java-ls-test: - label: Java LS Test + java-17-no-ls: + label: Java 17 No-LS (Sidecar) + rust-no-ls: + label: Rust No-LS (Sidecar) infoTitle: "🚀 Welcome to Test3 IDE Environment" - infoText: "This is a testing environment for Theia Cloud. Select your programming language and start coding in seconds!" + infoText: "Test environment for Theia with external language server architecture (PR #70). The IDE runs separately from the language server for improved performance and modularity." loadingText: "⚡ Setting up your development workspace..." footerLinks: attribution: @@ -139,11 +141,26 @@ theia-cloud: theia-appdefinitions: apps: - - name: java-ls-test - image: ghcr.io/eduide/eduide/theia-no-ls - imageTag: pr-46 - options: - langserver-image: ghcr.io/eduide/eduide/langserver-java:pr-46 + - name: java-17-no-ls + image: ghcr.io/ls1intum/theia/java-17-no-ls + imageTag: latest + minInstances: 1 + sidecars: + - name: langserver + image: ghcr.io/ls1intum/theia/langserver-java:latest + port: 5000 + languages: [java] + mountWorkspace: true + - name: rust-no-ls + image: ghcr.io/ls1intum/theia/rust-no-ls + imageTag: latest + minInstances: 1 + sidecars: + - name: langserver + image: ghcr.io/ls1intum/theia/langserver-rust:latest + port: 5000 + languages: [rust] + mountWorkspace: true monitoring: targetNamespaces: From ddd6a0e4dd352785b4b3367488809b33008a4473 Mon Sep 17 00:00:00 2001 From: CodeByNikolas Date: Mon, 16 Mar 2026 11:01:58 +0100 Subject: [PATCH 56/79] ci: bump theia-cloud-crds base version to 1.2.0-next.1 Aligns with EduIDE-Helm PR #11 which adds v1beta11 support. With helm_chart_tag=pr-11, CI will now resolve theia-cloud-crds:1.2.0-next.1.pr-11 from GHCR. --- .github/workflows/deploy-theia.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-theia.yml b/.github/workflows/deploy-theia.yml index 6c2f5d9..a038f88 100644 --- a/.github/workflows/deploy-theia.yml +++ b/.github/workflows/deploy-theia.yml @@ -162,7 +162,7 @@ jobs: set -euo pipefail THEIA_CLOUD_BASE_VERSION="1.4.0-next.0" - THEIA_CLOUD_CRDS_VERSION="1.2.0-next.0" + THEIA_CLOUD_CRDS_VERSION="1.2.0-next.1" if [ -n "${{ inputs.helm_chart_tag }}" ]; then normalize_preview_version() { From 36e2400ede79e693869fc5b8e2154a1dfc01baaf Mon Sep 17 00:00:00 2001 From: CodeByNikolas Date: Mon, 16 Mar 2026 11:06:58 +0100 Subject: [PATCH 57/79] ci(test3): override conversion-webhook image to PR build Points theia-cloud-crds at the eduide-fork conversion-webhook image (conversion-webhook:pr-70) which includes the v1beta11 AppDefinition mapper required for the sidecar redesign. --- .../theia-crds-helm-values.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deployments/test3.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml b/deployments/test3.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml index 2dbe04f..5668dbe 100644 --- a/deployments/test3.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml +++ b/deployments/test3.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml @@ -1,2 +1,4 @@ -# -- The cluster issuer to use for the certificate clusterIssuer: theia-cloud-selfsigned-issuer + +conversion: + image: ghcr.io/eduide/eduide-cloud/conversion-webhook:pr-70 From 20d3c61b06889145b9be106f8931bd49f2c50000 Mon Sep 17 00:00:00 2001 From: CodeByNikolas Date: Mon, 16 Mar 2026 11:41:23 +0100 Subject: [PATCH 58/79] chore(test3): remove stale pr-46 preloading images theia-no-ls:pr-46 and langserver-java:pr-46 no longer exist in the registry. The no-ls AppDefinitions reference images from ls1intum/theia directly, so these preloading entries served no purpose. --- deployments/test3.theia-test.artemis.cit.tum.de/values.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml index 3bd4fec..4061442 100644 --- a/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml @@ -69,8 +69,6 @@ theia-cloud: - ghcr.io/eduide/eduide/ocaml:latest - ghcr.io/eduide/eduide/rust:latest - ghcr.io/eduide/eduide/python:latest - - ghcr.io/eduide/eduide/theia-no-ls:pr-46 - - ghcr.io/eduide/eduide/langserver-java:pr-46 imagePullPolicy: Always From d316777982cdd01466e0c2eb5dea1b620827be4a Mon Sep 17 00:00:00 2001 From: CodeByNikolas Date: Mon, 16 Mar 2026 11:54:00 +0100 Subject: [PATCH 59/79] fix: correct garbage-collector image path to ghcr.io/eduide/garbage-collector --- charts/theia-cloud-combined/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index 2210712..cc92b94 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -153,7 +153,7 @@ theia-appdefinitions: theia-workspace-garbage-collector: replicaCount: 1 image: - repository: ghcr.io/eduide/eduide/garbage-collector + repository: ghcr.io/eduide/garbage-collector tag: latest pullPolicy: Always From 6e19887a886dfe075609d22da9aabdb3bcc53cd0 Mon Sep 17 00:00:00 2001 From: CodeByNikolas Date: Mon, 16 Mar 2026 14:29:20 +0100 Subject: [PATCH 60/79] fix(test3): align sidecar appdefinitions with reviewer findings - preserve explicit mountWorkspace=false in Helm template (avoid default overriding false) - support sidecar imageTag/defaultImageTag fallback when sidecar image has no explicit tag - set landing default app to a defined sidecar app and remove stale additionalApps entries - remove hardcoded latest tags in sidecar appdefs to honor defaultImageTag overrides - preload no-ls IDE + sidecar langserver images used by test3 --- .../templates/appdefinition.yaml | 13 ++++++++-- .../values.yaml | 24 ++++++------------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/charts/theia-appdefinitions/templates/appdefinition.yaml b/charts/theia-appdefinitions/templates/appdefinition.yaml index 560b8f3..e4ca501 100644 --- a/charts/theia-appdefinitions/templates/appdefinition.yaml +++ b/charts/theia-appdefinitions/templates/appdefinition.yaml @@ -58,7 +58,12 @@ spec: sidecars: {{- range .sidecars }} - name: {{ .name }} - image: {{ .image }} + {{- $sidecarImage := .image }} + {{- if or (contains "@sha256:" $sidecarImage) (regexMatch ".*:[^/]+$" $sidecarImage) }} + image: {{ $sidecarImage }} + {{- else }} + image: {{ $sidecarImage }}:{{ .imageTag | default $.Values.defaultImageTag | default "latest" }} + {{- end }} port: {{ .port | default 5000 }} {{- if .languages }} languages: @@ -78,7 +83,11 @@ spec: {{- if .memoryRequest }} memoryRequest: {{ .memoryRequest }} {{- end }} - mountWorkspace: {{ .mountWorkspace | default true }} + {{- if hasKey . "mountWorkspace" }} + mountWorkspace: {{ .mountWorkspace }} + {{- else }} + mountWorkspace: true + {{- end }} {{- end }} {{- end }} {{- end }} diff --git a/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml index c6f8c89..fb98374 100644 --- a/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml @@ -69,6 +69,10 @@ theia-cloud: - ghcr.io/eduide/eduide/ocaml:latest - ghcr.io/eduide/eduide/rust:latest - ghcr.io/eduide/eduide/python:latest + - ghcr.io/ls1intum/theia/java-17-no-ls:latest + - ghcr.io/ls1intum/theia/rust-no-ls:latest + - ghcr.io/ls1intum/theia/langserver-java:latest + - ghcr.io/ls1intum/theia/langserver-rust:latest imagePullPolicy: Always @@ -88,21 +92,9 @@ theia-cloud: # 2. (Optional) If you removed the 'hardcoded png' logic in the template, # you might need this. If you used my simplified template, this is ignored. logoFileExtension: "png" - appDefinition: "java-17-latest" + appDefinition: "java-17-no-ls" ephemeralStorage: true additionalApps: - java-17-latest: - label: Java 17 - c-latest: - label: C - javascript-latest: - label: Javascript - ocaml-latest: - label: Ocaml - python-latest: - label: Python - rust-latest: - label: Rust java-17-no-ls: label: Java 17 No-LS (Sidecar) rust-no-ls: @@ -141,21 +133,19 @@ theia-appdefinitions: apps: - name: java-17-no-ls image: ghcr.io/ls1intum/theia/java-17-no-ls - imageTag: latest minInstances: 1 sidecars: - name: langserver - image: ghcr.io/ls1intum/theia/langserver-java:latest + image: ghcr.io/ls1intum/theia/langserver-java port: 5000 languages: [java] mountWorkspace: true - name: rust-no-ls image: ghcr.io/ls1intum/theia/rust-no-ls - imageTag: latest minInstances: 1 sidecars: - name: langserver - image: ghcr.io/ls1intum/theia/langserver-rust:latest + image: ghcr.io/ls1intum/theia/langserver-rust port: 5000 languages: [rust] mountWorkspace: true From 6665fb5b6387c535fb5bdd5e60af7c2939b489fd Mon Sep 17 00:00:00 2001 From: CodeByNikolas Date: Mon, 16 Mar 2026 15:06:34 +0100 Subject: [PATCH 61/79] fix(test3): switch no-ls and langserver images to eduide registry - replace ls1intum/theia image references with ghcr.io/eduide/eduide for no-ls IDE and sidecar images - align test3 appdefinitions and preloading with PR-tagged image pipeline --- .../values.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml index fb98374..c8559c1 100644 --- a/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test3.theia-test.artemis.cit.tum.de/values.yaml @@ -69,10 +69,10 @@ theia-cloud: - ghcr.io/eduide/eduide/ocaml:latest - ghcr.io/eduide/eduide/rust:latest - ghcr.io/eduide/eduide/python:latest - - ghcr.io/ls1intum/theia/java-17-no-ls:latest - - ghcr.io/ls1intum/theia/rust-no-ls:latest - - ghcr.io/ls1intum/theia/langserver-java:latest - - ghcr.io/ls1intum/theia/langserver-rust:latest + - ghcr.io/eduide/eduide/java-17-no-ls:latest + - ghcr.io/eduide/eduide/rust-no-ls:latest + - ghcr.io/eduide/eduide/langserver-java:latest + - ghcr.io/eduide/eduide/langserver-rust:latest imagePullPolicy: Always @@ -132,20 +132,20 @@ theia-cloud: theia-appdefinitions: apps: - name: java-17-no-ls - image: ghcr.io/ls1intum/theia/java-17-no-ls + image: ghcr.io/eduide/eduide/java-17-no-ls minInstances: 1 sidecars: - name: langserver - image: ghcr.io/ls1intum/theia/langserver-java + image: ghcr.io/eduide/eduide/langserver-java port: 5000 languages: [java] mountWorkspace: true - name: rust-no-ls - image: ghcr.io/ls1intum/theia/rust-no-ls + image: ghcr.io/eduide/eduide/rust-no-ls minInstances: 1 sidecars: - name: langserver - image: ghcr.io/ls1intum/theia/langserver-rust + image: ghcr.io/eduide/eduide/langserver-rust port: 5000 languages: [rust] mountWorkspace: true From 606c591245645a6d801182eeffd818fd00716fee Mon Sep 17 00:00:00 2001 From: CodeByNikolas Date: Mon, 16 Mar 2026 15:15:54 +0100 Subject: [PATCH 62/79] ci(deploy): tag no-ls and sidecar preloading images with ide_images_tag - add explicit workflow overrides for preloading image indices 7..10 - ensure java-17-no-ls/rust-no-ls and langserver-java/langserver-rust track IDE tag input --- .github/workflows/deploy-theia.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/deploy-theia.yml b/.github/workflows/deploy-theia.yml index a038f88..1fa35b7 100644 --- a/.github/workflows/deploy-theia.yml +++ b/.github/workflows/deploy-theia.yml @@ -251,4 +251,8 @@ jobs: --set "theia-cloud.preloading.images[4]=ghcr.io/eduide/eduide/ocaml:${IDE_IMAGES_TAG}" \ --set "theia-cloud.preloading.images[5]=ghcr.io/eduide/eduide/rust:${IDE_IMAGES_TAG}" \ --set "theia-cloud.preloading.images[6]=ghcr.io/eduide/eduide/python:${IDE_IMAGES_TAG}" \ + --set "theia-cloud.preloading.images[7]=ghcr.io/eduide/eduide/java-17-no-ls:${IDE_IMAGES_TAG}" \ + --set "theia-cloud.preloading.images[8]=ghcr.io/eduide/eduide/rust-no-ls:${IDE_IMAGES_TAG}" \ + --set "theia-cloud.preloading.images[9]=ghcr.io/eduide/eduide/langserver-java:${IDE_IMAGES_TAG}" \ + --set "theia-cloud.preloading.images[10]=ghcr.io/eduide/eduide/langserver-rust:${IDE_IMAGES_TAG}" \ --set theia-appdefinitions.defaultImageTag="${IDE_IMAGES_TAG}" From 6b188a7a710370fab48c241913a2467e75c3280c Mon Sep 17 00:00:00 2001 From: = Date: Mon, 16 Mar 2026 16:49:12 +0100 Subject: [PATCH 63/79] resolve conflicts --- .github/workflows/deploy-theia.yml | 3 --- charts/theia-cloud-combined/Chart.yaml | 9 --------- 2 files changed, 12 deletions(-) diff --git a/.github/workflows/deploy-theia.yml b/.github/workflows/deploy-theia.yml index a283079..6c2f5d9 100644 --- a/.github/workflows/deploy-theia.yml +++ b/.github/workflows/deploy-theia.yml @@ -81,10 +81,7 @@ jobs: name: Install Theia Cloud Helm Chart permissions: contents: read -<<<<<<< HEAD -======= packages: read ->>>>>>> main runs-on: ubuntu-latest # Link to GitHub Environment for secrets and protection rules environment: ${{ inputs.environment }} diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 4e3cb18..14dc316 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -6,13 +6,8 @@ appVersion: 1.0.0 dependencies: - name: theia-cloud -<<<<<<< HEAD - version: 1.4.0-next.0 - repository: "https://eduide.github.io/EduIDE-Helm" -======= version: 1.4.0-next.1 repository: "oci://ghcr.io/eduide/charts" ->>>>>>> main - name: theia-certificates version: 0.1.0 @@ -27,9 +22,5 @@ dependencies: repository: "oci://ghcr.io/eduide/charts" - name: theia-shared-cache -<<<<<<< HEAD version: 0.3.1 -======= - version: "0.3.1" ->>>>>>> main repository: "oci://ghcr.io/eduide/charts" From 9ea35a1ccd66c6c01d920cc07968cb7c1d26edb2 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 17 Mar 2026 12:38:08 +0100 Subject: [PATCH 64/79] add conversion webhook to test2 --- .../theia-crds-helm-values.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml b/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml index 2dbe04f..3a28892 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml @@ -1,2 +1,5 @@ # -- The cluster issuer to use for the certificate clusterIssuer: theia-cloud-selfsigned-issuer + +conversion: + image: ghcr.io/eduide/eduide-cloud/conversion-webhook:pr-70 From d9b3cbe9699e232a41fb3a19257e4d4b5812ff40 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 21 Mar 2026 18:52:38 +0100 Subject: [PATCH 65/79] Migrate internal TLS to seperate Chart --- charts/theia-internal-tls/Chart.yaml | 5 +++++ .../templates/internal-ca.yml | 0 .../templates/trust-bundle.yml | 9 +++------ charts/theia-internal-tls/values.yaml | 7 +++++++ deployments/internal-tls-infrastructure/values.yaml | 7 +++++++ .../theia-crds-helm-values.yml | 1 + 6 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 charts/theia-internal-tls/Chart.yaml rename charts/{theia-certificates => theia-internal-tls}/templates/internal-ca.yml (100%) rename charts/{theia-certificates => theia-internal-tls}/templates/trust-bundle.yml (87%) create mode 100644 charts/theia-internal-tls/values.yaml create mode 100644 deployments/internal-tls-infrastructure/values.yaml diff --git a/charts/theia-internal-tls/Chart.yaml b/charts/theia-internal-tls/Chart.yaml new file mode 100644 index 0000000..12894f9 --- /dev/null +++ b/charts/theia-internal-tls/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v2 +name: theia-internal-tls +description: Cluster-scoped trust infrastructure for internal tls (internal CA + trust bundle) +version: 0.1.0 +appVersion: 1.0.0 \ No newline at end of file diff --git a/charts/theia-certificates/templates/internal-ca.yml b/charts/theia-internal-tls/templates/internal-ca.yml similarity index 100% rename from charts/theia-certificates/templates/internal-ca.yml rename to charts/theia-internal-tls/templates/internal-ca.yml diff --git a/charts/theia-certificates/templates/trust-bundle.yml b/charts/theia-internal-tls/templates/trust-bundle.yml similarity index 87% rename from charts/theia-certificates/templates/trust-bundle.yml rename to charts/theia-internal-tls/templates/trust-bundle.yml index 2829594..52a34cf 100644 --- a/charts/theia-certificates/templates/trust-bundle.yml +++ b/charts/theia-internal-tls/templates/trust-bundle.yml @@ -28,9 +28,6 @@ spec: - key: kubernetes.io/metadata.name operator: In values: - - test2 - - theia - - theia-staging - - test1 - - test3 - + {{- range .Values.trustBundle.namespaces }} + - {{ . }} + {{- end }} \ No newline at end of file diff --git a/charts/theia-internal-tls/values.yaml b/charts/theia-internal-tls/values.yaml new file mode 100644 index 0000000..e0742c0 --- /dev/null +++ b/charts/theia-internal-tls/values.yaml @@ -0,0 +1,7 @@ +trustBundle: + namespaces: + - test2 + - theia + - theia-staging + - test1 + - test3 \ No newline at end of file diff --git a/deployments/internal-tls-infrastructure/values.yaml b/deployments/internal-tls-infrastructure/values.yaml new file mode 100644 index 0000000..e0742c0 --- /dev/null +++ b/deployments/internal-tls-infrastructure/values.yaml @@ -0,0 +1,7 @@ +trustBundle: + namespaces: + - test2 + - theia + - theia-staging + - test1 + - test3 \ No newline at end of file diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml b/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml index 3a28892..c5d2c2c 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/theia-crds-helm-values.yml @@ -3,3 +3,4 @@ clusterIssuer: theia-cloud-selfsigned-issuer conversion: image: ghcr.io/eduide/eduide-cloud/conversion-webhook:pr-70 + From f5fd25b9914f6b4e4ab7355ecf370bf8c7625389 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 21 Mar 2026 19:06:51 +0100 Subject: [PATCH 66/79] Add documentation --- .github/workflows/deploy-theia.yml | 9 +++++++++ README.md | 14 ++++++++++++-- .../theia-internal-tls/templates/trust-bundle.yml | 11 +---------- charts/theia-internal-tls/values.yaml | 8 +------- docs/adding-environments.md | 4 ++++ 5 files changed, 27 insertions(+), 19 deletions(-) diff --git a/.github/workflows/deploy-theia.yml b/.github/workflows/deploy-theia.yml index 1fa35b7..8fe20df 100644 --- a/.github/workflows/deploy-theia.yml +++ b/.github/workflows/deploy-theia.yml @@ -192,6 +192,15 @@ jobs: # This is installed once per cluster, not per environment helm upgrade theia-monitoring ./charts/theia-monitoring --install -n default + - name: Install internal TLS infrastructure + env: + KUBECONFIG: ${{ github.workspace }}/kubeconfig + run: | + + # Install cluster-scoped internal CA and trust bundle (once per cluster) + # Distributes the trust bundle ConfigMap to all namespaces + helm upgrade --install theia-internal-tls ./charts/theia-internal-tls -n cert-manager + # Step 5: Install shared Gateway (optional, cluster-level) - name: Install Shared Gateway (optional) if: inputs.deploy_shared_gateway && inputs.shared_gateway_values_file != '' diff --git a/README.md b/README.md index 01b25e9..55afdee 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,9 @@ This repository serves as the infrastructure-as-code for deploying and managing ├── charts/ # Custom Helm charts │ ├── theia-cloud-combined/ # Combined chart with all components │ ├── theia-shared-gateway/ # Shared Gateway API entrypoint +│ ├── theia-internal-tls/ # Cluster-scoped internal CA + trust bundle │ ├── theia-appdefinitions/ # Custom IDE environments (images/configs) -│ ├── theia-certificates/ # SSL certificate management +│ ├── theia-certificates/ # SSL certificate management (per-namespace) │ └── theia-metrics/ # Prometheus/Grafana dashboards │ ├── value-reference-files/ # Reference Helm values for different setups @@ -147,7 +148,16 @@ Configuration files for each environment are located in the [deployments/](deplo For the dedicated production cluster, use: `deployments/shared-gateway-prod/values.yaml`. -4. **Install the combined Theia Cloud chart**: +4. **Install the internal TLS infrastructure (once per cluster)**: + ```bash + helm upgrade --install theia-internal-tls ./charts/theia-internal-tls \ + --namespace cert-manager + ``` + This deploys the cluster-scoped internal CA and trust bundle used for TLS + between internal services (e.g., shared cache and workspaces). The trust + bundle ConfigMap is automatically distributed to all namespaces. + +5. **Install the combined Theia Cloud chart**: ```bash helm registry login ghcr.io helm upgrade --install theia-cloud-combined ./charts/theia-cloud-combined \ diff --git a/charts/theia-internal-tls/templates/trust-bundle.yml b/charts/theia-internal-tls/templates/trust-bundle.yml index 52a34cf..5f5fa51 100644 --- a/charts/theia-internal-tls/templates/trust-bundle.yml +++ b/charts/theia-internal-tls/templates/trust-bundle.yml @@ -21,13 +21,4 @@ spec: # This is what Java/Gradle will use directly additionalFormats: jks: - key: "truststore.jks" - - namespaceSelector: - matchExpressions: - - key: kubernetes.io/metadata.name - operator: In - values: - {{- range .Values.trustBundle.namespaces }} - - {{ . }} - {{- end }} \ No newline at end of file + key: "truststore.jks" \ No newline at end of file diff --git a/charts/theia-internal-tls/values.yaml b/charts/theia-internal-tls/values.yaml index e0742c0..99b3a95 100644 --- a/charts/theia-internal-tls/values.yaml +++ b/charts/theia-internal-tls/values.yaml @@ -1,7 +1 @@ -trustBundle: - namespaces: - - test2 - - theia - - theia-staging - - test1 - - test3 \ No newline at end of file +# No values needed — the trust bundle is distributed to all namespaces. diff --git a/docs/adding-environments.md b/docs/adding-environments.md index 090206c..384fb9c 100644 --- a/docs/adding-environments.md +++ b/docs/adding-environments.md @@ -93,6 +93,10 @@ issuer: Typically no changes needed for this file. +### 1.4 Internal TLS + +The internal TLS infrastructure (internal CA + trust bundle) is deployed once per cluster via `charts/theia-internal-tls`. The trust bundle ConfigMap (`theia-internal-trust`) is automatically distributed to all namespaces, so no additional configuration is needed when adding a new environment. + ## Step 2: Create GitHub Environment ### 2.1 Create the Environment From 7b2762ddf760fb3d43bb861cfb68b4ababad0b9e Mon Sep 17 00:00:00 2001 From: = Date: Sun, 22 Mar 2026 09:58:58 +0100 Subject: [PATCH 67/79] Minor fixxes --- charts/theia-cloud-combined/values.yaml | 5 +++++ charts/theia-internal-tls/values.yaml | 1 - deployments/internal-tls-infrastructure/values.yaml | 7 ------- value-reference-files/theia-cloud-helm-values.yml | 7 +++++-- 4 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 charts/theia-internal-tls/values.yaml delete mode 100644 deployments/internal-tls-infrastructure/values.yaml diff --git a/charts/theia-cloud-combined/values.yaml b/charts/theia-cloud-combined/values.yaml index e80eb24..748ad2e 100644 --- a/charts/theia-cloud-combined/values.yaml +++ b/charts/theia-cloud-combined/values.yaml @@ -52,6 +52,11 @@ theia-cloud: sessionsPerUser: 10 storageClassName: csi-rbd-sc eagerStart: true + enableBuildCaching: false + buildCacheUrl: "" + enableBuildCachePush: false + enableDependencyCaching: false + dependencyCacheUrl: "" service: image: ghcr.io/eduide/eduide/service:latest diff --git a/charts/theia-internal-tls/values.yaml b/charts/theia-internal-tls/values.yaml deleted file mode 100644 index 99b3a95..0000000 --- a/charts/theia-internal-tls/values.yaml +++ /dev/null @@ -1 +0,0 @@ -# No values needed — the trust bundle is distributed to all namespaces. diff --git a/deployments/internal-tls-infrastructure/values.yaml b/deployments/internal-tls-infrastructure/values.yaml deleted file mode 100644 index e0742c0..0000000 --- a/deployments/internal-tls-infrastructure/values.yaml +++ /dev/null @@ -1,7 +0,0 @@ -trustBundle: - namespaces: - - test2 - - theia - - theia-staging - - test1 - - test3 \ No newline at end of file diff --git a/value-reference-files/theia-cloud-helm-values.yml b/value-reference-files/theia-cloud-helm-values.yml index 20afb7c..8b71b03 100644 --- a/value-reference-files/theia-cloud-helm-values.yml +++ b/value-reference-files/theia-cloud-helm-values.yml @@ -36,8 +36,11 @@ operator: replicas: 1 sessionsPerUser: 10 storageClassName: csi-rbd-sc - enableCaching: true - cacheUrl: "http://theia-shared-cache:5071" + enableBuildCaching: false + buildCacheUrl: "" + enableBuildCachePush: false + enableDependencyCaching: false + dependencyCacheUrl: "" service: adminApiTokenSecret: From d4f657253780020deaff12783ef7f2752483c921 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 22 Mar 2026 10:28:29 +0100 Subject: [PATCH 68/79] Update monitoring --- .../templates/dashboard-cache.yaml | 19 +++++++++++++------ .../templates/dashboard-reposilite.yaml | 19 +++++++++++++------ .../templates/servicemonitor-cache.yaml | 9 +++------ .../templates/servicemonitor-reposilite.yaml | 11 ++++------- charts/theia-monitoring/values.yaml | 8 -------- 5 files changed, 33 insertions(+), 33 deletions(-) diff --git a/charts/theia-monitoring/templates/dashboard-cache.yaml b/charts/theia-monitoring/templates/dashboard-cache.yaml index a0f1734..f5e17d4 100644 --- a/charts/theia-monitoring/templates/dashboard-cache.yaml +++ b/charts/theia-monitoring/templates/dashboard-cache.yaml @@ -505,18 +505,25 @@ data: "templating": { "list": [ { - "current": { "selected": false, "text": "test2", "value": "test2" }, + "current": {}, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "definition": "label_values(gradle_cache_cache_hits_total, namespace)", "hide": 0, "includeAll": false, "label": "Namespace", "multi": false, "name": "namespace", - "options": [ - { "selected": true, "text": "test2", "value": "test2" } - ], - "query": "test2", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(gradle_cache_cache_hits_total, namespace)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", "skipUrlSync": false, - "type": "custom" + "sort": 0, + "type": "query" } ] }, diff --git a/charts/theia-monitoring/templates/dashboard-reposilite.yaml b/charts/theia-monitoring/templates/dashboard-reposilite.yaml index b3bb0af..45ae992 100644 --- a/charts/theia-monitoring/templates/dashboard-reposilite.yaml +++ b/charts/theia-monitoring/templates/dashboard-reposilite.yaml @@ -774,18 +774,25 @@ data: "templating": { "list": [ { - "current": { "selected": false, "text": "test2", "value": "test2" }, + "current": {}, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "definition": "label_values(jetty_requests_total, namespace)", "hide": 0, "includeAll": false, "label": "Namespace", "multi": false, "name": "namespace", - "options": [ - { "selected": true, "text": "test2", "value": "test2" } - ], - "query": "test2", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(jetty_requests_total, namespace)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", "skipUrlSync": false, - "type": "custom" + "sort": 0, + "type": "query" } ] }, diff --git a/charts/theia-monitoring/templates/servicemonitor-cache.yaml b/charts/theia-monitoring/templates/servicemonitor-cache.yaml index bcb6550..884f2f4 100644 --- a/charts/theia-monitoring/templates/servicemonitor-cache.yaml +++ b/charts/theia-monitoring/templates/servicemonitor-cache.yaml @@ -2,20 +2,17 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: theia-shared-cache - namespace: {{ .Values.namespace }} + namespace: { { .Values.namespace } } spec: selector: matchLabels: app.kubernetes.io/component: cache-server namespaceSelector: - matchNames: - {{- range .Values.sharedCacheNamespaces }} - - {{ . }} - {{- end }} + any: true endpoints: - port: http path: /metrics interval: 15s scheme: https tlsConfig: - insecureSkipVerify: true \ No newline at end of file + insecureSkipVerify: true diff --git a/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml b/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml index 6e9f7e0..de38fb9 100644 --- a/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml +++ b/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml @@ -4,7 +4,7 @@ apiVersion: v1 kind: Secret metadata: name: reposilite-prometheus-credentials - namespace: {{ .Values.namespace }} + namespace: { { .Values.namespace } } type: Opaque stringData: username: "prometheus" @@ -14,16 +14,13 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: theia-cloud-reposilite - namespace: {{ .Values.namespace }} + namespace: { { .Values.namespace } } spec: selector: matchLabels: app.kubernetes.io/name: reposilite namespaceSelector: - matchNames: - {{- range .Values.reposiliteNamespaces }} - - {{ . }} - {{- end }} + any: true endpoints: - port: http path: /metrics @@ -34,4 +31,4 @@ spec: key: username password: name: reposilite-prometheus-credentials - key: password \ No newline at end of file + key: password diff --git a/charts/theia-monitoring/values.yaml b/charts/theia-monitoring/values.yaml index 4782d17..bfd0bf2 100644 --- a/charts/theia-monitoring/values.yaml +++ b/charts/theia-monitoring/values.yaml @@ -22,11 +22,3 @@ sessionNamespaces: - test1 - test2 - test3 - -# -- List of namespaces to monitor for Theia shared cache -sharedCacheNamespaces: - - test2 - -# -- List of namespaces to monitor for Theia Repository Cache (Reposilite) -reposiliteNamespaces: - - test2 \ No newline at end of file From 33f286e6e2e26f814ad9744015a5b20a7e2b58b5 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 22 Mar 2026 10:45:04 +0100 Subject: [PATCH 69/79] minor cert naming issue --- .../templates/cache-internal-certificate.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/theia-certificates/templates/cache-internal-certificate.yml b/charts/theia-certificates/templates/cache-internal-certificate.yml index 228b174..001ce57 100644 --- a/charts/theia-certificates/templates/cache-internal-certificate.yml +++ b/charts/theia-certificates/templates/cache-internal-certificate.yml @@ -9,7 +9,7 @@ spec: kind: ClusterIssuer commonName: "theia-shared-cache" dnsNames: - - theia-cloud-combined-cache - - theia-cloud-combined-cache.{{ .Release.Namespace }}.svc.cluster.local + - theia-cloud-combined-cache-server + - theia-cloud-combined-cache-server.{{ .Release.Namespace }}.svc.cluster.local privateKey: rotationPolicy: Never From 0eb46de5d2b5aeaa75daf44db6d20ea1bd3afe6e Mon Sep 17 00:00:00 2001 From: = Date: Sun, 22 Mar 2026 10:48:24 +0100 Subject: [PATCH 70/79] fix formatting issue --- charts/theia-monitoring/templates/servicemonitor-cache.yaml | 4 ++-- .../theia-monitoring/templates/servicemonitor-reposilite.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/charts/theia-monitoring/templates/servicemonitor-cache.yaml b/charts/theia-monitoring/templates/servicemonitor-cache.yaml index 884f2f4..ee26813 100644 --- a/charts/theia-monitoring/templates/servicemonitor-cache.yaml +++ b/charts/theia-monitoring/templates/servicemonitor-cache.yaml @@ -2,7 +2,7 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: theia-shared-cache - namespace: { { .Values.namespace } } + namespace: {{ .Values.namespace }} spec: selector: matchLabels: @@ -14,5 +14,5 @@ spec: path: /metrics interval: 15s scheme: https - tlsConfig: + tlsConfig:`` insecureSkipVerify: true diff --git a/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml b/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml index de38fb9..b2e14d5 100644 --- a/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml +++ b/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml @@ -4,7 +4,7 @@ apiVersion: v1 kind: Secret metadata: name: reposilite-prometheus-credentials - namespace: { { .Values.namespace } } + namespace: {{ .Values.namespace }} type: Opaque stringData: username: "prometheus" @@ -14,7 +14,7 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: theia-cloud-reposilite - namespace: { { .Values.namespace } } + namespace: {{ .Values.namespace }} spec: selector: matchLabels: From e0f0afda3c14d73bf93437b29fd479bbc76ee806 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 22 Mar 2026 10:52:23 +0100 Subject: [PATCH 71/79] syntax error --- charts/theia-monitoring/templates/servicemonitor-cache.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-monitoring/templates/servicemonitor-cache.yaml b/charts/theia-monitoring/templates/servicemonitor-cache.yaml index ee26813..5addb8d 100644 --- a/charts/theia-monitoring/templates/servicemonitor-cache.yaml +++ b/charts/theia-monitoring/templates/servicemonitor-cache.yaml @@ -14,5 +14,5 @@ spec: path: /metrics interval: 15s scheme: https - tlsConfig:`` + tlsConfig: insecureSkipVerify: true From ed59a19cb766bb8281121273424f072dd8d8f306 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 22 Mar 2026 11:21:17 +0100 Subject: [PATCH 72/79] minor url changes --- .../templates/cache-internal-certificate.yml | 4 ++-- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/charts/theia-certificates/templates/cache-internal-certificate.yml b/charts/theia-certificates/templates/cache-internal-certificate.yml index 001ce57..228b174 100644 --- a/charts/theia-certificates/templates/cache-internal-certificate.yml +++ b/charts/theia-certificates/templates/cache-internal-certificate.yml @@ -9,7 +9,7 @@ spec: kind: ClusterIssuer commonName: "theia-shared-cache" dnsNames: - - theia-cloud-combined-cache-server - - theia-cloud-combined-cache-server.{{ .Release.Namespace }}.svc.cluster.local + - theia-cloud-combined-cache + - theia-cloud-combined-cache.{{ .Release.Namespace }}.svc.cluster.local privateKey: rotationPolicy: Never diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index f23679a..7861ca2 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -82,10 +82,10 @@ theia-cloud: sessionsPerUser: 10 storageClassName: csi-rbd-sc enableBuildCaching: true - buildCacheUrl: "https://theia-cloud-combined-cache-server:8080/cache/" + buildCacheUrl: "https://theia-cloud-combined-cache:8080/cache/" enableBuildCachePush: true enableDependencyCaching: true - dependencyCacheUrl: "http://theia-cloud-combined-reposilite:8080" + dependencyCacheUrl: "http://theia-cloud-combined-reposilite:8080/releases/" # service: # image: ghcr.io/eduide/eduide-cloud/service:latest From 93e63c77079610b494d8c5dbbc858d944a02f07b Mon Sep 17 00:00:00 2001 From: = Date: Mon, 23 Mar 2026 11:35:06 +0100 Subject: [PATCH 73/79] update shared cache image --- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index 7861ca2..e36b0a2 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -14,7 +14,7 @@ theia-shared-cache: enabled: true image: - repository: ghcr.io/ls1intum/theia-shared-cache/gradle-cache + repository: ghcr.io/eduide/eduide-shared-cache/gradle-cache tag: "main" pullPolicy: IfNotPresent From 76b811b012f5413ec50949484ee41767c92b6fba Mon Sep 17 00:00:00 2001 From: = Date: Tue, 24 Mar 2026 17:17:49 +0100 Subject: [PATCH 74/79] Bump to shared cache 0.4.0 --- charts/theia-cloud-combined/Chart.yaml | 2 +- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 14dc316..aa22629 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -22,5 +22,5 @@ dependencies: repository: "oci://ghcr.io/eduide/charts" - name: theia-shared-cache - version: 0.3.1 + version: 0.4.0 repository: "oci://ghcr.io/eduide/charts" diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index e36b0a2..5393239 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -37,6 +37,11 @@ theia-shared-cache: limits: memory: "2Gi" cpu: "1000m" + + + cache: + maxEntrySizeMB: 100 + verifyCASHash: true tls: enabled: true From e879cfe22ea3822c8a00e4bc521845d03f042daf Mon Sep 17 00:00:00 2001 From: = Date: Fri, 27 Mar 2026 12:28:28 +0100 Subject: [PATCH 75/79] Set Shared Cache to version 0.3.1 --- charts/theia-cloud-combined/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index aa22629..14dc316 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -22,5 +22,5 @@ dependencies: repository: "oci://ghcr.io/eduide/charts" - name: theia-shared-cache - version: 0.4.0 + version: 0.3.1 repository: "oci://ghcr.io/eduide/charts" From 5a991fa95a2bea6ad9549d387e29b8550f1415d5 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 27 Mar 2026 18:06:46 +0100 Subject: [PATCH 76/79] upgrade to shared cache version 0.5.0 --- charts/theia-cloud-combined/Chart.yaml | 2 +- .../templates/servicemonitor-cache.yaml | 18 ---------- .../templates/servicemonitor-reposilite.yaml | 34 ------------------- 3 files changed, 1 insertion(+), 53 deletions(-) delete mode 100644 charts/theia-monitoring/templates/servicemonitor-cache.yaml delete mode 100644 charts/theia-monitoring/templates/servicemonitor-reposilite.yaml diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index e9fbab0..4b3b0ca 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -22,5 +22,5 @@ dependencies: repository: "oci://ghcr.io/eduide/charts" - name: theia-shared-cache - version: 0.3.1 + version: 0.5.0 repository: "oci://ghcr.io/eduide/charts" diff --git a/charts/theia-monitoring/templates/servicemonitor-cache.yaml b/charts/theia-monitoring/templates/servicemonitor-cache.yaml deleted file mode 100644 index 5addb8d..0000000 --- a/charts/theia-monitoring/templates/servicemonitor-cache.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: monitoring.coreos.com/v1 -kind: ServiceMonitor -metadata: - name: theia-shared-cache - namespace: {{ .Values.namespace }} -spec: - selector: - matchLabels: - app.kubernetes.io/component: cache-server - namespaceSelector: - any: true - endpoints: - - port: http - path: /metrics - interval: 15s - scheme: https - tlsConfig: - insecureSkipVerify: true diff --git a/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml b/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml deleted file mode 100644 index b2e14d5..0000000 --- a/charts/theia-monitoring/templates/servicemonitor-reposilite.yaml +++ /dev/null @@ -1,34 +0,0 @@ ---- -# This Secret is only needed for the reposilite metrics endpoint. The metrics dont need to be secure, so the credentials are written in plain text -apiVersion: v1 -kind: Secret -metadata: - name: reposilite-prometheus-credentials - namespace: {{ .Values.namespace }} -type: Opaque -stringData: - username: "prometheus" - password: "prometheus" ---- -apiVersion: monitoring.coreos.com/v1 -kind: ServiceMonitor -metadata: - name: theia-cloud-reposilite - namespace: {{ .Values.namespace }} -spec: - selector: - matchLabels: - app.kubernetes.io/name: reposilite - namespaceSelector: - any: true - endpoints: - - port: http - path: /metrics - interval: 15s - basicAuth: - username: - name: reposilite-prometheus-credentials - key: username - password: - name: reposilite-prometheus-credentials - key: password From 60e66774ed6ef33e6d3661137f120439d17f2140 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 27 Mar 2026 18:10:25 +0100 Subject: [PATCH 77/79] update chart name --- charts/theia-cloud-combined/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/theia-cloud-combined/Chart.yaml b/charts/theia-cloud-combined/Chart.yaml index 4b3b0ca..de73f64 100644 --- a/charts/theia-cloud-combined/Chart.yaml +++ b/charts/theia-cloud-combined/Chart.yaml @@ -21,6 +21,6 @@ dependencies: version: 0.1.0 repository: "oci://ghcr.io/eduide/charts" - - name: theia-shared-cache + - name: eduide-shared-cache version: 0.5.0 repository: "oci://ghcr.io/eduide/charts" From 08996238a7fc489017a72b36734d22cc14fdbd6d Mon Sep 17 00:00:00 2001 From: = Date: Tue, 31 Mar 2026 18:21:28 +0200 Subject: [PATCH 78/79] update chart name --- .../values.yaml | 78 +++++++++---------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index ff3e416..fb7daf7 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -10,42 +10,37 @@ theia-certificates: hosts: configuration: *hostsConfig -theia-shared-cache: +eduide-shared-cache: + + +enabled: true + +auth: + enabled: true + reader: + username: "reader" + password: "changeme-reader" + writer: + username: "writer" + password: "changeme-writer" + +cache: + maxEntrySizeMB: 100 + verifyCASHash: true + +tls: enabled: true + secretName: cache-internal-cert-secret - image: - repository: ghcr.io/eduide/eduide-shared-cache/gradle-cache - tag: "main" - pullPolicy: IfNotPresent - - auth: - enabled: false - - resources: - cacheServer: - requests: - memory: "256Mi" - cpu: "100m" - limits: - memory: "1Gi" - cpu: "500m" - - redis: - requests: - memory: "128Mi" - cpu: "100m" - limits: - memory: "2Gi" - cpu: "1000m" - - - cache: - maxEntrySizeMB: 100 - verifyCASHash: true - - tls: - enabled: true - secretName: cache-internal-cert-secret +resources: + requests: + memory: "256Mi" + cpu: "100m" + limits: + memory: "1Gi" + cpu: "500m" + + enabled: true theia-cloud: @@ -86,11 +81,14 @@ theia-cloud: replicas: 1 sessionsPerUser: 10 storageClassName: csi-rbd-sc - enableBuildCaching: true - buildCacheUrl: "https://theia-cloud-combined-cache:8080/cache/" - enableBuildCachePush: true - enableDependencyCaching: true - dependencyCacheUrl: "http://theia-cloud-combined-reposilite:8080/releases/" + buildCache: + enabled: true + push: true + url: "https://theia-cloud-combined-cache:8080/cache/" + secretName: "" + dependencyCache: + enabled: false + url: "http://theia-cloud-combined-reposilite:8080/releases/" # service: # image: ghcr.io/eduide/eduide-cloud/service:latest @@ -124,7 +122,7 @@ theia-cloud: landingPage: # We use the try now page as landing page since the default does not support multiple apps -> https://github.com/eclipsesource/theia-cloud/discussions/301 - image: ghcr.io/eduide/eduidec-landing-page + image: ghcr.io/eduide/eduidec-landing-page:pr-14 # We can define a default blueprint appDefinition: "java-17-latest" ephemeralStorage: true From abecd64753528159223bbe945e95f532448a8777 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 31 Mar 2026 18:32:27 +0200 Subject: [PATCH 79/79] add build systems to landing page values --- deployments/test2.theia-test.artemis.cit.tum.de/values.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml index fb7daf7..1226e56 100644 --- a/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml +++ b/deployments/test2.theia-test.artemis.cit.tum.de/values.yaml @@ -129,6 +129,11 @@ theia-cloud: additionalApps: java-17-latest: label: Java 17 + buildSystems: + - id: gradle + label: Gradle + - id: maven + label: Maven c-latest: label: C javascript-latest: