/* * SonarQube * Copyright (C) 2009-2024 SonarSource SA * mailto:info AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { Breadcrumbs, FlagMessage, GreyCard, HoverLink, LightLabel, LightPrimary, StandoutLink, SubTitle, Title, } from 'design-system'; import * as React from 'react'; import { AnalysisStatus } from '../../apps/overview/components/AnalysisStatus'; import { isMainBranch } from '../../helpers/branch-like'; import { translate } from '../../helpers/l10n'; import { getBaseUrl } from '../../helpers/system'; import { getProjectTutorialLocation } from '../../helpers/urls'; import { useBranchesQuery } from '../../queries/branch'; import { AlmKeys, AlmSettingsInstance, ProjectAlmBindingResponse } from '../../types/alm-settings'; import { MainBranch } from '../../types/branch-like'; import { Component } from '../../types/types'; import { LoggedInUser } from '../../types/users'; import AzurePipelinesTutorial from './azure-pipelines/AzurePipelinesTutorial'; import BitbucketPipelinesTutorial from './bitbucket-pipelines/BitbucketPipelinesTutorial'; import GitHubActionTutorial from './github-action/GitHubActionTutorial'; import GitLabCITutorial from './gitlabci/GitLabCITutorial'; import JenkinsTutorial from './jenkins/JenkinsTutorial'; import OtherTutorial from './other/OtherTutorial'; import { TutorialModes } from './types'; const DEFAULT_MAIN_BRANCH_NAME = 'main'; export interface TutorialSelectionRendererProps { almBinding?: AlmSettingsInstance; baseUrl: string; component: Component; currentUser: LoggedInUser; currentUserCanScanProject: boolean; loading: boolean; projectBinding?: ProjectAlmBindingResponse; selectedTutorial?: TutorialModes; willRefreshAutomatically?: boolean; } function renderAlm(mode: TutorialModes, project: string, icon?: React.ReactNode) { return ( {translate('onboarding.tutorial.choose_method', mode)} {mode === TutorialModes.Local && ( {translate('onboarding.mode.help.manual')} )} {mode === TutorialModes.OtherCI && ( {translate('onboarding.mode.help.otherci')} )} ); } export default function TutorialSelectionRenderer(props: TutorialSelectionRendererProps) { const { almBinding, baseUrl, component, currentUser, currentUserCanScanProject, loading, projectBinding, selectedTutorial, willRefreshAutomatically, } = props; const { data: { branchLikes } = { branchLikes: [] } } = useBranchesQuery(component); const mainBranchName = (branchLikes.find((b) => isMainBranch(b)) as MainBranch | undefined)?.name || DEFAULT_MAIN_BRANCH_NAME; if (loading) { return ; } if (!currentUserCanScanProject) { return ( {translate('onboarding.tutorial.no_scan_rights')} ); } let showGitHubActions = true; let showGitLabCICD = true; let showBitbucketPipelines = true; let showAzurePipelines = true; let showJenkins = true; if (projectBinding != null) { showGitHubActions = projectBinding.alm === AlmKeys.GitHub; showGitLabCICD = projectBinding.alm === AlmKeys.GitLab; showBitbucketPipelines = projectBinding.alm === AlmKeys.BitbucketCloud; showAzurePipelines = [AlmKeys.Azure, AlmKeys.GitHub].includes(projectBinding.alm); showJenkins = [ AlmKeys.BitbucketCloud, AlmKeys.BitbucketServer, AlmKeys.GitHub, AlmKeys.GitLab, ].includes(projectBinding.alm); } return (
{selectedTutorial === undefined && (
{translate('onboarding.tutorial.page.title')} {translate('onboarding.tutorial.page.description')} {translate('onboarding.tutorial.choose_method')}
{showJenkins && renderAlm( TutorialModes.Jenkins, component.key, , )} {showGitHubActions && renderAlm( TutorialModes.GitHubActions, component.key, , )} {showBitbucketPipelines && renderAlm( TutorialModes.BitbucketPipelines, component.key, , )} {showGitLabCICD && renderAlm( TutorialModes.GitLabCI, component.key, , )} {showAzurePipelines && renderAlm( TutorialModes.AzurePipelines, component.key, , )} {renderAlm(TutorialModes.OtherCI, component.key)} {renderAlm(TutorialModes.Local, component.key)}
)} {selectedTutorial && ( {translate('onboarding.tutorial.breadcrumbs.home')} {translate('onboarding.tutorial.breadcrumbs', selectedTutorial)} )} {selectedTutorial === TutorialModes.Local && ( )} {selectedTutorial === TutorialModes.OtherCI && ( )} {selectedTutorial === TutorialModes.BitbucketPipelines && ( )} {selectedTutorial === TutorialModes.GitHubActions && ( )} {selectedTutorial === TutorialModes.Jenkins && ( )} {selectedTutorial === TutorialModes.GitLabCI && ( )} {selectedTutorial === TutorialModes.AzurePipelines && ( )}
); }