diff --git a/plugins/scaffolder-backend/sample-templates/bitbucket-demo/template.yaml b/plugins/scaffolder-backend/sample-templates/bitbucket-demo/template.yaml
index ee1bc634b4..95854eaf84 100644
--- a/plugins/scaffolder-backend/sample-templates/bitbucket-demo/template.yaml
+++ b/plugins/scaffolder-backend/sample-templates/bitbucket-demo/template.yaml
@@ -20,7 +20,15 @@ spec:
ui:options:
allowedHosts:
- bitbucket.org
- - server.bitbucket.com
+ allowedOwners:
+ - WORKSPACE1
+ - WORKSPACE2
+ allowedProjects:
+ - PROJECT1
+ - PROJECT2
+ allowedRepos:
+ - REPO1
+ - REPO2
- title: Fill in some steps
required:
- name
diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx
index fc643e7360..6fe93ce512 100644
--- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx
+++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx
@@ -56,6 +56,22 @@ describe('BitbucketRepoPicker', () => {
expect(getAllByRole('textbox')).toHaveLength(1);
});
+
+ it('renders a select if there is a list of allowed projects', async () => {
+ const allowedProjects = ['project1', 'project2'];
+ const { findByText } = render(
+ ,
+ );
+
+ expect(await findByText('project1')).toBeInTheDocument();
+ expect(await findByText('project2')).toBeInTheDocument();
+ });
+
describe('workspace field', () => {
it('calls onChange when the workspace changes', () => {
const onChange = jest.fn();
diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx
index 5bc1380553..75922a3efb 100644
--- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx
+++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx
@@ -23,15 +23,25 @@ import { RepoUrlPickerState } from './types';
export const BitbucketRepoPicker = (props: {
allowedOwners?: string[];
+ allowedProjects?: string[];
onChange: (state: RepoUrlPickerState) => void;
state: RepoUrlPickerState;
rawErrors: string[];
}) => {
- const { allowedOwners = [], onChange, rawErrors, state } = props;
+ const {
+ allowedOwners = [],
+ allowedProjects = [],
+ onChange,
+ rawErrors,
+ state,
+ } = props;
const { host, workspace, project } = state;
const ownerItems: SelectItem[] = allowedOwners
? allowedOwners?.map(i => ({ label: i, value: i }))
: [];
+ const projectItems: SelectItem[] = allowedProjects
+ ? allowedProjects?.map(i => ({ label: i, value: i }))
+ : [];
useEffect(() => {
if (host === 'bitbucket.org' && allowedOwners.length) {
@@ -69,7 +79,7 @@ export const BitbucketRepoPicker = (props: {
>
)}
- The Organization that this repo will belong to
+ The Workspace that this repo will belong to
)}
@@ -78,12 +88,27 @@ export const BitbucketRepoPicker = (props: {
required
error={rawErrors?.length > 0 && !project}
>
- Project
- onChange({ project: e.target.value })}
- value={project}
- />
+ {allowedProjects?.length ? (
+