From e70b7a236d30cbfc31993d3d212bb15271c1ba57 Mon Sep 17 00:00:00 2001 From: = Date: Mon, 30 Mar 2026 17:32:15 +0200 Subject: [PATCH 1/3] Add build system selection page --- package-lock.json | 4 +- public/assets/logos/gradle-logo.png | Bin 0 -> 28631 bytes public/assets/logos/maven-logo.png | Bin 0 -> 22262 bytes public/config.js | 31 +++++-- src/App.css | 14 +++ src/App.tsx | 124 ++++++++++++--------------- src/common-extensions/types.ts | 9 ++ src/components/SelectApp.tsx | 9 +- src/components/SelectBuildSystem.tsx | 35 ++++++++ 9 files changed, 145 insertions(+), 81 deletions(-) create mode 100644 public/assets/logos/gradle-logo.png create mode 100644 public/assets/logos/maven-logo.png create mode 100644 src/components/SelectBuildSystem.tsx diff --git a/package-lock.json b/package-lock.json index 36f535f..90da426 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "edutheia-landing-page", + "name": "eduidec-landing-page", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "edutheia-landing-page", + "name": "eduidec-landing-page", "version": "1.0.0", "license": "EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0", "dependencies": { diff --git a/public/assets/logos/gradle-logo.png b/public/assets/logos/gradle-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..47286aa3fdd10f0f4ddad51ea0ee813639ab97a4 GIT binary patch literal 28631 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 JW$GF8{{XMN0d@cY literal 0 HcmV?d00001 diff --git a/public/config.js b/public/config.js index 6cc106f..59d381a 100644 --- a/public/config.js +++ b/public/config.js @@ -11,27 +11,46 @@ window.theiaCloudConfig = { additionalApps: [ { appId: "c-latest", - appName: "C" + appName: "C", + buildSystems: [ + { id: "makefile", label: "Makefile"} + ] }, { appId: "java-17-latest", - appName: "Java" + appName: "Java", + buildSystems: [ + { id: "maven", label: "Maven" }, + { id: "gradle", label: "Gradle "}, + ] }, { appId: "javascript-latest", - appName: "Javascript" + appName: "Javascript", + buildSystems: [ + { id: "npm", label: "npm"} + ] }, { appId: "ocaml-latest", - appName: "Ocaml" + appName: "Ocaml", + buildSystems: [ + { id: "dune", label: "Dune"} + ] }, { appId: "python-latest", - appName: "Python" + appName: "Python", + buildSystems: [ + { id: "pip", label: "pip"} + ] }, { appId: "rust-latest", - appName: "Rust" + appName: "Rust", + buildSystems: [ + { id: "cargo", label: "Cargo"} + ] } ], disableInfo: true, diff --git a/src/App.css b/src/App.css index 8b5407d..12bf54c 100644 --- a/src/App.css +++ b/src/App.css @@ -141,6 +141,20 @@ margin: 0.5rem auto 1rem auto; } +.Build-System__list { + display: flex; + justify-content: center; + gap: 20px; + + max-width: 800px; + margin: 0.5rem auto 1rem auto; + padding: 24px; +} + +.Build-System__list > * { + flex: 0 1 150px; +} + .App__grid-item { background: var(--color-background-card); color: var(--color-text-primary); diff --git a/src/App.tsx b/src/App.tsx index f1f27b9..67dfcd0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -17,6 +17,7 @@ import { Loading } from './components/Loading'; import { LoginButton } from './components/LoginButton'; import { Privacy } from './components/Privacy'; import { SelectApp } from './components/SelectApp'; +import { SelectBuildSystem } from './components/SelectBuildSystem'; import { VantaBackground } from './components/VantaBackground'; // global state to be kept between render calls @@ -99,6 +100,9 @@ function App(): JSX.Element { const [autoStart, setAutoStart] = useState(false); + const [standaloneWizardStep, setStandaloneWizardStep] = useState<'language' | 'buildSystem'>('language'); + const [standaloneAppDef, setStandaloneAppDef] = useState(); + if (!initialized) { const urlParams = new URLSearchParams(window.location.search); @@ -215,34 +219,26 @@ function App(): JSX.Element { } const handleStartSession = useCallback( - (appDefinition: string): void => { + (appDefinition: string, buildSystemId?: string): void => { setLoading(true); setError(undefined); - // first check if the service is available. if not we are doing maintenance and should adapt the error message accordingly TheiaCloud.ping(PingRequest.create(config.serviceUrl, getServiceAuthToken(config))) .then(() => { - // ping successful continue with launch let workspace: string | undefined; if (config.useEphemeralStorage) { workspace = undefined; - console.log(`Launching ${appDefinition} with ephemeral storage as configured`); } else { if (!gitUri) { - const fallbackWorkspaceId = Math.random().toString(36).substring(2, 10); - workspace = - 'ws-' + appDefinition + '-playground-' + (config.useKeycloak ? username : user) + '-' + fallbackWorkspaceId; - console.log( - `Launching ${appDefinition} with persistent workspace ${workspace} (playground fallback)` - ); + if (buildSystemId) { + workspace = 'ws-' + appDefinition + '-standalone-' + (config.useKeycloak ? username : user); + } else { + workspace = undefined; + } } else { - // Artemis URLs look like: https://user@artemis.cit.tum.de/git/THEIATESTTESTEXERCISE/theiatesttestexercise-artemis_admin.git - // ^^^^^^^^^^^^^^^^^^^^^ we need this part - // First we split at the / character, get the last part, split at the - character and get the first part const repoName = gitUri?.split('/').pop()?.split('-')[0] ?? Math.random().toString().substring(2, 10); workspace = 'ws-' + appDefinition + '-' + repoName + '-' + (config.useKeycloak ? username : user); - console.log(`Launching ${appDefinition} with persistent workspace ${workspace}`); } } @@ -252,40 +248,18 @@ function App(): JSX.Element { accessToken: token }; - /* - const sessionStartRequest: SessionStartRequest = { - serviceUrl: config.serviceUrl, - appId: config.appId, - user: config.useKeycloak ? email! : user!, - appDefinition, - workspaceName: workspace, - timeout: 180, - env: { - fromMap: { - THEIA: 'true', - ARTEMIS_TOKEN: artemisToken!, - ARTEMIS_CLONE_URL: gitUri! - } - } - }; - - TheiaCloud.Session.startSession( - sessionStartRequest, - requestOptions - ).catch((err: Error) => { - if (err && (err as any).status === 473) { - setError( - `The app definition '${appDefinition}' is not available in the cluster.\n` + - 'Please try launching another application.' - ); - return; - } - setError(err.message); - }) - .finally(() => { - setLoading(false); - }); - */ + const envFromMap: Record = { + THEIA: 'true', + ARTEMIS_TOKEN: artemisToken!, + ARTEMIS_URL: artemisUrl!, + GIT_URI: gitUri!, + GIT_USER: gitUser!, + GIT_MAIL: gitMail! + }; + if (buildSystemId) { + envFromMap.STANDALONE_MODE = 'true'; + envFromMap.BUILD_SYSTEM = buildSystemId; + } const launchRequest = { serviceUrl: config.serviceUrl, @@ -294,24 +268,10 @@ function App(): JSX.Element { appDefinition: appDefinition, workspaceName: workspace, env: { - fromMap: { - THEIA: 'true', - ARTEMIS_TOKEN: artemisToken!, - ARTEMIS_URL: artemisUrl!, - GIT_URI: gitUri!, - GIT_USER: gitUser!, - GIT_MAIL: gitMail! - } + fromMap: envFromMap } } satisfies LaunchRequest; - // TheiaCloud.launchAndRedirect( - // config.useEphemeralStorage - // ? LaunchRequest.ephemeral(config.serviceUrl, config.appId, appDefinition, 5, email) - // : LaunchRequest.createWorkspace(config.serviceUrl, config.appId, appDefinition, 5, email, workspace), - - // TheiaCloud.Session.list - TheiaCloud.launchAndRedirect(launchRequest, requestOptions) .catch((err: Error) => { if (err && (err as any).status === 473) { @@ -338,6 +298,22 @@ function App(): JSX.Element { [config, gitUri, username, user, token, artemisToken, artemisUrl, gitUser, gitMail, email] ); + const handleAppSelected = (appId: string, appName: string): void => { + const isStandaloneMode = !artemisToken && !gitUri; + if (isStandaloneMode) { + const appDef = config.additionalApps?.find(a => (a.serviceAuthToken || a.appId) === appId); + const buildSystems = appDef?.buildSystems ?? []; + if (buildSystems.length <= 1) { + handleStartSession(appId, buildSystems[0]?.id ?? 'none'); + } else { + setStandaloneAppDef(appId); + setStandaloneWizardStep('buildSystem'); + } + } else { + handleStartSession(appId); + } + }; + useEffect(() => { if (!initialized) { return; @@ -362,20 +338,20 @@ function App(): JSX.Element { const authenticate: () => void = (): void => { const keycloak = new Keycloak(keycloakConfig); + const redirectUri = window.location.origin + window.location.pathname + window.location.search; keycloak .init({ - redirectUri: window.location.origin + window.location.pathname, + redirectUri, checkLoginIframe: false }) .then((authenticated: boolean) => { if (!authenticated) { keycloak.login({ - redirectUri: window.location.origin + window.location.pathname, + redirectUri, action: 'webauthn-register-passwordless:skip_if_exists' }); } else { - // If we are already authenticated (e.g. session existed but UI wasn't updated), update state const parsedToken = keycloak.idTokenParsed; if (parsedToken) { const userMail = parsedToken.email; @@ -395,7 +371,6 @@ function App(): JSX.Element { const needsLogin = config.useKeycloak && !token; const logoFileExtension = config.logoFileExtension ?? 'svg'; - // Render different pages based on currentPage state if (currentPage === 'imprint') { return (
@@ -416,6 +391,9 @@ function App(): JSX.Element { ); } + const standaloneAppBuildSystems = + config.additionalApps?.find(a => (a.serviceAuthToken || a.appId) === standaloneAppDef)?.buildSystems ?? []; + return (
@@ -432,7 +410,9 @@ function App(): JSX.Element {
-

Choose your Online IDE

+

+ {standaloneWizardStep === 'buildSystem' ? 'Choose your build system' : 'Choose your Online IDE'} +

{needsLogin ? ( @@ -442,8 +422,14 @@ function App(): JSX.Element { appDefinition={selectedAppDefinition} onStartSession={handleStartSession} /> + ) : standaloneWizardStep === 'buildSystem' ? ( + handleStartSession(standaloneAppDef!, buildSystemId)} + onBack={() => setStandaloneWizardStep('language')} + /> ) : ( - + )}
diff --git a/src/common-extensions/types.ts b/src/common-extensions/types.ts index 7ecc899..00b09e5 100644 --- a/src/common-extensions/types.ts +++ b/src/common-extensions/types.ts @@ -34,12 +34,21 @@ export interface FooterLinksConfig { }; } +/** + * A single build system option for a language app + */ +export interface BuildSystemOption { + id: string; + label: string; +} + /** * Extended AppDefinition with service authentication token * Bridges the gap between the package's ServiceConfig and legacy usage */ export type ExtendedAppDefinition = AppDefinition & { serviceAuthToken?: string; + buildSystems?: BuildSystemOption[] }; /** diff --git a/src/components/SelectApp.tsx b/src/components/SelectApp.tsx index 9b24f22..08e8be2 100644 --- a/src/components/SelectApp.tsx +++ b/src/components/SelectApp.tsx @@ -1,17 +1,18 @@ +import React from 'react'; import type { ExtendedAppDefinition } from '../common-extensions/types'; interface SelectAppProps { appDefinitions: ExtendedAppDefinition[] | undefined; - onStartSession: (appDefinition: string) => void; + onSelectApp: (appId: string, appName: string) => void; } -export const SelectApp: React.FC = ({ appDefinitions, onStartSession }: SelectAppProps) => ( +export const SelectApp: React.FC = ({ appDefinitions, onSelectApp }: SelectAppProps) => (
{appDefinitions && appDefinitions.map((app, index) => ( ))} diff --git a/src/components/SelectBuildSystem.tsx b/src/components/SelectBuildSystem.tsx new file mode 100644 index 0000000..ea41afa --- /dev/null +++ b/src/components/SelectBuildSystem.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import type { BuildSystemOption } from '../common-extensions/types'; + +interface SelectBuildSystemProps { + buildSystems: BuildSystemOption[]; + onSelect: (buildSystemId: string) => void; + onBack: () => void; +} + +export const SelectBuildSystem: React.FC = ({ buildSystems, onSelect, onBack }) => ( +
+
+ {buildSystems.map((option, index) => ( + + ))} + +
+ +
+); From b2943a39c1e57658b3f656c6a37635edb50b8ef4 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 31 Mar 2026 18:06:51 +0200 Subject: [PATCH 2/3] send buildsystem, and fix logo --- public/config.js | 1 + src/App.tsx | 11 +---------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/public/config.js b/public/config.js index 59d381a..5708e4d 100644 --- a/public/config.js +++ b/public/config.js @@ -19,6 +19,7 @@ window.theiaCloudConfig = { { appId: "java-17-latest", appName: "Java", + image: "java-17", buildSystems: [ { id: "maven", label: "Maven" }, { id: "gradle", label: "Gradle "}, diff --git a/src/App.tsx b/src/App.tsx index 966353d..0684345 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -299,16 +299,7 @@ function App(): JSX.Element { envFromMap.BUILD_SYSTEM = buildSystemId; } - const launchEnv = { - fromMap: { - THEIA: 'true', - ARTEMIS_TOKEN: artemisToken!, - ARTEMIS_URL: artemisUrl!, - GIT_URI: gitUri!, - GIT_USER: gitUser!, - GIT_MAIL: gitMail! - } - }; + const launchEnv = { fromMap: envFromMap }; const launchUser = config.useKeycloak ? email! : user!; const serviceAuthToken = getServiceAuthToken(config); const createWorkspaceLaunchRequest = (): LaunchRequest => ({ From 0d0b3129e9e8b31b0f4e90d70257e56e4f7b2a0d Mon Sep 17 00:00:00 2001 From: = Date: Tue, 31 Mar 2026 18:11:06 +0200 Subject: [PATCH 3/3] remove unused var --- Dockerfile | 2 +- src/App.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 98e3469..7bc1e68 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ COPY public ./public # Build application RUN npm run build && \ - chmod 644 /app/dist/favicon.ico || true + (chmod 644 /app/dist/favicon.ico || true) # Production stage FROM nginx:stable-alpine AS production diff --git a/src/App.tsx b/src/App.tsx index 0684345..5260af3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -389,7 +389,7 @@ function App(): JSX.Element { [config, gitUri, username, user, token, artemisToken, artemisUrl, gitUser, gitMail, email] ); - const handleAppSelected = (appId: string, appName: string): void => { + const handleAppSelected = (appId: string, _: string): void => { const isStandaloneMode = !artemisToken && !gitUri; if (isStandaloneMode) { const appDef = config.additionalApps?.find(a => (a.serviceAuthToken || a.appId) === appId);