From 887d1ec839992a2633b221f486ac1d7b327b391c Mon Sep 17 00:00:00 2001 From: Cas Lubbers Date: Tue, 10 Feb 2026 10:35:49 +0100 Subject: [PATCH 1/3] feat: make Gitea optional --- .../builds/create-edit/BuildsCreateEditPage.tsx | 12 +++++++++--- .../CodeRepositoriesCreateEditPage.tsx | 17 +++++++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/pages/builds/create-edit/BuildsCreateEditPage.tsx b/src/pages/builds/create-edit/BuildsCreateEditPage.tsx index 34ef513a..2d13160a 100644 --- a/src/pages/builds/create-edit/BuildsCreateEditPage.tsx +++ b/src/pages/builds/create-edit/BuildsCreateEditPage.tsx @@ -60,6 +60,7 @@ export default function BuildsCreateEditPage({ settings: { cluster: { domainSuffix }, }, + appsEnabled, } = useSession() const options = [ @@ -86,6 +87,11 @@ export default function BuildsCreateEditPage({ { skip: !repoName }, ) + const filteredCodeRepos = useMemo( + () => (codeRepos || []).filter((cr) => appsEnabled?.gitea || cr?.spec?.gitService !== 'gitea'), + [codeRepos, appsEnabled?.gitea], + ) + const isDirty = useAppSelector(({ global: { isDirty } }) => isDirty) useEffect(() => { if (isDirty !== false) return @@ -238,10 +244,10 @@ export default function BuildsCreateEditPage({ label='Repository' loading={isLoadingCodeRepos} - options={codeRepos || []} + options={filteredCodeRepos} getOptionLabel={(codeRepo) => codeRepo.metadata.name} placeholder='Select a repository' - value={(codeRepos || []).find((cr) => cr?.spec?.repositoryUrl === repoField.value) || null} + value={filteredCodeRepos.find((cr) => cr?.spec?.repositoryUrl === repoField.value) || null} onChange={(_e, repo) => { repoField.onChange(repo?.spec?.repositoryUrl ?? '') if (!repo) return @@ -350,7 +356,7 @@ export default function BuildsCreateEditPage({ Extra options - {gitService === 'gitea' && ( + {appsEnabled?.gitea && gitService === 'gitea' && ( (null) @@ -68,7 +69,7 @@ export default function CodeRepositoriesCreateEditPage({ const [gitProvider, setGitProvider] = useState<'gitea' | 'github' | 'gitlab' | null>(null) const options = [ - { value: 'gitea', label: 'Gitea', imgSrc: '/logos/gitea_logo.svg' }, + ...(appsEnabled?.gitea ? [{ value: 'gitea', label: 'Gitea', imgSrc: '/logos/gitea_logo.svg' }] : []), { value: 'github', label: 'GitHub', imgSrc: '/logos/github_logo.svg' }, { value: 'gitlab', label: 'GitLab', imgSrc: '/logos/gitlab_logo.svg' }, ] @@ -106,7 +107,7 @@ export default function CodeRepositoriesCreateEditPage({ isFetching: isFetchingRepoUrls, isError: isErrorRepoUrls, refetch: refetchRepoUrls, - } = useGetInternalRepoUrlsQuery({ teamId }, { skip: !gitProvider }) + } = useGetInternalRepoUrlsQuery({ teamId }, { skip: !gitProvider || !appsEnabled?.gitea }) const { data: testRepoConnect, isFetching: isFetchingTestRepoConnect } = useTestRepoConnectQuery( { url: testConnectUrl, teamId, secret: secretName }, @@ -132,7 +133,7 @@ export default function CodeRepositoriesCreateEditPage({ labels: { 'apl.io/teamId': teamId }, }, spec: { - gitService: 'gitea', + gitService: appsEnabled?.gitea ? 'gitea' : 'github', repositoryUrl: '', private: false, secret: undefined, @@ -179,11 +180,11 @@ export default function CodeRepositoriesCreateEditPage({ if (data) { reset(data) setGitProvider(watch('spec.gitService')) - } else setGitProvider('gitea') + } else setGitProvider(appsEnabled?.gitea ? 'gitea' : 'github') if (!isEmpty(prefilledData)) { reset(defaultValues) - setGitProvider(defaultValues.spec?.gitService ?? 'gitea') + setGitProvider(defaultValues.spec?.gitService ?? (appsEnabled?.gitea ? 'gitea' : 'github')) } }, [data, prefilledData, defaultValues, reset]) @@ -248,7 +249,11 @@ export default function CodeRepositoriesCreateEditPage({ if (!mutating && (isSuccessCreate || isSuccessUpdate || isSuccessDelete)) return - const loading = isLoading || isLoadingTeamSecrets || isLoadingRepoUrls || (codeRepositoryName && !internalRepoUrls) + const loading = + isLoading || + isLoadingTeamSecrets || + isLoadingRepoUrls || + (appsEnabled?.gitea && codeRepositoryName && !internalRepoUrls) const error = isError || isErrorTeamSecrets || isErrorRepoUrls if (loading) return From 6325f3758354fa1c8ca17f8821009eae138e6554 Mon Sep 17 00:00:00 2001 From: Cas Lubbers Date: Tue, 10 Feb 2026 16:44:22 +0100 Subject: [PATCH 2/3] fix: improve error handling for code repository loading state --- .../create-edit/CodeRepositoriesCreateEditPage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/code-repositories/create-edit/CodeRepositoriesCreateEditPage.tsx b/src/pages/code-repositories/create-edit/CodeRepositoriesCreateEditPage.tsx index 5a9577c1..1b5efe93 100644 --- a/src/pages/code-repositories/create-edit/CodeRepositoriesCreateEditPage.tsx +++ b/src/pages/code-repositories/create-edit/CodeRepositoriesCreateEditPage.tsx @@ -253,8 +253,8 @@ export default function CodeRepositoriesCreateEditPage({ isLoading || isLoadingTeamSecrets || isLoadingRepoUrls || - (appsEnabled?.gitea && codeRepositoryName && !internalRepoUrls) - const error = isError || isErrorTeamSecrets || isErrorRepoUrls + (appsEnabled?.gitea && codeRepositoryName && !internalRepoUrls && !isErrorRepoUrls) + const error = isError || isErrorTeamSecrets if (loading) return From 300633e33d2cdff11ab9132b05f0b04f84439710 Mon Sep 17 00:00:00 2001 From: Cas Lubbers Date: Thu, 12 Feb 2026 13:53:08 +0100 Subject: [PATCH 3/3] feat: update LinkCommit to use repoUrl from settings and refactor related components --- src/components/LinkCommit.tsx | 8 +++----- src/components/Versions.tsx | 9 ++------- src/redux/otomiApi.ts | 4 ++++ 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/components/LinkCommit.tsx b/src/components/LinkCommit.tsx index 3e689fc2..b9c6fdbf 100644 --- a/src/components/LinkCommit.tsx +++ b/src/components/LinkCommit.tsx @@ -3,23 +3,21 @@ import React from 'react' import { useTranslation } from 'react-i18next' interface LinkExtendedProps extends LinkProps { - domainSuffix?: string label?: string - repo?: string + repo: string sha: string short?: boolean } -export default function ({ domainSuffix, label, sha, short = true, ...props }: LinkExtendedProps): React.ReactElement { +export default function ({ label, repo, sha, short = true, ...props }: LinkExtendedProps): React.ReactElement { const { t } = useTranslation() // END HOOKS - const repo = props.repo ?? `https://gitea.${domainSuffix}/otomi/values` const href = props.href ?? `${repo.replace('.git', '')}/commit/${sha}` const shaShort = sha?.substring(0, 8) const children = props.children ?? short ? shaShort : sha const title = props.title ?? t(`Follow to view commit with sha {{sha}}`, { sha }) const color = props.color ?? 'secondary' - const insert = { ...props, children, color, href, repo, title } + const insert = { ...props, children, color, href, title } if (label) insert['data-cy'] = `link-commit-${label}` return ( diff --git a/src/components/Versions.tsx b/src/components/Versions.tsx index fe6b45ba..b023c282 100644 --- a/src/components/Versions.tsx +++ b/src/components/Versions.tsx @@ -32,12 +32,7 @@ function isRelease(version: any): boolean { } export default function (): React.ReactElement { - const { - settings: { - cluster: { domainSuffix }, - }, - versions, - } = useSession() + const { settings, versions } = useSession() const { classes } = useStyles() const { t } = useTranslation() const { data: k8sVersion } = useGetK8SVersionQuery() @@ -48,7 +43,7 @@ export default function (): React.ReactElement { [t('Otomi Core')]: versions.core, [t('Otomi API')]: versions.api, [t('Otomi Console')]: versions.console, - [t('Otomi Values')]: , + [t('Otomi Values')]: , } const version = /^\d/.test(clusterLegend['Otomi Core']) ? `v${clusterLegend['Otomi Core']}` diff --git a/src/redux/otomiApi.ts b/src/redux/otomiApi.ts index fa349a2e..252b0a6a 100644 --- a/src/redux/otomiApi.ts +++ b/src/redux/otomiApi.ts @@ -5576,6 +5576,10 @@ export type GetSettingsInfoApiResponse = /** status 200 The request is successfu isPreInstalled?: boolean aiEnabled?: boolean hasExternalIDP?: boolean + git?: { + repoUrl?: string + branch?: string + } } smtp?: { smarthost?: string