Skip to content

fix(test3): point landing page image to eduidec repository#83

Closed
CodeByNikolas wants to merge 45 commits intomainfrom
chore/update-landing-image-path-all-envs
Closed

fix(test3): point landing page image to eduidec repository#83
CodeByNikolas wants to merge 45 commits intomainfrom
chore/update-landing-image-path-all-envs

Conversation

@CodeByNikolas
Copy link
Copy Markdown
Contributor

@CodeByNikolas CodeByNikolas commented Mar 22, 2026

Summary

  • update test3 landing page image from ghcr.io/eduide/eduide-cloud/landing-page:latest to ghcr.io/eduide/eduidec-landing-page:latest
  • align test3 with the new Landing-Page CI image repository path after landing PR merge

Why

The landing-page repository now builds/pushes images under eduide/eduidec-landing-page. test3 still referenced the old eduide-cloud/landing-page path and would not pick up new landing fixes.

Summary by CodeRabbit

  • New Features

    • Added manual clean_install option for deployments that conditionally purges resources before installation/upgrade.
  • Chores

    • Updated test environment container images and preloading configurations.
    • Disabled authentication services in test environment.
    • Updated app definitions and resource scaling parameters.

CodeByNikolas and others added 30 commits February 5, 2026 11:09
- Update test3 deployment to use ghcr.io/ls1intum/edutheia-landing-page
- Add landing_page_tag input parameter to deployment workflows
- Separate landing page versioning from theia-cloud components
- Update preloading configuration for new landing page image
Update chart dependency to version 1.3.0-next.4 which includes the footerLinks feature.
This enables footer link customization in the landing page ConfigMap.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…ate landing page image to ghcr.io/EduIDE/eduidec-landing-page
- operator/service: ghcr.io/eduide/eduide-cloud/{operator,service} (from EduIDE-Cloud repo)
- landing page: ghcr.io/EduIDE/eduidec-landing-page (from EduIDE-Landing-Page repo)
- IDE images (java-17, c, rust, etc.): ghcr.io/eduide/eduide/... (from EduIDE repo) - unchanged
Copilot AI review requested due to automatic review settings March 22, 2026 13:24
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 22, 2026

📝 Walkthrough

Walkthrough

This PR adds a clean_install workflow input to conditionally purge Kubernetes resources before deployment. The deploy-pr.yml workflow now accepts a manual clean_install flag, passing it to the reusable deploy-theia.yml workflow for each test environment job. Additionally, the test3 environment values file is updated with new image tags, reduced preload set, disabled Keycloak, and adjusted app definition configurations.

Changes

Cohort / File(s) Summary
GitHub Actions Workflows
.github/workflows/deploy-pr.yml, .github/workflows/deploy-theia.yml
Added clean_install boolean input to both workflows. deploy-pr.yml exposes the input on manual dispatch and propagates it to test environment jobs. deploy-theia.yml implements conditional namespace-scoped resource purge (sessions, workspaces, appdefintions, workloads, PVCs) when clean_install is enabled, with stricter shell error handling via set -euo pipefail.
Test3 Environment Configuration
deployments/test3.theia-test.artemis.cit.tum.de/values.yaml
Updated Theia Cloud operator and service images from pr-70 to pr-100. Reduced preload image set from multiple PR variants to 6 pinned pr-130 images. Updated landing page image to eduidec-landing-page:latest. Disabled Keycloak authentication. Changed defaultImageTag to pr-130 and added new java-17-latest app definition with scaling parameters (minInstances: 3, maxInstances: 20). Set ephemeralStorage to false.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

ready to merge

Suggested reviewers

  • lukaskratzel
  • Mtze

Poem

🐰 With a hop and a skip through the workflows so grand,
Clean installs now flourish across every land!
Namespaces purged, Keycloak set free,
Images tagged fresh at pr-one-three-oh-three!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title focuses on landing page image repository change, but the PR also adds workflow inputs, purge logic, and updates multiple configuration values beyond just the image path. Consider a more comprehensive title that reflects the main changes: workflow dispatch inputs, namespace cleanup logic, and configuration updates to test3 values file.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

Important

Merge conflicts detected (Beta)

  • Resolve merge conflict in branch chore/update-landing-image-path-all-envs
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/update-landing-image-path-all-envs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Updates the Test3 environment configuration and deployment workflows, primarily to align the landing page image repository with the new ghcr.io/eduide/eduidec-landing-page location and to introduce an optional “clean install” deployment mode.

Changes:

  • Update test3 landing page image to ghcr.io/eduide/eduidec-landing-page:latest and adjust several other Test3 Helm values.
  • Add a clean_install input to deployment workflows and a namespace-scoped purge step before Helm install.
  • Add stricter shell failure behavior (set -euo pipefail) to the cluster-wide monitoring install step.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.

