From a8a13e5e2d76cc2d062847984810debf0c3b5d39 Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Tue, 8 Jun 2021 09:42:26 +0200 Subject: [PATCH] SONAR-14892 Enable Jenkins tutorial to BitbucketCloud projects --- .../tutorials/TutorialSelectionRenderer.tsx | 4 +- .../tutorials/jenkins/JenkinsTutorial.tsx | 2 + .../jenkins/MultiBranchPipelineStep.tsx | 53 +++- .../tutorials/jenkins/WebhookStep.tsx | 1 + .../jenkins/WebhookStepBitbucket.tsx | 119 ++++++--- .../MultiBranchPipelineStep-test.tsx | 9 + .../jenkins/__tests__/WebhookStep-test.tsx | 2 + .../__tests__/WebhookStepBitbucket-test.tsx | 18 +- .../MultiBranchPipelineStep-test.tsx.snap | 115 +++++++++ .../__snapshots__/WebhookStep-test.tsx.snap | 62 +++++ .../WebhookStepBitbucket-test.tsx.snap | 232 +++++++++++++++++- .../src/main/js/helpers/mocks/alm-settings.ts | 14 ++ .../src/main/js/types/alm-settings.ts | 11 + .../resources/org/sonar/l10n/core.properties | 26 ++ 14 files changed, 624 insertions(+), 44 deletions(-) diff --git a/server/sonar-web/src/main/js/components/tutorials/TutorialSelectionRenderer.tsx b/server/sonar-web/src/main/js/components/tutorials/TutorialSelectionRenderer.tsx index 2f72ba9c2bc..e2d2afbf34d 100644 --- a/server/sonar-web/src/main/js/components/tutorials/TutorialSelectionRenderer.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/TutorialSelectionRenderer.tsx @@ -56,7 +56,9 @@ export default function TutorialSelectionRenderer(props: TutorialSelectionRender const jenkinsAvailable = projectBinding && - [AlmKeys.BitbucketServer, AlmKeys.GitHub, AlmKeys.GitLab].includes(projectBinding.alm); + [AlmKeys.BitbucketCloud, AlmKeys.BitbucketServer, AlmKeys.GitHub, AlmKeys.GitLab].includes( + projectBinding.alm + ); return ( <> diff --git a/server/sonar-web/src/main/js/components/tutorials/jenkins/JenkinsTutorial.tsx b/server/sonar-web/src/main/js/components/tutorials/jenkins/JenkinsTutorial.tsx index 3ed4d76d950..cbdc43a9868 100644 --- a/server/sonar-web/src/main/js/components/tutorials/jenkins/JenkinsTutorial.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/jenkins/JenkinsTutorial.tsx @@ -26,6 +26,7 @@ import { setCurrentUserSetting } from '../../../store/users'; import { AlmSettingsInstance, isProjectBitbucketBindingResponse, + isProjectBitbucketCloudBindingResponse, isProjectGitHubBindingResponse, isProjectGitLabBindingResponse, ProjectAlmBindingResponse @@ -62,6 +63,7 @@ export function JenkinsTutorial(props: JenkinsTutorialProps) { // Failsafe; should never happen. if ( + !isProjectBitbucketCloudBindingResponse(projectBinding) && !isProjectBitbucketBindingResponse(projectBinding) && !isProjectGitHubBindingResponse(projectBinding) && !isProjectGitLabBindingResponse(projectBinding) diff --git a/server/sonar-web/src/main/js/components/tutorials/jenkins/MultiBranchPipelineStep.tsx b/server/sonar-web/src/main/js/components/tutorials/jenkins/MultiBranchPipelineStep.tsx index cfd44f0a57b..cdfe60150f3 100644 --- a/server/sonar-web/src/main/js/components/tutorials/jenkins/MultiBranchPipelineStep.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/jenkins/MultiBranchPipelineStep.tsx @@ -23,9 +23,11 @@ import { translate } from 'sonar-ui-common/helpers/l10n'; import { AlmSettingsInstance, isProjectBitbucketBindingResponse, + isProjectBitbucketCloudBindingResponse, isProjectGitHubBindingResponse, isProjectGitLabBindingResponse, ProjectBitbucketBindingResponse, + ProjectBitbucketCloudBindingResponse, ProjectGitHubBindingResponse, ProjectGitLabBindingResponse } from '../../../types/alm-settings'; @@ -35,20 +37,37 @@ import SentenceWithHighlights from '../components/SentenceWithHighlights'; import Step from '../components/Step'; import { buildGithubLink } from '../utils'; +type validBindingResponse = + | ProjectBitbucketCloudBindingResponse + | ProjectBitbucketBindingResponse + | ProjectGitHubBindingResponse + | ProjectGitLabBindingResponse; + export interface MultiBranchPipelineStepProps { almBinding?: AlmSettingsInstance; finished: boolean; onDone: () => void; onOpen: () => void; open: boolean; - projectBinding: - | ProjectBitbucketBindingResponse - | ProjectGitHubBindingResponse - | ProjectGitLabBindingResponse; + projectBinding: validBindingResponse; +} + +/* Capture [workspaceID] from this pattern: https://bitbucket.org/[workspaceId]/ */ +const bitbucketcloudUrlRegex = new RegExp('https:\\/\\/bitbucket.org\\/(.+)\\/'); + +function extractBitbucketCloudWorkspaceId(almBinding?: AlmSettingsInstance): string | undefined { + if (almBinding?.url) { + const result = almBinding.url.match(bitbucketcloudUrlRegex); + + return result ? result[1] : undefined; + } } export default function MultiBranchPipelineStep(props: MultiBranchPipelineStepProps) { const { almBinding, finished, open, projectBinding } = props; + + const workspaceId = extractBitbucketCloudWorkspaceId(almBinding); + return ( )} + {isProjectBitbucketCloudBindingResponse(projectBinding) && ( + <> +
  • + +
  • +
  • + +
  • +
  • + {workspaceId ? ( + + ) : ( + + )} +
  • +
  • + +
  • + + )} {isProjectGitHubBindingResponse(projectBinding) && ( <>
  • diff --git a/server/sonar-web/src/main/js/components/tutorials/jenkins/WebhookStep.tsx b/server/sonar-web/src/main/js/components/tutorials/jenkins/WebhookStep.tsx index 2fcb02a05d6..32c3ff067d4 100644 --- a/server/sonar-web/src/main/js/components/tutorials/jenkins/WebhookStep.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/jenkins/WebhookStep.tsx @@ -45,6 +45,7 @@ function renderAlmSpecificInstructions(props: WebhookStepProps) { const { almBinding, branchesEnabled, projectBinding } = props; switch (projectBinding.alm) { + case AlmKeys.BitbucketCloud: case AlmKeys.BitbucketServer: return ( @@ -55,10 +74,18 @@ export default function WebhookStepBitbucket(props: WebhookStepBitbucketProps) { values={{ link: linkUrl ? ( - {translate('onboarding.tutorial.with.jenkins.webhook.bitbucket.step1.link')} + {translate( + 'onboarding.tutorial.with.jenkins.webhook', + projectBinding.alm, + 'step1.link' + )} ) : ( - translate('onboarding.tutorial.with.jenkins.webhook.bitbucket.step1.link') + translate( + 'onboarding.tutorial.with.jenkins.webhook', + projectBinding.alm, + 'step1.link' + ) ) }} /> @@ -72,9 +99,13 @@ export default function WebhookStepBitbucket(props: WebhookStepBitbucketProps) {

    - {branchesEnabled && ( + {branchesEnabled && !isBitbucketCloud && ( {translate('onboarding.tutorial.with.jenkins.webhook.bitbucket.step1.url.warning')} @@ -82,27 +113,53 @@ export default function WebhookStepBitbucket(props: WebhookStepBitbucketProps) {
  • -
  • - -
      -
    • - -
    • - {branchesEnabled && ( + {isBitbucketCloud ? ( +
    • + +
      • - +
      • - )} -
      -
    • + {branchesEnabled && ( +
    • + +
    • + )} +
    +
  • + ) : ( +
  • + +
      +
    • + +
    • + {branchesEnabled && ( +
    • + +
    • + )} +
    +
  • + )}
  • - + {isBitbucketCloud ? ( + + ) : ( + + )}
  • ); diff --git a/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/MultiBranchPipelineStep-test.tsx b/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/MultiBranchPipelineStep-test.tsx index 8b10fce9399..da3249dd3d7 100644 --- a/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/MultiBranchPipelineStep-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/MultiBranchPipelineStep-test.tsx @@ -22,6 +22,7 @@ import * as React from 'react'; import { mockAlmSettingsInstance, mockProjectBitbucketBindingResponse, + mockProjectBitbucketCloudBindingResponse, mockProjectGithubBindingResponse, mockProjectGitLabBindingResponse } from '../../../../helpers/mocks/alm-settings'; @@ -32,6 +33,14 @@ it('should render correctly', () => { const wrapper = shallowRender(); expect(wrapper).toMatchSnapshot('Step wrapper'); expect(renderStepContent(wrapper)).toMatchSnapshot('content for bitbucket'); + expect( + renderStepContent( + shallowRender({ + almBinding: mockAlmSettingsInstance({ url: 'https://bitbucket.org/workspaceId/' }), + projectBinding: mockProjectBitbucketCloudBindingResponse() + }) + ) + ).toMatchSnapshot('content for bitbucket cloud'); expect( renderStepContent( shallowRender({ diff --git a/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/WebhookStep-test.tsx b/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/WebhookStep-test.tsx index 11406ff5d15..5caaed85555 100644 --- a/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/WebhookStep-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/WebhookStep-test.tsx @@ -23,6 +23,7 @@ import { mockAlmSettingsInstance, mockProjectAlmBindingResponse, mockProjectBitbucketBindingResponse, + mockProjectBitbucketCloudBindingResponse, mockProjectGithubBindingResponse } from '../../../../helpers/mocks/alm-settings'; import { AlmKeys } from '../../../../types/alm-settings'; @@ -31,6 +32,7 @@ import WebhookStep, { WebhookStepProps } from '../WebhookStep'; it.each([ [AlmKeys.Azure, mockProjectAlmBindingResponse({ alm: AlmKeys.Azure })], + [AlmKeys.BitbucketCloud, mockProjectBitbucketCloudBindingResponse()], [AlmKeys.BitbucketServer, mockProjectBitbucketBindingResponse()], [AlmKeys.GitHub, mockProjectGithubBindingResponse()], [AlmKeys.GitLab, mockProjectAlmBindingResponse({ alm: AlmKeys.GitLab })] diff --git a/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/WebhookStepBitbucket-test.tsx b/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/WebhookStepBitbucket-test.tsx index f9417a75ab9..b290376df7b 100644 --- a/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/WebhookStepBitbucket-test.tsx +++ b/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/WebhookStepBitbucket-test.tsx @@ -21,14 +21,22 @@ import { shallow } from 'enzyme'; import * as React from 'react'; import { mockAlmSettingsInstance, - mockProjectBitbucketBindingResponse + mockProjectBitbucketBindingResponse, + mockProjectBitbucketCloudBindingResponse } from '../../../../helpers/mocks/alm-settings'; import WebhookStepBitbucket, { WebhookStepBitbucketProps } from '../WebhookStepBitbucket'; -it('should render correctly', () => { - expect(shallowRender()).toMatchSnapshot(); - expect(shallowRender({ almBinding: undefined })).toMatchSnapshot('with no alm binding'); - expect(shallowRender({ branchesEnabled: false })).toMatchSnapshot('with branches disabled'); +it.each([ + ['bitbucket server', mockProjectBitbucketBindingResponse()], + ['bitbucket cloud', mockProjectBitbucketCloudBindingResponse()] +])('should render correctly for %s', (_name, projectBinding) => { + expect(shallowRender({ projectBinding })).toMatchSnapshot(); + expect(shallowRender({ projectBinding, almBinding: undefined })).toMatchSnapshot( + 'with no alm binding' + ); + expect(shallowRender({ projectBinding, branchesEnabled: false })).toMatchSnapshot( + 'with branches disabled' + ); }); function shallowRender(props: Partial = {}) { diff --git a/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/__snapshots__/MultiBranchPipelineStep-test.tsx.snap b/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/__snapshots__/MultiBranchPipelineStep-test.tsx.snap index 303c33d8752..c33b4b13cab 100644 --- a/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/__snapshots__/MultiBranchPipelineStep-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/tutorials/jenkins/__tests__/__snapshots__/MultiBranchPipelineStep-test.tsx.snap @@ -126,6 +126,121 @@ exports[`should render correctly: content for bitbucket 1`] = ` `; +exports[`should render correctly: content for bitbucket cloud 1`] = ` +
    +

    + onboarding.tutorial.with.jenkins.multi_branch_pipeline.intro +

    +
      +
    1. + +
    2. +
    3. + +
        + +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
        +
      • + +
      • +
      +

      + onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.leave_defaults +

      +
    4. +
    5. + +
        +
      • + +
      • +
      • + +
      • +
      +
    6. +
    7. + +
    8. +
    + +
    +`; + exports[`should render correctly: content for github 1`] = `
    `; +exports[`it should render correctly for bitbucketcloud: content 1`] = ` +
    +

    + + onboarding.tutorial.with.jenkins.webhook.intro.link + , + } + } + /> +

    +
      + +
    + +
    +`; + +exports[`it should render correctly for bitbucketcloud: wrapper 1`] = ` + +`; + exports[`it should render correctly for github: content 1`] = `
    +
  • + + onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step1.link + , + } + } + /> +
      +
    • + +
    • +
    • +

      + +

      + +
    • +
    +
  • +
  • + +
      +
    • + +
    • +
    • + +
    • +
    +
  • +
  • + +
  • + +`; + +exports[`should render correctly for bitbucket cloud: with branches disabled 1`] = ` + +
  • + + onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step1.link + , + } + } + /> +
      +
    • + +
    • +
    • +

      + +

      + +
    • +
    +
  • +
  • + +
      +
    • + +
    • +
    +
  • +
  • + +
  • +
    +`; + +exports[`should render correctly for bitbucket cloud: with no alm binding 1`] = ` + +
  • + +
      +
    • + +
    • +
    • +

      + +

      + +
    • +
    +
  • +
  • + +
      +
    • + +
    • +
    • + +
    • +
    +
  • +
  • + +
  • +
    +`; + +exports[`should render correctly for bitbucket server 1`] = `
  • `; -exports[`should render correctly: with branches disabled 1`] = ` +exports[`should render correctly for bitbucket server: with branches disabled 1`] = `
  • `; -exports[`should render correctly: with no alm binding 1`] = ` +exports[`should render correctly for bitbucket server: with no alm binding 1`] = `
  • = {} +): ProjectBitbucketCloudBindingResponse { + return { + alm: AlmKeys.BitbucketCloud, + key: 'foo', + repository: 'PROJECT_KEY', + slug: 'repo-slug', + monorepo: true, + ...overrides + }; +} + export function mockProjectGithubBindingResponse( overrides: Partial = {} ): ProjectGitHubBindingResponse { diff --git a/server/sonar-web/src/main/js/types/alm-settings.ts b/server/sonar-web/src/main/js/types/alm-settings.ts index dff01841cfa..267733f6b9a 100644 --- a/server/sonar-web/src/main/js/types/alm-settings.ts +++ b/server/sonar-web/src/main/js/types/alm-settings.ts @@ -81,6 +81,11 @@ export interface ProjectBitbucketBindingResponse extends ProjectAlmBindingRespon slug: string; } +export interface ProjectBitbucketCloudBindingResponse extends ProjectAlmBindingResponse { + alm: AlmKeys.BitbucketCloud; + repository: string; +} + export interface ProjectGitHubBindingResponse extends ProjectAlmBindingResponse { alm: AlmKeys.GitHub; repository: string; @@ -154,6 +159,12 @@ export function isProjectBitbucketBindingResponse( return binding.alm === AlmKeys.BitbucketServer; } +export function isProjectBitbucketCloudBindingResponse( + binding: ProjectAlmBindingResponse +): binding is ProjectBitbucketBindingResponse { + return binding.alm === AlmKeys.BitbucketCloud; +} + export function isProjectGitHubBindingResponse( binding: ProjectAlmBindingResponse ): binding is ProjectGitHubBindingResponse { diff --git a/sonar-core/src/main/resources/org/sonar/l10n/core.properties b/sonar-core/src/main/resources/org/sonar/l10n/core.properties index fb19cef79a6..b3b866fde7b 100644 --- a/sonar-core/src/main/resources/org/sonar/l10n/core.properties +++ b/sonar-core/src/main/resources/org/sonar/l10n/core.properties @@ -3492,6 +3492,7 @@ onboarding.tutorial.with.jenkins.prereqs.title=Prerequisites onboarding.tutorial.with.jenkins.prereqs.intro.sentence=To run your project analyses with Jenkins, the following plugins {must_have} onboarding.tutorial.with.jenkins.prereqs.intro.sentence.must_have=must be installed and configured: onboarding.tutorial.with.jenkins.prereqs.plugins.branch_source.bitbucket=Bitbucket Branch Source plugin for Jenkins - version 2.7 or later +onboarding.tutorial.with.jenkins.prereqs.plugins.branch_source.bitbucketcloud=Bitbucket Branch Source plugin for Jenkins - version 2.7 or later onboarding.tutorial.with.jenkins.prereqs.plugins.branch_source.github=GitHub Branch Source plugin for Jenkins - version 2.7.1 or later onboarding.tutorial.with.jenkins.prereqs.plugins.branch_source.gitlab=GitLab Branch Source plugin for Jenkins - version 1.5.3 or later onboarding.tutorial.with.jenkins.prereqs.plugins.gitlab_plugin=GitLab plugin for Jenkins - version 1.5.13 or later @@ -3519,6 +3520,18 @@ onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucket.owner.act onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucket.repo.label=Repository onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucket.repo.action=select the repository you want to analyze. +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.sentence=Under {tab}, add a {source} source and enter the following information: +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.sentence.tab=Branch Sources +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.sentence.source=Bitbucket +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.server.label=Server +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.server.action=Make sure that Bitbucket Cloud is selected. +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.creds.label=Credentials +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.creds.action=select the Bitbucket Cloud credentials. +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.owner.label=Owner +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.owner.action=enter your workspace ID +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.repo.label=Repository +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.repo.action=select the repository you want to analyze. + onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.github.sentence=Under {tab}, add a {source} source and enter the following information: onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.github.sentence.tab=Branch Sources onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.github.sentence.source=GitHub @@ -3539,6 +3552,8 @@ onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.gitlab.repo.action= onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucket.behaviour.label=Behavior onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucket.behaviour.action=make sure "Exclude branches that are also filed as PRs" is selected. +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.behaviour.label=Behavior +onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.bitbucketcloud.behaviour.action=make sure "Exclude branches that are also filed as PRs" is selected. onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.github.behaviour.label=Behavior onboarding.tutorial.with.jenkins.multi_branch_pipeline.step2.github.behaviour.action=make sure "Exclude branches that are also filed as PRs" is selected. @@ -3595,12 +3610,14 @@ onboarding.tutorial.with.jenkins.pipeline.step4.sentence.save=Save onboarding.tutorial.with.jenkins.webhook.bitbucket.title=Create a Bitbucket Server Webhook +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.title=Create a Bitbucket Cloud Webhook onboarding.tutorial.with.jenkins.webhook.github.title=Create a GitHub Webhook onboarding.tutorial.with.jenkins.webhook.gitlab.title=Create a GitLab Webhook onboarding.tutorial.with.jenkins.webhook.intro.sentence=Create a Webhook in your repository to trigger the Jenkins job on push. Already have a Webhook configured? {link} onboarding.tutorial.with.jenkins.webhook.intro.link=Skip this step. onboarding.tutorial.with.jenkins.webhook.step1.sentence=Go to the {link} and enter the following information: onboarding.tutorial.with.jenkins.webhook.bitbucket.step1.link=Bitbucket Server Webhook creation page for your repository +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step1.link=Bitbucket Server Webhook creation page for your repository onboarding.tutorial.with.jenkins.webhook.github.step1.link=GitHub Webhook creation page for your repository onboarding.tutorial.with.jenkins.webhook.gitlab.step1.link=GitLab Webhook creation page for your repository onboarding.tutorial.with.jenkins.webhook.step1.name.label=Name @@ -3618,6 +3635,9 @@ onboarding.tutorial.with.jenkins.webhook.gitlab.step1.secret_token.label=Secret onboarding.tutorial.with.jenkins.webhook.gitlab.step1.secret_token.action=Enter the generated token you wrote down in the previous step. onboarding.tutorial.with.jenkins.webhook.bitbucket.step2.sentence=Under {events}, make sure the following options are checked: onboarding.tutorial.with.jenkins.webhook.bitbucket.step2.sentence.events=Events +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step2.sentence=Under {triggers}, select {option} and make sure the following options are checked: +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step2.sentence.triggers=Triggers +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step2.sentence.option=Choose from a full list of triggers onboarding.tutorial.with.jenkins.webhook.github.step2.sentence=Under {events} select {option} and check the following: onboarding.tutorial.with.jenkins.webhook.github.step2.sentence.events=Which events would you like to trigger this webhook? onboarding.tutorial.with.jenkins.webhook.github.step2.sentence.option=Let me select individual events @@ -3627,12 +3647,18 @@ onboarding.tutorial.with.jenkins.webhook.bitbucket.step2.repo.label=Repository onboarding.tutorial.with.jenkins.webhook.bitbucket.step2.repo.action=Push onboarding.tutorial.with.jenkins.webhook.bitbucket.step2.pr.label=Pull Request onboarding.tutorial.with.jenkins.webhook.bitbucket.step2.pr.action=Opened +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step2.repo.label=Repository +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step2.repo.action=Push +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step2.pr.label=Pull Request +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step2.pr.action=Created onboarding.tutorial.with.jenkins.webhook.github.step2.repo=Pushes onboarding.tutorial.with.jenkins.webhook.github.step2.pr=Pull Requests onboarding.tutorial.with.jenkins.webhook.gitlab.step2.repo=Push events onboarding.tutorial.with.jenkins.webhook.gitlab.step2.mr=Merge request events onboarding.tutorial.with.jenkins.webhook.step3.sentence=Click {create}. onboarding.tutorial.with.jenkins.webhook.step3.sentence.create=Create +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step3.sentence=Click {save}. +onboarding.tutorial.with.jenkins.webhook.bitbucketcloud.step3.sentence.create=Save onboarding.tutorial.with.jenkins.webhook.gitlab.step3.sentence=Click {add_webhook}. onboarding.tutorial.with.jenkins.webhook.gitlab.step3.sentence.add_webhook=Add webhook onboarding.tutorial.with.jenkins.jenkinsfile.title=Create a Jenkinsfile -- 2.39.5