Skip to content
Open
Show file tree
Hide file tree
Changes from 53 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
eab99f7
feat: Integrate EduTheia landing page with separate tag parameter
CodeByNikolas Feb 5, 2026
f98c9e2
no custom
CodeByNikolas Feb 19, 2026
73c40d8
check footer for new landing apge
CodeByNikolas Feb 19, 2026
e159b25
chore: Bump theia-cloud chart to 1.3.0-next.4 (#63)
CodeByNikolas Feb 19, 2026
e5c87d2
revert: Restore proper test3 footer links (remove test URLs)
CodeByNikolas Feb 19, 2026
9083a5f
Apply suggestion from @Copilot
CodeByNikolas Feb 19, 2026
3dde7e6
chore: Trigger rebase after main branch updates
CodeByNikolas Feb 19, 2026
bfe2a7d
chore: Merge main into edutheia branch - resolve Chart.lock timestamp…
CodeByNikolas Feb 19, 2026
16cc1cb
rollen test
CodeByNikolas Feb 19, 2026
99e350e
undo rollen
CodeByNikolas Feb 19, 2026
e88558e
all envs
CodeByNikolas Feb 19, 2026
a47e4ac
restore LS
CodeByNikolas Feb 20, 2026
08d8c4c
chore: merge main into feat/edutheia-landing-page-integration and upd…
CodeByNikolas Mar 18, 2026
865a6c7
fix: correct image registry paths for operator, service and landing page
CodeByNikolas Mar 18, 2026
7ae3a08
fix: lowercase GHCR landing-page image references
CodeByNikolas Mar 18, 2026
6a53fe8
fix: align landing-page defaults with standalone image path
CodeByNikolas Mar 18, 2026
d364437
fix: revert out-of-scope test3 pr-tag bumps
CodeByNikolas Mar 18, 2026
21f5254
feat: configure ARC runners with GitHub backup execution mode for all…
CodeByNikolas Mar 19, 2026
985715d
fix(ci): retry Helm base/CRD install on 'release already exists' race
CodeByNikolas Mar 19, 2026
b747324
Merge remote-tracking branch 'origin/main' into feat/landing-page-int…
CodeByNikolas Mar 19, 2026
2b98737
Merge remote-tracking branch 'origin/hotfix/helm-release-race-retry' …
CodeByNikolas Mar 19, 2026
79858a9
fix(ci): remove duplicate execution_mode keys in deploy-pr.yml workflow
CodeByNikolas Mar 19, 2026
5096fd5
fix: disable keycloak on test3 for benchmark runs
CodeByNikolas Mar 20, 2026
8d6b04e
hä??
CodeByNikolas Mar 20, 2026
792f4bd
correct image tag
CodeByNikolas Mar 20, 2026
ca037ce
use pr images
CodeByNikolas Mar 21, 2026
104825f
java-17-latest
CodeByNikolas Mar 21, 2026
7bdbd38
no sidecar
CodeByNikolas Mar 21, 2026
42d1011
feat(ci): add optional clean install workflow toggle
CodeByNikolas Mar 21, 2026
84c0d06
Merge branch 'feature/clean-install-toggle' into benchmark
CodeByNikolas Mar 21, 2026
ab9102b
feat(ci): make clean install perform namespace purge before deploy
CodeByNikolas Mar 21, 2026
47b5766
Merge branch 'feature/clean-install-toggle' into benchmark
CodeByNikolas Mar 21, 2026
1a913fb
fix(ci): delete session/workspace CRDs with grouped resource names
CodeByNikolas Mar 21, 2026
75e76db
Merge branch 'feature/clean-install-toggle' into benchmark
CodeByNikolas Mar 21, 2026
3c24f99
chore(ci): remove fixed post-cleanup wait from clean install
CodeByNikolas Mar 21, 2026
636c3d7
Merge branch 'feature/clean-install-toggle' into benchmark
CodeByNikolas Mar 21, 2026
e3d645c
back to latest
CodeByNikolas Mar 21, 2026
728b359
hä junge??
CodeByNikolas Mar 21, 2026
7a7a92a
check new deployment
CodeByNikolas Mar 21, 2026
c2fc148
new pr
CodeByNikolas Mar 22, 2026
3fb95ce
less preload
CodeByNikolas Mar 22, 2026
6ef8ba6
maxINstances
CodeByNikolas Mar 22, 2026
d108d4d
130
CodeByNikolas Mar 22, 2026
d3ebc08
false
CodeByNikolas Mar 22, 2026
4d5838d
fix(test3): use eduidec landing page image repository
CodeByNikolas Mar 22, 2026
42e84aa
merge: adopt landing image path update from chore branch
CodeByNikolas Mar 22, 2026
f169694
fix(test3): align landing image paths with eduidec repository
CodeByNikolas Mar 22, 2026
e532605
bitte richtig jetzt
CodeByNikolas Mar 22, 2026
1e55177
omgomg
CodeByNikolas Mar 22, 2026
8b07630
bruuuuuder
CodeByNikolas Mar 22, 2026
55ac3c1
new pr
CodeByNikolas Mar 22, 2026
29bef9a
test test
CodeByNikolas Mar 25, 2026
0492130
test ceph
CodeByNikolas Mar 25, 2026
41bd05e
Merge origin/main into benchmark
CodeByNikolas Mar 25, 2026
87ce2af
omg
CodeByNikolas Mar 30, 2026
4fb5251
more eager
CodeByNikolas Mar 30, 2026
3f89c9d
normaliue
CodeByNikolas Mar 30, 2026
22baabd
image labels
CodeByNikolas Mar 30, 2026
195a68f
Merge origin/main into benchmark
CodeByNikolas Mar 30, 2026
9849e33
Align prod image tags with main after merge
CodeByNikolas Mar 30, 2026
21cee22
no eager start
CodeByNikolas Mar 31, 2026
5e8368e
hoch limit + ephemeral
CodeByNikolas Apr 1, 2026
77ea9cf
f aus
CodeByNikolas Apr 1, 2026
0197378
true
CodeByNikolas Apr 2, 2026
50976b3
false
CodeByNikolas Apr 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/deploy-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ on:
description: 'Preview OCI tag from theia-cloud-helm to use (for example pr-123)'
required: false
default: ''
clean_install:
description: 'Clean Install: If true, perform namespace-scoped cleanup before install (delete sessions/workspaces, appdefinitions, deployments, daemonsets, statefulsets, PVCs).'
required: false
default: false
type: boolean

jobs:
# Job 1: Deploy to Test1 environment
Expand All @@ -62,6 +67,7 @@ jobs:
ide_images_tag: ${{ inputs.ide_images_tag }}
execution_mode: ${{ inputs.execution_mode || 'self-hosted-buildkit' }}
helm_chart_tag: ${{ inputs.helm_chart_tag || '' }}
clean_install: ${{ github.event_name == 'workflow_dispatch' && (inputs.clean_install || false) }}
deploy_shared_gateway: false
shared_gateway_values_file: deployments/shared-gateway/values.yaml
shared_gateway_namespace: gateway-system
Expand All @@ -82,6 +88,7 @@ jobs:
ide_images_tag: ${{ inputs.ide_images_tag }}
execution_mode: ${{ inputs.execution_mode || 'self-hosted-buildkit' }}
helm_chart_tag: ${{ inputs.helm_chart_tag || '' }}
clean_install: ${{ github.event_name == 'workflow_dispatch' && (inputs.clean_install || false) }}
deploy_shared_gateway: false
shared_gateway_values_file: deployments/shared-gateway/values.yaml
shared_gateway_namespace: gateway-system
Expand All @@ -102,6 +109,7 @@ jobs:
ide_images_tag: ${{ inputs.ide_images_tag }}
execution_mode: ${{ inputs.execution_mode || 'self-hosted-buildkit' }}
helm_chart_tag: ${{ inputs.helm_chart_tag || '' }}
clean_install: ${{ github.event_name == 'workflow_dispatch' && (inputs.clean_install || false) }}
deploy_shared_gateway: false
shared_gateway_values_file: deployments/shared-gateway/values.yaml
shared_gateway_namespace: gateway-system
Expand Down
39 changes: 39 additions & 0 deletions .github/workflows/deploy-theia.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,11 @@ on:
required: false
type: string
default: "self-hosted-buildkit"
clean_install:
description: "If true, perform namespace-scoped cleanup before Helm install"
required: false
type: boolean
default: false

jobs:
helm-install:
Expand Down Expand Up @@ -250,6 +255,7 @@ jobs:
env:
KUBECONFIG: ${{ github.workspace }}/kubeconfig
run: |
set -euo pipefail

# Install cluster-wide monitoring (PodMonitors + Grafana Dashboards)
# This is installed once per cluster, not per environment
Expand All @@ -276,6 +282,39 @@ jobs:
--set wildcardTLSSecret.certificate="$(cat shared-gateway-wildcard.crt)" \
--set wildcardTLSSecret.key="$(cat shared-gateway-wildcard.key)"

- name: Clean install - namespace-scoped resource purge
if: inputs.clean_install && github.event_name == 'workflow_dispatch'
env:
KUBECONFIG: ${{ github.workspace }}/kubeconfig
run: |
set -euo pipefail

NAMESPACE="${{ vars.NAMESPACE }}"
Copy link

Copilot AI Mar 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The clean-install purge step runs destructive kubectl delete ... --all commands based on NAMESPACE="${{ vars.NAMESPACE }}", but it doesn’t validate that vars.NAMESPACE is set/non-empty before executing. Add an explicit guard (fail fast) to prevent accidental deletes against the wrong namespace (or a kubectl default) if the environment variable is misconfigured.

Suggested change
NAMESPACE="${{ vars.NAMESPACE }}"
NAMESPACE="${{ vars.NAMESPACE }}"
if [ -z "$NAMESPACE" ]; then
echo "ERROR: NAMESPACE is not set or is empty. Aborting clean install purge to avoid deleting resources in an unintended namespace." >&2
exit 1
fi
echo "Running clean install purge for namespace: $NAMESPACE"

Copilot uses AI. Check for mistakes.

# Delete active session resources first if these CRDs exist
RESOURCE_LIST="$(kubectl api-resources --namespaced=true -o name)"
while IFS= read -r resource; do
if echo "$resource" | grep -Eq '^sessions(\.|$)|^session(\.|$)|^workspaces(\.|$)|^workspace(\.|$)'; then
kubectl delete "$resource" --all -n "$NAMESPACE" --ignore-not-found=true || true
fi
done <<< "$RESOURCE_LIST"

# Delete AppDefinitions for a full clean slate
kubectl delete appdefinitions --all -n "$NAMESPACE" --ignore-not-found=true

# Delete namespace workloads
kubectl delete deployments --all -n "$NAMESPACE" --ignore-not-found=true
Comment on lines +292 to +318
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This step performs destructive deletes based on NAMESPACE="${{ vars.NAMESPACE }}" but doesn’t validate that the namespace is non-empty / expected. With set -euo pipefail, a misconfigured or empty namespace could lead to deleting resources in the runner’s default namespace. Add an explicit safety check (e.g., fail fast if NAMESPACE is empty or equals default, and echo the namespace before deleting).

Copilot uses AI. Check for mistakes.
kubectl delete daemonsets --all -n "$NAMESPACE" --ignore-not-found=true
kubectl delete statefulsets --all -n "$NAMESPACE" --ignore-not-found=true

# Wait until workload pods terminate (best effort)
kubectl wait --for=delete pod --all -n "$NAMESPACE" --timeout=120s || true

# Delete PVCs associated with this namespace
kubectl delete pvc --all -n "$NAMESPACE" --ignore-not-found=true

echo "Clean install purge complete. Proceeding to Helm install."

# 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 }}
Expand Down
47 changes: 24 additions & 23 deletions deployments/test3.theia-test.artemis.cit.tum.de/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,37 +43,32 @@ theia-cloud:
interval: 3

operator:
image: ghcr.io/eduide/eduide-cloud/operator:pr-70
#eagerStart: false
image: ghcr.io/eduide/eduide-cloud/operator:pr-101
eagerStart: false
replicas: 1
sessionsPerUser: 10
Comment on lines 45 to 49
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR description says test3 values should remain unchanged except disabling Keycloak, but this file also updates operator/service image tags, the preloading image set, and appdefinitions (defaultImageTag/maxInstances/new app). Either update the PR description to match the actual scope or split these unrelated changes into separate PRs.

Copilot uses AI. Check for mistakes.
# Test3 runs on the parma cluster where Longhorn is the default storage backend.
Copy link

Copilot AI Mar 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR description says test3 should only disable Keycloak and keep other values unchanged, but this hunk also changes operator image/tag and eagerStart (and further down other settings too). Please either update the PR description/scope (or split into separate PRs) or revert unrelated test3 config changes so the intent is clear and reviewable.

Copilot uses AI. Check for mistakes.
Copy link

Copilot AI Mar 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment says Test3 uses Longhorn as the default storage backend, but storageClassName is set to csi-rbd-sc. Either update the comment to match the new backend, or revert storageClassName to longhorn if that’s still the correct class for the parma cluster.

Suggested change
# Test3 runs on the parma cluster where Longhorn is the default storage backend.
# Test3 runs on the parma cluster using the csi-rbd-sc storage class.

Copilot uses AI. Check for mistakes.
storageClassName: longhorn
storageClassName: csi-rbd-sc
resources:
requests:
ephemeral-storage: "128Mi"
limits:
ephemeral-storage: "256Mi"

service:
image: ghcr.io/eduide/eduide-cloud/service:pr-70
image: ghcr.io/eduide/eduide-cloud/service:pr-101
adminApiTokenSecret:
Comment on lines 45 to 60
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR description says only Keycloak should be disabled and all other test3 values kept unchanged, but this file also updates operator/service images, landing page image/tagging, preloading images, defaultImageTag, labels, and adds an app definition. Either narrow the changes to match the PR intent or update the PR description to reflect these additional changes (and why they’re required for benchmark runs).

Copilot uses AI. Check for mistakes.
name: service-admin-api-token
key: ADMIN_API_TOKEN

preloading:
images:
- ghcr.io/eduide/eduide-cloud/landing-page:pr-70
- ghcr.io/eduide/eduide/java-17:latest
- ghcr.io/eduide/eduide/c:latest
- ghcr.io/eduide/eduide/javascript:latest
- ghcr.io/eduide/eduide/ocaml:latest
- ghcr.io/eduide/eduide/rust:latest
- ghcr.io/eduide/eduide/python:latest
- ghcr.io/eduide/eduide/java-17-no-ls:pr-70
- ghcr.io/eduide/eduide/rust-no-ls:pr-70
- ghcr.io/eduide/eduide/langserver-java:pr-70
- ghcr.io/eduide/eduide/langserver-rust:pr-70
- ghcr.io/eduide/eduide/java-17:pr-131
- ghcr.io/eduide/eduide/rust:pr-131
- ghcr.io/eduide/eduide/java-17-no-ls:pr-131
- ghcr.io/eduide/eduide/rust-no-ls:pr-131
- ghcr.io/eduide/eduide/langserver-java:pr-131
- ghcr.io/eduide/eduide/langserver-rust:pr-131

imagePullPolicy: Always

Expand All @@ -83,7 +78,7 @@ theia-cloud:

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/eduide/eduide-cloud/landing-page:pr-70
image: ghcr.io/eduide/eduidec-landing-page:latest
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

landingPage.image is set to :latest, which makes the test3 landing page (and benchmark entrypoint) non-deterministic across runs. If the goal is deterministic benchmark runs, consider pinning this to an immutable tag (or digest) that matches the benchmark baseline.

Suggested change
image: ghcr.io/eduide/eduidec-landing-page:latest
image: ghcr.io/eduide/eduidec-landing-page:pr-131

Copilot uses AI. Check for mistakes.
# We can define a default blueprint

# 1. The actual image data (Must be a Base64 encoded string)
Expand All @@ -94,12 +89,12 @@ theia-cloud:
# you might need this. If you used my simplified template, this is ignored.
logoFileExtension: "png"
appDefinition: "java-17-no-ls"
ephemeralStorage: true
ephemeralStorage: false
additionalApps:
java-17-no-ls:
label: Java 17 No-LS (Sidecar)
label: Java 17 No-LS
rust-no-ls:
label: Rust No-LS (Sidecar)
label: Rust No-LS
infoTitle: "🚀 Welcome to Test3 IDE Environment"
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..."
Expand All @@ -119,7 +114,7 @@ theia-cloud:
url: "https://aet.cit.tum.de/"

keycloak:
enable: true
enable: false
Comment on lines 120 to +121
Copy link

Copilot AI Mar 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR description/title says only Keycloak should be disabled for test3 while keeping other test3 values unchanged, but this file also changes multiple unrelated settings (e.g., preloading image tags, landingPage image/tag, appdefinitions defaultImageTag and adds a new app). Either revert the unrelated changes or update the PR description/scope accordingly so reviewers know what is intended to change for benchmark runs.

Copilot uses AI. Check for mistakes.
Comment on lines 118 to +121
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR description says the only functional change for test3 is disabling Keycloak and otherwise keeping values unchanged, but this file also changes operator/service image tags, preload image list, landing page image, ephemeralStorage, app labels, and appdefinitions scaling/app list. If those are unintended, it would be safer to revert them; if intended, the PR description should be updated to match the actual scope.

Copilot uses AI. Check for mistakes.
Comment on lines 118 to +121
Copy link

Copilot AI Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR description says only Keycloak should be disabled for test3 and all other test3 values kept unchanged, but this file also changes operator/service image tags, eagerStart, preloading image list, landingPage ephemeralStorage, and appdefinition scaling/default tags. Please either narrow the diff to only the Keycloak toggle, or update the PR description (and ideally split into separate PRs) so reviewers can validate the additional behavioral/operational changes explicitly.

Copilot uses AI. Check for mistakes.

# -- Key cloak auth URL. Only has to be specified when enable: true
authUrl: "https://keycloak.ase.in.tum.de/"
Expand All @@ -131,20 +126,26 @@ theia-cloud:
clientId: "theia-test"

theia-appdefinitions:
defaultImageTag: pr-70
defaultImageTag: pr-131
apps:
- name: java-17-no-ls
image: ghcr.io/eduide/eduide/java-17-no-ls
minInstances: 1
minInstances: 3
maxInstances: 20
sidecars:
Comment on lines 135 to 139
Copy link

Copilot AI Apr 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

theia-appdefinitions scaling defaults are changed significantly here (e.g., minInstances: 5 / maxInstances: 200). Even though the chart preserves live scaling after initial creation, these values still affect new/clean installs and can materially increase resource usage in test3. If the intent is only unauthenticated access for benchmarks, consider reverting these scaling/appdefinition changes or documenting why they’re required.

Copilot uses AI. Check for mistakes.
- name: langserver
image: ghcr.io/eduide/eduide/langserver-java
port: 5000
languages: [java]
mountWorkspace: true
- name: java-17-latest
image: ghcr.io/eduide/eduide/java-17
minInstances: 3
maxInstances: 20
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The theia-appdefinitions chart preserves existing AppDefinition minInstances/maxInstances from the live resource (via lookup) on subsequent Helm upgrades, so increasing these values here won’t take effect in an already-deployed namespace unless the AppDefinition resources are deleted first (or you run a clean install that removes them). If the intent is to change scaling for an existing test3 install, you may need to pair this change with an explicit AppDefinition purge/uninstall step.

Copilot uses AI. Check for mistakes.
- name: rust-no-ls
image: ghcr.io/eduide/eduide/rust-no-ls
minInstances: 1
minInstances: 3
maxInstances: 20
sidecars:
- name: langserver
image: ghcr.io/eduide/eduide/langserver-rust
Expand Down
17 changes: 10 additions & 7 deletions deployments/theia.artemis.cit.tum.de/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,20 @@ theia-cloud:
interval: 3

operator:
#image: ghcr.io/eduide/eduide-cloud/operator:latest
#eagerStart: false
image: ghcr.io/eduide/eduide-cloud/operator:latest-ba732d8
# Production keeps Ceph RBD and does not configure sidecars.
# Disable eager-start so the operator stays on the workspace-backed RWO path
# instead of creating prewarmed RWX PVCs that do not fit csi-rbd-sc.
eagerStart: false
Copy link

Copilot AI Mar 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR is scoped (per title/description) to disabling Keycloak on test3, but this file also pins production operator/service images and enables the service: block. Please update the PR description to reflect these additional production deployment changes, or move them into a separate PR to reduce rollout risk.

Copilot uses AI. Check for mistakes.
replicas: 3
Comment on lines 44 to 50
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR description indicates only a test3 Keycloak toggle, but this production values file now enables operator.eagerStart: false (previously commented). Please update the PR description/scope or split this change, since it affects production behavior and deserves separate review/rollout planning.

Copilot uses AI. Check for mistakes.
sessionsPerUser: 10
storageClassName: csi-rbd-sc

# service:
# image: ghcr.io/eduide/eduide-cloud/service:latest
# adminApiTokenSecret:
# name: service-admin-api-token
# key: ADMIN_API_TOKEN
service:
image: ghcr.io/eduide/eduide-cloud/service:latest-ba732d8
adminApiTokenSecret:
name: service-admin-api-token
key: ADMIN_API_TOKEN

preloading:
images:
Expand Down
Loading