File Description
deployments/test3.theia-test.artemis.cit.tum.de/values.yaml Updates Test3 landing page image repo, but also changes preloading list ordering/content and other environment settings.
.github/workflows/deploy-theia.yml Adds clean_install input and a namespace purge step; also adds set -euo pipefail to monitoring step.
.github/workflows/deploy-pr.yml Exposes and forwards clean_install from manual dispatch to the reusable deploy workflow.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

key: ADMIN_API_TOKEN

preloading:
images:
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.

theia-cloud.preloading.images no longer includes the landing page image as the first entry. This repo’s deploy workflow assumes preloading.images[0] is the landing page (and overrides indices 1..10 for IDE images), so removing it will break tag overrides and can shift/incorrectly override preload images. Add ghcr.io/eduide/eduidec-landing-page:... back as images[0] (and keep the expected ordering) or update the deploy workflow to not rely on fixed indices for this environment.

Suggested change
images:
images:
- ghcr.io/eduide/eduidec-landing-page:pr-100

Copilot uses AI. Check for mistakes.
@@ -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
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 comment says “does not support mutliple apps” — “mutliple” is misspelled. Please correct it to “multiple”.

Suggested change
# 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

Copilot uses AI. Check for mistakes.
Comment on lines 45 to 60
@@ -56,24 +56,19 @@ theia-cloud:
ephemeral-storage: "256Mi"

service:
image: ghcr.io/eduide/eduide-cloud/service:pr-70
image: ghcr.io/eduide/eduide-cloud/service:pr-100
adminApiTokenSecret:
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 PR is described as only updating the test3 landing page image repository, but this file also changes operator/service tags, preloading images/tags, Keycloak enablement, AppDefinition scaling, and other landing page settings. Please either update the PR title/description to reflect the broader scope or split these unrelated changes into separate PRs to keep review and rollout risk manageable.

Copilot uses AI. Check for mistakes.
--set wildcardTLSSecret.key="$(cat shared-gateway-wildcard.key)"

- name: Clean install - namespace-scoped resource purge
if: inputs.clean_install && github.event_name == 'workflow_dispatch'
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 clean-install purge step will never run in this reusable workflow: when deploy-theia.yml is invoked via workflow_call, github.event_name is workflow_call, not workflow_dispatch, so this if: condition is always false. Rely on inputs.clean_install alone (the caller already gates it to manual dispatch) or pass an explicit “triggered_by_dispatch” input if you need extra protection.

Suggested change
if: inputs.clean_install && github.event_name == 'workflow_dispatch'
if: inputs.clean_install

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (4)
deployments/test3.theia-test.artemis.cit.tum.de/values.yaml (2)

141-144: java-17-latest lacks sidecars - is this intentional?

The new java-17-latest app definition uses the full IDE image (java-17) without any sidecar configuration, while java-17-no-ls and rust-no-ls have langserver sidecars. This appears to be the "monolithic" IDE variant vs. the sidecar architecture variant.

Consider adding a brief comment above this app definition to clarify that it intentionally runs without a separate language server sidecar.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@deployments/test3.theia-test.artemis.cit.tum.de/values.yaml` around lines 141
- 144, Add a short clarifying comment above the java-17-latest app definition to
state that this entry is the monolithic IDE image and intentionally does not
include a language-server sidecar (unlike java-17-no-ls and rust-no-ls); update
the comment near the block containing "name: java-17-latest" so reviewers know
the omission of sidecars is deliberate.

116-126: Consider adding a comment explaining why Keycloak is disabled in test3.

Keycloak configuration diverges across test environments: test1 and test2 both enable Keycloak with realm "Test" and clientId "theia-test", while test3 disables it with empty credentials. This appears intentional for an unauthenticated test environment, but adding an inline comment would clarify this design decision for future maintainers.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@deployments/test3.theia-test.artemis.cit.tum.de/values.yaml` around lines 116
- 126, Add an inline comment near the keycloak block explaining why Keycloak is
disabled for this environment (keycloak.enable: false) and that authUrl, realm,
and clientId are left empty intentionally for an unauthenticated test
environment; reference the keycloak keys (enable, authUrl, realm, clientId) and
note that test1/test2 use realm "Test" and clientId "theia-test" so maintainers
understand the divergence and when to populate those fields if Keycloak is
re-enabled.
.github/workflows/deploy-theia.yml (2)

296-300: Minor: Consider using kubectl api-resources filtering directly.

The current approach fetches all namespaced resources then filters with grep. You could simplify by targeting known CRD names directly if they're stable.

💡 Alternative: Target known CRDs directly
# If the CRD names are known and stable, target them directly:
for kind in sessions workspaces; do
  kubectl delete "$kind" --all -n "$NAMESPACE" --ignore-not-found=true || true
done
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/deploy-theia.yml around lines 296 - 300, Replace the
generic read-and-grep loop that iterates over RESOURCE_LIST with a targeted
deletion loop that iterates the known CRD kinds (e.g., "sessions" and
"workspaces") and calls kubectl delete for each kind in the NAMESPACE;
specifically, remove the while IFS= read -r resource; ... done <<<
"$RESOURCE_LIST" block and implement a simple loop over the stable kinds that
invokes kubectl delete --all -n "$NAMESPACE" --ignore-not-found=true (keeping
the || true behavior) so you directly target CRDs instead of filtering all
namespaced resources.

