diff --git a/plugins/scaffolder-backend-module-github/api-report.md b/plugins/scaffolder-backend-module-github/api-report.md index 4f3cd819ad..b1a1c80af5 100644 --- a/plugins/scaffolder-backend-module-github/api-report.md +++ b/plugins/scaffolder-backend-module-github/api-report.md @@ -128,7 +128,7 @@ export interface CreateGithubPullRequestActionOptions { } | null>; } >; - config: Config; + config?: Config; githubCredentialsProvider?: GithubCredentialsProvider; integrations: ScmIntegrationRegistry; } diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.test.ts b/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.test.ts index dd7641ce4c..20508494b8 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.test.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.test.ts @@ -955,4 +955,64 @@ describe('createPublishGithubPullRequestAction', () => { }); }); }); + + describe('with author fallback and no config', () => { + let input: GithubPullRequestActionInput; + let ctx: ActionContext; + + beforeEach(() => { + input = { + repoUrl: 'github.com?owner=myorg&repo=myrepo', + title: 'Create my new app', + branchName: 'new-app', + description: 'This PR is really good', + gitAuthorName: 'Foo Bar', + }; + + mockDir.setContent({ + [workspacePath]: { 'file.txt': 'Hello there!' }, + }); + + ctx = createMockActionContext({ input, workspacePath }); + }); + + it('creates a pull request with using author name and email fallback when have no config', async () => { + const clientFactory = jest.fn(async () => fakeClient as any); + const githubCredentialsProvider: GithubCredentialsProvider = { + getCredentials: jest.fn(), + }; + + const instanceWithConfig = createPublishGithubPullRequestAction({ + integrations, + githubCredentialsProvider, + clientFactory, + }); + + await instanceWithConfig.handler(ctx); + + expect(fakeClient.createPullRequest).toHaveBeenCalledWith({ + owner: 'myorg', + repo: 'myrepo', + title: 'Create my new app', + head: 'new-app', + body: 'This PR is really good', + changes: [ + { + commit: 'Create my new app', + files: { + 'file.txt': { + content: Buffer.from('Hello there!').toString('base64'), + encoding: 'base64', + mode: '100644', + }, + }, + author: { + email: 'scaffolder@backstage.io', + name: 'Foo Bar', + }, + }, + ], + }); + }); + }); }); diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.ts b/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.ts index cc5e1280ef..a72ec8345b 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/githubPullRequest.ts @@ -104,7 +104,7 @@ export interface CreateGithubPullRequestActionOptions { /** * An instance of {@link @backstage/config#Config} that will be used in the action. */ - config: Config; + config?: Config; } type GithubPullRequest = { @@ -351,7 +351,7 @@ export const createPublishGithubPullRequestAction = ( files, commit: commitMessage ?? - config.getOptionalString('scaffolder.defaultCommitMessage') ?? + config?.getOptionalString('scaffolder.defaultCommitMessage') ?? title, }, ], @@ -365,10 +365,10 @@ export const createPublishGithubPullRequestAction = ( const gitAuthorInfo = { name: gitAuthorName ?? - config.getOptionalString('scaffolder.defaultAuthor.name'), + config?.getOptionalString('scaffolder.defaultAuthor.name'), email: gitAuthorEmail ?? - config.getOptionalString('scaffolder.defaultAuthor.email'), + config?.getOptionalString('scaffolder.defaultAuthor.email'), }; if (gitAuthorInfo.name || gitAuthorInfo.email) {