);
}
-function renderMonoRepoField(props: {
- monorepoEnabled: boolean;
- value?: boolean;
- docLink: string;
- onFieldChange: (id: keyof ProjectAlmBindingResponse, value: string | boolean) => void;
-}) {
- if (!props.monorepoEnabled) {
- return null;
- }
-
- return renderBooleanField({
- help: true,
- helpParams: {
- doc_link: (
- <Link to={props.docLink} target="_blank">
- {translate('learn_more')}
- </Link>
- )
- },
- id: 'monorepo',
- onFieldChange: props.onFieldChange,
- propKey: 'monorepo',
- value: props.value ?? false,
- inputExtra: props.value && (
- <Alert className="no-margin-bottom spacer-left" variant="warning" display="inline">
- {translate('settings.pr_decoration.binding.form.monorepo.warning')}
- </Alert>
- )
- });
-}
-
export default function AlmSpecificForm(props: AlmSpecificFormProps) {
const {
alm,
monorepoEnabled
} = props;
- const renderMonoRepoFieldWithDocLink = (docLink: string) => {
- return renderMonoRepoField({
- monorepoEnabled,
- value: monorepo,
- docLink,
- onFieldChange: props.onFieldChange
- });
- };
+ let formFields: JSX.Element;
switch (alm) {
case AlmKeys.Azure:
- return (
+ formFields = (
<>
{renderField({
help: true,
propKey: 'repository',
value: repository || ''
})}
- {renderMonoRepoFieldWithDocLink(ALM_DOCUMENTATION_PATHS[AlmKeys.Azure])}
</>
);
+ break;
case AlmKeys.BitbucketServer:
- return (
+ formFields = (
<>
{renderField({
help: true,
propKey: 'slug',
value: slug || ''
})}
- {renderMonoRepoFieldWithDocLink(ALM_DOCUMENTATION_PATHS[AlmKeys.BitbucketServer])}
</>
);
+ break;
case AlmKeys.BitbucketCloud:
- return (
+ formFields = (
<>
{renderField({
help: true,
})}
</>
);
+ break;
case AlmKeys.GitHub:
- return (
+ formFields = (
<>
{renderField({
help: true,
propKey: 'summaryCommentEnabled',
value: summaryCommentEnabled === undefined ? true : summaryCommentEnabled
})}
- {renderMonoRepoFieldWithDocLink(ALM_DOCUMENTATION_PATHS[AlmKeys.GitHub])}
</>
);
+ break;
case AlmKeys.GitLab:
- return (
+ formFields = (
<>
{renderField({
id: 'gitlab.repository',
propKey: 'repository',
value: repository || ''
})}
- {renderMonoRepoFieldWithDocLink(ALM_DOCUMENTATION_PATHS[AlmKeys.GitLab])}
</>
);
- default:
- return null;
+ break;
}
+
+ return (
+ <>
+ {formFields}
+ {monorepoEnabled &&
+ renderBooleanField({
+ help: true,
+ helpParams: {
+ doc_link: (
+ <Link to={ALM_DOCUMENTATION_PATHS[alm]} target="_blank">
+ {translate('learn_more')}
+ </Link>
+ )
+ },
+ id: 'monorepo',
+ onFieldChange: props.onFieldChange,
+ propKey: 'monorepo',
+ value: monorepo,
+ inputExtra: monorepo && (
+ <Alert className="no-margin-bottom spacer-left" variant="warning" display="inline">
+ {translate('settings.pr_decoration.binding.form.monorepo.warning')}
+ </Alert>
+ )
+ })}
+ </>
+ );
}
export class PRDecorationBinding extends React.PureComponent<Props & StateProps, State> {
mounted = false;
state: State = {
- formData: { key: '' },
+ formData: { key: '', monorepo: false },
instances: [],
isChanged: false,
isConfigured: false,
formData: {
key: '',
repository: '',
- slug: ''
+ slug: '',
+ monorepo: false
},
orignalData: undefined,
isChanged: false,
return setProjectBitbucketCloudBinding({
almSetting,
project,
- repository
+ repository,
+ monorepo
});
}
case AlmKeys.GitHub: {
return {
formData: newFormData,
isValid: this.validateForm(newFormData),
- isChanged: !this.isDataSame(newFormData, orignalData || { key: '' }),
+ isChanged: !this.isDataSame(newFormData, orignalData || { key: '', monorepo: false }),
success: false
};
});
import AlmSpecificForm, { AlmSpecificFormProps } from '../AlmSpecificForm';
it.each([
- [AlmKeys.Azure, false],
- [AlmKeys.Azure, true],
- [AlmKeys.BitbucketServer, false],
- [AlmKeys.BitbucketServer, true],
- [AlmKeys.BitbucketCloud, false],
- [AlmKeys.GitHub, false],
- [AlmKeys.GitHub, true],
- [AlmKeys.GitLab, false],
- [AlmKeys.GitLab, true]
-])('it should render correctly for %s and monorepo=%s', (alm, monorepoEnabled) => {
- expect(shallowRender(alm, { monorepoEnabled })).toMatchSnapshot();
+ [AlmKeys.Azure],
+ [AlmKeys.BitbucketServer],
+ [AlmKeys.BitbucketCloud],
+ [AlmKeys.GitHub],
+ [AlmKeys.GitLab]
+])('it should render correctly for %s', alm => {
+ expect(shallowRender(alm)).toMatchSnapshot();
});
-it('should render an alert for azure when the monorepo option is activated', () => {
- expect(
- shallowRender(AlmKeys.Azure, { monorepoEnabled: true, formData: { key: '', monorepo: true } })
- ).toMatchSnapshot();
+it('should render the monorepo field when the feature is supported', () => {
+ expect(shallowRender(AlmKeys.Azure, { monorepoEnabled: true })).toMatchSnapshot();
});
function shallowRender(alm: AlmKeys, props: Partial<AlmSpecificFormProps> = {}) {
formData={{
key: '',
repository: '',
- slug: ''
+ slug: '',
+ monorepo: false
}}
onFieldChange={jest.fn()}
monorepoEnabled={false}
wrapper.setState({
formData: {
key: 'whatever',
- repository: 'something/else'
+ repository: 'something/else',
+ monorepo: false
}
});
await waitAndUpdate(wrapper);
expect(deleteProjectAlmBinding).toBeCalledWith(PROJECT_KEY);
- expect(wrapper.state().formData).toEqual({ key: '', repository: '', slug: '' });
+ expect(wrapper.state().formData).toEqual({ key: '', repository: '', slug: '', monorepo: false });
expect(wrapper.state().isChanged).toBe(false);
});
await waitAndUpdate(wrapper);
const bitbucketKey = 'bitbucketcloud';
const repository = 'repoKey';
- wrapper.setState({ formData: { key: bitbucketKey, repository }, instances: [] });
+ const monorepo = true;
+ wrapper.setState({ formData: { key: bitbucketKey, repository, monorepo }, instances: [] });
wrapper.instance().handleSubmit();
await waitAndUpdate(wrapper);
expect(setProjectBitbucketCloudBinding).not.toBeCalled();
- wrapper.setState({ formData: { key: bitbucketKey, repository }, instances });
+ wrapper.setState({ formData: { key: bitbucketKey, repository, monorepo }, instances });
wrapper.instance().handleSubmit();
await waitAndUpdate(wrapper);
expect(setProjectBitbucketCloudBinding).toBeCalledWith({
almSetting: bitbucketKey,
project: PROJECT_KEY,
- repository
+ repository,
+ monorepo
});
expect(wrapper.state().success).toBe(true);
});
it('should handle failures gracefully', async () => {
const newFormData = {
key: 'whatever',
- repository: 'something/else'
+ repository: 'something/else',
+ monorepo: false
};
(getProjectAlmBinding as jest.Mock).mockRejectedValueOnce({ status });
wrapper.instance().handleFieldChange('key', 'instance2');
await waitAndUpdate(wrapper);
expect(wrapper.state().formData).toEqual({
- key: 'instance2'
+ key: 'instance2',
+ monorepo: false
});
wrapper.instance().handleFieldChange('repository', repository);
await waitAndUpdate(wrapper);
expect(wrapper.state().formData).toEqual({
key: 'instance2',
- repository
+ repository,
+ monorepo: false
});
wrapper.instance().handleFieldChange('summaryCommentEnabled', true);
await waitAndUpdate(wrapper);
expect(wrapper.state().formData).toEqual({
key: 'instance2',
+ monorepo: false,
repository,
summaryCommentEnabled: true
});
});
it.each([
- [AlmKeys.Azure, {}],
- [AlmKeys.Azure, { slug: 'test' }],
- [AlmKeys.Azure, { repository: 'test' }],
- [AlmKeys.BitbucketServer, {}],
- [AlmKeys.BitbucketServer, { slug: 'test' }],
- [AlmKeys.BitbucketServer, { repository: 'test' }],
- [AlmKeys.BitbucketCloud, {}],
- [AlmKeys.GitHub, {}],
- [AlmKeys.GitLab, {}]
-])('should properly reject promise for %s & %s', async (almKey: AlmKeys, params: {}) => {
- const wrapper = shallowRender();
+ [AlmKeys.Azure, { monorepo: false }],
+ [AlmKeys.Azure, { slug: 'test', monorepo: false }],
+ [AlmKeys.Azure, { repository: 'test', monorepo: false }],
+ [AlmKeys.BitbucketServer, { monorepo: false }],
+ [AlmKeys.BitbucketServer, { slug: 'test', monorepo: false }],
+ [AlmKeys.BitbucketServer, { repository: 'test', monorepo: false }],
+ [AlmKeys.BitbucketCloud, { monorepo: false }],
+ [AlmKeys.GitHub, { monorepo: false }],
+ [AlmKeys.GitLab, { monorepo: false }]
+])(
+ 'should properly reject promise for %s & %s',
+ async (almKey: AlmKeys, params: { monorepo: boolean }) => {
+ const wrapper = shallowRender();
- expect.assertions(1);
- await expect(
- wrapper.instance().submitProjectAlmBinding(almKey, 'binding', params)
- ).rejects.toBeUndefined();
-});
+ expect.assertions(1);
+ await expect(
+ wrapper.instance().submitProjectAlmBinding(almKey, 'binding', params)
+ ).rejects.toBeUndefined();
+ }
+);
it('should validate form', async () => {
const wrapper = shallowRender();
const validateMethod = wrapper.instance().validateForm;
- expect(validateMethod({ key: '', repository: '' })).toBe(false);
- expect(validateMethod({ key: '', repository: 'c' })).toBe(false);
+ expect(validateMethod({ key: '', repository: '', monorepo: false })).toBe(false);
+ expect(validateMethod({ key: '', repository: 'c', monorepo: false })).toBe(false);
wrapper.setState({
instances: [
});
[
- { values: { key: 'azure', repository: 'rep' }, result: false },
- { values: { key: 'azure', slug: 'project' }, result: false },
- { values: { key: 'azure', repository: 'repo', slug: 'project' }, result: true },
- { values: { key: 'github', repository: '' }, result: false },
- { values: { key: 'github', repository: 'asdf' }, result: true },
- { values: { key: 'bitbucket', repository: 'key' }, result: false },
- { values: { key: 'bitbucket', repository: 'key', slug: 'slug' }, result: true },
- { values: { key: 'bitbucketcloud', repository: '' }, result: false },
- { values: { key: 'bitbucketcloud', repository: 'key' }, result: true },
- { values: { key: 'gitlab' }, result: false },
- { values: { key: 'gitlab', repository: 'key' }, result: true }
+ { values: { key: 'azure', monorepo: false, repository: 'rep' }, result: false },
+ { values: { key: 'azure', monorepo: false, slug: 'project' }, result: false },
+ {
+ values: { key: 'azure', monorepo: false, repository: 'repo', slug: 'project' },
+ result: true
+ },
+ { values: { key: 'github', monorepo: false, repository: '' }, result: false },
+ { values: { key: 'github', monorepo: false, repository: 'asdf' }, result: true },
+ { values: { key: 'bitbucket', monorepo: false, repository: 'key' }, result: false },
+ {
+ values: { key: 'bitbucket', monorepo: false, repository: 'key', slug: 'slug' },
+ result: true
+ },
+ { values: { key: 'bitbucketcloud', monorepo: false, repository: '' }, result: false },
+ { values: { key: 'bitbucketcloud', monorepo: false, repository: 'key' }, result: true },
+ { values: { key: 'gitlab', monorepo: false }, result: false },
+ { values: { key: 'gitlab', monorepo: false, repository: 'key' }, result: true }
].forEach(({ values, result }) => {
expect(validateMethod(values)).toBe(result);
});
shallowRender({
formData: {
key: 'i1',
- repository: 'account/repo'
+ repository: 'account/repo',
+ monorepo: false
},
isChanged: false,
isConfigured: true,
<PRDecorationBindingRenderer
formData={{
key: '',
- repository: ''
+ repository: '',
+ monorepo: false
}}
instances={[]}
isChanged={false}
// Jest Snapshot v1, https://goo.gl/fbAQLP
-exports[`it should render correctly for azure and monorepo=false 1`] = `
+exports[`it should render correctly for azure 1`] = `
<Fragment>
<div
className="form-field"
</Fragment>
`;
-exports[`it should render correctly for azure and monorepo=true 1`] = `
-<Fragment>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="azure.project"
- >
- settings.pr_decoration.binding.form.azure.project
- <MandatoryFieldMarker />
- <HelpTooltip
- className="spacer-left"
- overlay={
- <FormattedMessage
- defaultMessage="settings.pr_decoration.binding.form.azure.project.help"
- id="settings.pr_decoration.binding.form.azure.project.help"
- values={Object {}}
- />
- }
- placement="right"
- />
- </label>
- <input
- className="input-super-large"
- id="azure.project"
- maxLength={256}
- name="azure.project"
- onChange={[Function]}
- type="text"
- value=""
- />
- </div>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="azure.repository"
- >
- settings.pr_decoration.binding.form.azure.repository
- <MandatoryFieldMarker />
- <HelpTooltip
- className="spacer-left"
- overlay={
- <FormattedMessage
- defaultMessage="settings.pr_decoration.binding.form.azure.repository.help"
- id="settings.pr_decoration.binding.form.azure.repository.help"
- values={Object {}}
- />
- }
- placement="right"
- />
- </label>
- <input
- className="input-super-large"
- id="azure.repository"
- maxLength={256}
- name="azure.repository"
- onChange={[Function]}
- type="text"
- value=""
- />
- </div>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="monorepo"
- >
- settings.pr_decoration.binding.form.monorepo
- <HelpTooltip
- className="spacer-left"
- overlay={
- <FormattedMessage
- defaultMessage="settings.pr_decoration.binding.form.monorepo.help"
- id="settings.pr_decoration.binding.form.monorepo.help"
- values={
- Object {
- "doc_link": <Link
- onlyActiveOnIndex={false}
- style={Object {}}
- target="_blank"
- to="/documentation/analysis/azuredevops-integration/"
- >
- learn_more
- </Link>,
- }
- }
- />
- }
- placement="right"
- />
- </label>
- <div
- className="display-flex-center"
- >
- <InputForBoolean
- isDefault={true}
- name="monorepo"
- onChange={[Function]}
- value={false}
- />
- </div>
- </div>
-</Fragment>
-`;
-
-exports[`it should render correctly for bitbucket and monorepo=false 1`] = `
+exports[`it should render correctly for bitbucket 1`] = `
<Fragment>
<div
className="form-field"
</Fragment>
`;
-exports[`it should render correctly for bitbucket and monorepo=true 1`] = `
-<Fragment>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="bitbucket.repository"
- >
- settings.pr_decoration.binding.form.bitbucket.repository
- <MandatoryFieldMarker />
- <HelpTooltip
- className="spacer-left"
- overlay={
- <FormattedMessage
- defaultMessage="settings.pr_decoration.binding.form.bitbucket.repository.help"
- id="settings.pr_decoration.binding.form.bitbucket.repository.help"
- values={
- Object {
- "example": <React.Fragment>
- .../projects/
- <strong>
- {KEY}
- </strong>
- /repos/{SLUG}/browse
- </React.Fragment>,
- }
- }
- />
- }
- placement="right"
- />
- </label>
- <input
- className="input-super-large"
- id="bitbucket.repository"
- maxLength={256}
- name="bitbucket.repository"
- onChange={[Function]}
- type="text"
- value=""
- />
- </div>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="bitbucket.slug"
- >
- settings.pr_decoration.binding.form.bitbucket.slug
- <MandatoryFieldMarker />
- <HelpTooltip
- className="spacer-left"
- overlay={
- <FormattedMessage
- defaultMessage="settings.pr_decoration.binding.form.bitbucket.slug.help"
- id="settings.pr_decoration.binding.form.bitbucket.slug.help"
- values={
- Object {
- "example": <React.Fragment>
- .../projects/{KEY}/repos/
- <strong>
- {SLUG}
- </strong>
- /browse
- </React.Fragment>,
- }
- }
- />
- }
- placement="right"
- />
- </label>
- <input
- className="input-super-large"
- id="bitbucket.slug"
- maxLength={256}
- name="bitbucket.slug"
- onChange={[Function]}
- type="text"
- value=""
- />
- </div>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="monorepo"
- >
- settings.pr_decoration.binding.form.monorepo
- <HelpTooltip
- className="spacer-left"
- overlay={
- <FormattedMessage
- defaultMessage="settings.pr_decoration.binding.form.monorepo.help"
- id="settings.pr_decoration.binding.form.monorepo.help"
- values={
- Object {
- "doc_link": <Link
- onlyActiveOnIndex={false}
- style={Object {}}
- target="_blank"
- to="/documentation/analysis/bitbucket-integration/"
- >
- learn_more
- </Link>,
- }
- }
- />
- }
- placement="right"
- />
- </label>
- <div
- className="display-flex-center"
- >
- <InputForBoolean
- isDefault={true}
- name="monorepo"
- onChange={[Function]}
- value={false}
- />
- </div>
- </div>
-</Fragment>
-`;
-
-exports[`it should render correctly for bitbucketcloud and monorepo=false 1`] = `
+exports[`it should render correctly for bitbucketcloud 1`] = `
<Fragment>
<div
className="form-field"
</Fragment>
`;
-exports[`it should render correctly for github and monorepo=false 1`] = `
+exports[`it should render correctly for github 1`] = `
<Fragment>
<div
className="form-field"
</Fragment>
`;
-exports[`it should render correctly for github and monorepo=true 1`] = `
-<Fragment>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="github.repository"
- >
- settings.pr_decoration.binding.form.github.repository
- <MandatoryFieldMarker />
- <HelpTooltip
- className="spacer-left"
- overlay={
- <FormattedMessage
- defaultMessage="settings.pr_decoration.binding.form.github.repository.help"
- id="settings.pr_decoration.binding.form.github.repository.help"
- values={
- Object {
- "example": "SonarSource/sonarqube",
- }
- }
- />
- }
- placement="right"
- />
- </label>
- <input
- className="input-super-large"
- id="github.repository"
- maxLength={256}
- name="github.repository"
- onChange={[Function]}
- type="text"
- value=""
- />
- </div>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="github.summary_comment_setting"
- >
- settings.pr_decoration.binding.form.github.summary_comment_setting
- <HelpTooltip
- className="spacer-left"
- overlay={
- <FormattedMessage
- defaultMessage="settings.pr_decoration.binding.form.github.summary_comment_setting.help"
- id="settings.pr_decoration.binding.form.github.summary_comment_setting.help"
- values={Object {}}
- />
- }
- placement="right"
- />
- </label>
- <div
- className="display-flex-center"
- >
- <InputForBoolean
- isDefault={true}
- name="github.summary_comment_setting"
- onChange={[Function]}
- value={true}
- />
- </div>
- </div>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="monorepo"
- >
- settings.pr_decoration.binding.form.monorepo
- <HelpTooltip
- className="spacer-left"
- overlay={
- <FormattedMessage
- defaultMessage="settings.pr_decoration.binding.form.monorepo.help"
- id="settings.pr_decoration.binding.form.monorepo.help"
- values={
- Object {
- "doc_link": <Link
- onlyActiveOnIndex={false}
- style={Object {}}
- target="_blank"
- to="/documentation/analysis/github-integration/"
- >
- learn_more
- </Link>,
- }
- }
- />
- }
- placement="right"
- />
- </label>
- <div
- className="display-flex-center"
- >
- <InputForBoolean
- isDefault={true}
- name="monorepo"
- onChange={[Function]}
- value={false}
- />
- </div>
- </div>
-</Fragment>
-`;
-
-exports[`it should render correctly for gitlab and monorepo=false 1`] = `
+exports[`it should render correctly for gitlab 1`] = `
<Fragment>
<div
className="form-field"
</Fragment>
`;
-exports[`it should render correctly for gitlab and monorepo=true 1`] = `
-<Fragment>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="gitlab.repository"
- >
- settings.pr_decoration.binding.form.gitlab.repository
- <MandatoryFieldMarker />
- </label>
- <input
- className="input-super-large"
- id="gitlab.repository"
- maxLength={256}
- name="gitlab.repository"
- onChange={[Function]}
- type="text"
- value=""
- />
- </div>
- <div
- className="form-field"
- >
- <label
- className="display-flex-center"
- htmlFor="monorepo"
- >
- settings.pr_decoration.binding.form.monorepo
- <HelpTooltip
- className="spacer-left"
- overlay={
- <FormattedMessage
- defaultMessage="settings.pr_decoration.binding.form.monorepo.help"
- id="settings.pr_decoration.binding.form.monorepo.help"
- values={
- Object {
- "doc_link": <Link
- onlyActiveOnIndex={false}
- style={Object {}}
- target="_blank"
- to="/documentation/analysis/gitlab-integration/"
- >
- learn_more
- </Link>,
- }
- }
- />
- }
- placement="right"
- />
- </label>
- <div
- className="display-flex-center"
- >
- <InputForBoolean
- isDefault={true}
- name="monorepo"
- onChange={[Function]}
- value={false}
- />
- </div>
- </div>
-</Fragment>
-`;
-
-exports[`should render an alert for azure when the monorepo option is activated 1`] = `
+exports[`should render the monorepo field when the feature is supported 1`] = `
<Fragment>
<div
className="form-field"
isDefault={true}
name="monorepo"
onChange={[Function]}
- value={true}
+ value={false}
/>
- <Alert
- className="no-margin-bottom spacer-left"
- display="inline"
- variant="warning"
- >
- settings.pr_decoration.binding.form.monorepo.warning
- </Alert>
</div>
</div>
</Fragment>
formData={
Object {
"key": "",
+ "monorepo": false,
}
}
instances={Array []}
formData={
Object {
"key": "i1",
+ "monorepo": false,
"repository": "account/repo",
}
}
return {
alm: AlmKeys.GitHub,
key: 'foo',
+ monorepo: false,
...overrides
};
}
repository?: string;
slug?: string;
summaryCommentEnabled?: boolean;
- monorepo?: boolean;
+ monorepo: boolean;
}
export interface ProjectAzureBindingResponse extends ProjectAlmBindingResponse {
repository: string;
slug: string;
url: string;
- monorepo: boolean;
}
export interface ProjectBitbucketBindingResponse extends ProjectAlmBindingResponse {
alm: AlmKeys.BitbucketServer;
repository: string;
slug: string;
- monorepo: boolean;
}
export interface ProjectGitHubBindingResponse extends ProjectAlmBindingResponse {
alm: AlmKeys.GitHub;
repository: string;
- monorepo: boolean;
}
export interface ProjectGitLabBindingResponse extends ProjectAlmBindingResponse {
alm: AlmKeys.GitLab;
repository: string;
url: string;
- monorepo: boolean;
}
export interface ProjectAlmBindingParams {
almSetting: string;
project: string;
+ monorepo: boolean;
}
export interface AzureProjectAlmBindingParams extends ProjectAlmBindingParams {
projectName: string;
repositoryName: string;
- monorepo: boolean;
}
export interface BitbucketProjectAlmBindingParams extends ProjectAlmBindingParams {
repository: string;
slug: string;
- monorepo: boolean;
}
export interface BitbucketCloudProjectAlmBindingParams extends ProjectAlmBindingParams {
export interface GithubProjectAlmBindingParams extends ProjectAlmBindingParams {
repository: string;
summaryCommentEnabled: boolean;
- monorepo: boolean;
}
export interface GitlabProjectAlmBindingParams extends ProjectAlmBindingParams {
repository?: string;
- monorepo: boolean;
}
export interface AlmSettingsInstance {