diff --git a/plugins/github-release-manager/dev/index.tsx b/plugins/github-release-manager/dev/index.tsx index 1b5236b920..b6897e2a9b 100644 --- a/plugins/github-release-manager/dev/index.tsx +++ b/plugins/github-release-manager/dev/index.tsx @@ -16,6 +16,7 @@ import React from 'react'; import { createDevApp } from '@backstage/dev-utils'; +import { Alert } from '@material-ui/lab'; import { gitHubReleaseManagerPlugin, @@ -29,19 +30,69 @@ function DevWrapper({ children }: { children: React.ReactNode }) { createDevApp() .registerPlugin(gitHubReleaseManagerPlugin) .addPage({ - title: 'Page 1', + title: 'Dynamic', + element: ( + <> + Configure via select inputs + + + + + + ), + }) + .addPage({ + title: 'Static', element: ( - + Statically configured via props + + ), }) .addPage({ - title: 'Page 2', + title: 'Omit', element: ( - {' '} - + Optionally omit components + + { + // eslint-disable-next-line no-console + console.log( + 'Custom success callback for Create RC', + comparisonUrl, + createdTag, + gitHubReleaseName, + gitHubReleaseUrl, + previousTag, + ); + }, + }, + promoteRc: { omit: true }, + patch: { omit: true }, + }} + /> ), }) diff --git a/plugins/github-release-manager/src/GitHubReleaseManager.tsx b/plugins/github-release-manager/src/GitHubReleaseManager.tsx index be7eee982a..1160016a66 100644 --- a/plugins/github-release-manager/src/GitHubReleaseManager.tsx +++ b/plugins/github-release-manager/src/GitHubReleaseManager.tsx @@ -20,6 +20,7 @@ import { Alert } from '@material-ui/lab'; import { useApi, ContentHeader } from '@backstage/core'; import { + ComponentConfig, ComponentConfigCreateRc, ComponentConfigPatch, ComponentConfigPromoteRc, @@ -36,28 +37,32 @@ import { useQueryHandler } from './hooks/useQueryHandler'; import { useStyles } from './styles/styles'; export interface GitHubReleaseManagerProps { + project?: Omit; components?: { - default?: { - createRc?: ComponentConfigCreateRc; - promoteRc?: ComponentConfigPromoteRc; - patch?: ComponentConfigPatch; - }; + info?: Pick, 'omit'>; + createRc?: ComponentConfigCreateRc; + promoteRc?: ComponentConfigPromoteRc; + patch?: ComponentConfigPatch; }; } -export function GitHubReleaseManager({ - components, -}: GitHubReleaseManagerProps) { +export function GitHubReleaseManager(props: GitHubReleaseManagerProps) { const pluginApiClient = useApi(githubReleaseManagerApiRef); const classes = useStyles(); const { getParsedQuery } = useQueryHandler(); const { parsedQuery } = getParsedQuery(); - const project: Project = { - owner: parsedQuery.owner ?? '', - repo: parsedQuery.repo ?? '', - versioningStrategy: parsedQuery.versioningStrategy ?? 'semver', - }; + const project: Project = isProjectValid(props.project) + ? { + ...props.project, + isProvidedViaProps: true, + } + : { + owner: parsedQuery.owner ?? '', + repo: parsedQuery.repo ?? '', + versioningStrategy: parsedQuery.versioningStrategy ?? 'semver', + isProvidedViaProps: false, + }; const usernameResponse = useAsync(() => pluginApiClient.getUsername({ owner: project.owner, repo: project.repo }), @@ -85,7 +90,7 @@ export function GitHubReleaseManager({ - {isProjectValid(project) && } + {isProjectValid(project) && } diff --git a/plugins/github-release-manager/src/cards/Cards.tsx b/plugins/github-release-manager/src/cards/Cards.tsx index 52a44ecd8b..f39697b664 100644 --- a/plugins/github-release-manager/src/cards/Cards.tsx +++ b/plugins/github-release-manager/src/cards/Cards.tsx @@ -94,32 +94,34 @@ export function Cards({ )} - + {components?.info?.omit !== true && ( + + )} - {components?.default?.createRc?.omit !== true && ( + {components?.createRc?.omit !== true && ( )} - {components?.default?.promoteRc?.omit !== true && ( + {components?.promoteRc?.omit !== true && ( )} - {components?.default?.patch?.omit !== true && ( + {components?.patch?.omit !== true && ( )} diff --git a/plugins/github-release-manager/src/cards/projectForm/Owner.tsx b/plugins/github-release-manager/src/cards/projectForm/Owner.tsx index 5e7d5b2f30..8f67038697 100644 --- a/plugins/github-release-manager/src/cards/projectForm/Owner.tsx +++ b/plugins/github-release-manager/src/cards/projectForm/Owner.tsx @@ -46,7 +46,12 @@ export function Owner({ username }: { username: string }) { .includes(project.owner); return ( - + {loading ? ( ) : ( diff --git a/plugins/github-release-manager/src/cards/projectForm/Repo.tsx b/plugins/github-release-manager/src/cards/projectForm/Repo.tsx index fb05783e3e..4c7b995c44 100644 --- a/plugins/github-release-manager/src/cards/projectForm/Repo.tsx +++ b/plugins/github-release-manager/src/cards/projectForm/Repo.tsx @@ -52,7 +52,12 @@ export function Repo() { const customRepoFromUrl = !repositories.concat(['']).includes(project.repo); return ( - + {loading ? ( ) : ( diff --git a/plugins/github-release-manager/src/cards/projectForm/VersioningStrategy.tsx b/plugins/github-release-manager/src/cards/projectForm/VersioningStrategy.tsx index 23d42009df..ebbee5b419 100644 --- a/plugins/github-release-manager/src/cards/projectForm/VersioningStrategy.tsx +++ b/plugins/github-release-manager/src/cards/projectForm/VersioningStrategy.tsx @@ -36,7 +36,7 @@ export function VersioningStrategy() { useEffect(() => { const { parsedQuery } = getParsedQuery(); - if (!parsedQuery.versioningStrategy) { + if (!parsedQuery.versioningStrategy && !project.isProvidedViaProps) { const { queryParams } = getQueryParamsWithUpdates({ updates: [ { key: 'versioningStrategy', value: project.versioningStrategy }, @@ -48,7 +48,11 @@ export function VersioningStrategy() { }, []); // eslint-disable-line react-hooks/exhaustive-deps return ( - + Calendar strategy (undefined); diff --git a/plugins/github-release-manager/src/test-helpers/test-helpers.test.ts b/plugins/github-release-manager/src/test-helpers/test-helpers.test.ts index 293bf01891..fb2735182e 100644 --- a/plugins/github-release-manager/src/test-helpers/test-helpers.test.ts +++ b/plugins/github-release-manager/src/test-helpers/test-helpers.test.ts @@ -52,6 +52,7 @@ describe('testHelpers', () => { }, "mockBumpedTag": "rc-2020.01.01_1337", "mockCalverProject": Object { + "isProvidedViaProps": false, "owner": "mock_owner", "repo": "mock_repo", "versioningStrategy": "calver", @@ -112,6 +113,7 @@ describe('testHelpers', () => { "sha": "mock_sha_selected_patch_commit", }, "mockSemverProject": Object { + "isProvidedViaProps": false, "owner": "mock_owner", "repo": "mock_repo", "versioningStrategy": "semver", diff --git a/plugins/github-release-manager/src/test-helpers/test-helpers.ts b/plugins/github-release-manager/src/test-helpers/test-helpers.ts index 80200e2ff0..19e3c57184 100644 --- a/plugins/github-release-manager/src/test-helpers/test-helpers.ts +++ b/plugins/github-release-manager/src/test-helpers/test-helpers.ts @@ -31,12 +31,14 @@ export const mockSemverProject: Project = { owner: mockOwner, repo: mockRepo, versioningStrategy: 'semver', + isProvidedViaProps: false, }; export const mockCalverProject: Project = { owner: mockOwner, repo: mockRepo, versioningStrategy: 'calver', + isProvidedViaProps: false, }; export const mockSearchCalver = `?versioningStrategy=${mockCalverProject.versioningStrategy}&owner=${mockCalverProject.owner}&repo=${mockCalverProject.repo}`; diff --git a/plugins/github-release-manager/src/types/types.ts b/plugins/github-release-manager/src/types/types.ts index a92200614d..84a27add68 100644 --- a/plugins/github-release-manager/src/types/types.ts +++ b/plugins/github-release-manager/src/types/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -interface ComponentConfig { +export interface ComponentConfig { successCb?: (args: Args) => Promise | void; omit?: boolean; }