285-316: Review the clean install purge step for safety and completeness.

The implementation has good safeguards:

  • Double-gated condition (inputs.clean_install && github.event_name == 'workflow_dispatch')
  • Uses --ignore-not-found=true to avoid failures on missing resources
  • Proper ordering: sessions → appdefinitions → workloads → wait → PVCs

A few observations:

  1. Regex pattern may be fragile: The grep pattern ^sessions(\.|$)|^session(\.|$)|... matches resource names starting with "session" or "workspace", but CRD names could vary (e.g., theia.cloud/sessions vs sessions.theia.cloud).

  2. Consider logging what's being deleted: For audit purposes, listing resources before deletion would help troubleshoot issues.

  3. 120s timeout may be insufficient: For environments with many pods, termination could take longer.

🔍 Optional: Add resource listing before deletion for audit trail
          # 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
+             echo "Deleting $resource resources in $NAMESPACE..."
+             kubectl get "$resource" -n "$NAMESPACE" --no-headers 2>/dev/null || true
              kubectl delete "$resource" --all -n "$NAMESPACE" --ignore-not-found=true || true
            fi
          done <<< "$RESOURCE_LIST"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/deploy-theia.yml around lines 285 - 316, The
session/workspace resource purge uses a fragile grep pattern and lacks logging
and configurability: update the RESOURCE_LIST filtering to robustly match CRD
short-names and namespaced API resources that contain "session" or "workspace"
either as the short name or the resource name (handle forms like
"sessions.theia.cloud" and "theia.cloud/sessions") by extracting both the name
and the API name from kubectl api-resources output and matching on either field
(refer to RESOURCE_LIST and the grep/filter logic in the loop), add a
pre-deletion echo or log of the exact resources that will be deleted for audit,
and replace the hard-coded kubectl wait --for=delete pod --all -n "$NAMESPACE"
--timeout=120s with a configurable timeout variable (e.g., CLEAN_WAIT_TIMEOUT)
defaulting to a larger value so environments with many pods have more time.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In @.github/workflows/deploy-theia.yml:
- Around line 296-300: Replace the generic read-and-grep loop that iterates over
RESOURCE_LIST with a targeted deletion loop that iterates the known CRD kinds
(e.g., "sessions" and "workspaces") and calls kubectl delete for each kind in
the NAMESPACE; specifically, remove the while IFS= read -r resource; ... done
<<< "$RESOURCE_LIST" block and implement a simple loop over the stable kinds
that invokes kubectl delete --all -n "$NAMESPACE" --ignore-not-found=true
(keeping the || true behavior) so you directly target CRDs instead of filtering
all namespaced resources.
- Around line 285-316: The session/workspace resource purge uses a fragile grep
pattern and lacks logging and configurability: update the RESOURCE_LIST
filtering to robustly match CRD short-names and namespaced API resources that
contain "session" or "workspace" either as the short name or the resource name
(handle forms like "sessions.theia.cloud" and "theia.cloud/sessions") by
extracting both the name and the API name from kubectl api-resources output and
matching on either field (refer to RESOURCE_LIST and the grep/filter logic in
the loop), add a pre-deletion echo or log of the exact resources that will be
deleted for audit, and replace the hard-coded kubectl wait --for=delete pod
--all -n "$NAMESPACE" --timeout=120s with a configurable timeout variable (e.g.,
CLEAN_WAIT_TIMEOUT) defaulting to a larger value so environments with many pods
have more time.

In `@deployments/test3.theia-test.artemis.cit.tum.de/values.yaml`:
- Around line 141-144: Add a short clarifying comment above the java-17-latest
app definition to state that this entry is the monolithic IDE image and
intentionally does not include a language-server sidecar (unlike java-17-no-ls
and rust-no-ls); update the comment near the block containing "name:
java-17-latest" so reviewers know the omission of sidecars is deliberate.
- Around line 116-126: Add an inline comment near the keycloak block explaining
why Keycloak is disabled for this environment (keycloak.enable: false) and that
authUrl, realm, and clientId are left empty intentionally for an unauthenticated
test environment; reference the keycloak keys (enable, authUrl, realm, clientId)
and note that test1/test2 use realm "Test" and clientId "theia-test" so
maintainers understand the divergence and when to populate those fields if
Keycloak is re-enabled.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 23c7075a-52b7-40c0-b62d-bd3a099c7c0c

📥 Commits

Reviewing files that changed from the base of the PR and between 1aa421c and 4d5838d.

📒 Files selected for processing (3)
  • .github/workflows/deploy-pr.yml
  • .github/workflows/deploy-theia.yml
  • deployments/test3.theia-test.artemis.cit.tum.de/values.yaml

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants