diff --git a/.changeset/quick-cars-poke.md b/.changeset/quick-cars-poke.md new file mode 100644 index 0000000000..a7338d8363 --- /dev/null +++ b/.changeset/quick-cars-poke.md @@ -0,0 +1,19 @@ +--- +'@backstage/plugin-scaffolder-backend-module-github': patch +--- + +Added options to set [workflow access level][access-level] for repositories to `github:repo:create` + +This is useful when creating repositories for GitHub Actions to manage access +to the workflows during creation. + +```diff + - action: github:repo:create + id: create-repo + input: + repoUrl: github.com?owner=owner&repo=repo + visibility: private ++ workflowAccess: organization +``` + +[access-level]: https://docs.github.com/en/rest/actions/permissions?apiVersion=2022-11-28#set-the-level-of-access-for-workflows-outside-of-the-repository diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.examples.test.ts b/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.examples.test.ts index c37e9c222b..e2104736f7 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.examples.test.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.examples.test.ts @@ -56,6 +56,7 @@ const mockOctokit = { createRepoVariable: jest.fn(), createOrUpdateRepoSecret: jest.fn(), getRepoPublicKey: jest.fn(), + setWorkflowAccessToRepository: jest.fn(), }, }, request: jest.fn().mockResolvedValue({}), @@ -130,13 +131,7 @@ describe('github:repo:create examples', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - custom_properties: undefined, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, visibility: 'private', - auto_init: undefined, }); }); @@ -165,12 +160,7 @@ describe('github:repo:create examples', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, visibility: 'private', - auto_init: undefined, }); }); @@ -190,7 +180,6 @@ describe('github:repo:create examples', () => { name: 'repo', org: 'owner', private: true, - description: undefined, delete_branch_on_merge: false, allow_squash_merge: true, squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', @@ -199,13 +188,9 @@ describe('github:repo:create examples', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - custom_properties: undefined, visibility: 'private', has_issues: false, // disable issues - has_projects: undefined, has_wiki: false, // disable wiki - homepage: undefined, - auto_init: undefined, }); }); @@ -239,17 +224,11 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, homepage: 'https://example.com', - auto_init: undefined, }); }); @@ -283,17 +262,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -327,17 +299,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -371,17 +336,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -415,17 +373,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: false, allow_rebase_merge: false, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -459,17 +410,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'pull_request_title', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -503,17 +447,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'blank', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -547,17 +484,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: true, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -591,17 +521,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -635,17 +558,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -679,17 +595,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -723,17 +632,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -767,17 +669,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -811,17 +706,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -855,17 +743,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -899,17 +780,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -943,17 +817,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -987,17 +854,12 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'internal', - has_issues: undefined, description: 'A repository for project XYZ', - has_projects: undefined, - has_wiki: undefined, homepage: 'https://project-xyz.com', - auto_init: undefined, }); }); @@ -1031,17 +893,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1075,17 +930,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1119,17 +967,11 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, has_projects: true, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1163,17 +1005,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: false, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1207,17 +1042,12 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'internal', has_issues: false, - description: undefined, has_projects: false, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1251,17 +1081,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1295,17 +1118,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1339,17 +1155,11 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, description: 'Repository for project ABC', - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1383,17 +1193,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'public', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1427,17 +1230,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1471,17 +1267,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1515,17 +1304,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1559,17 +1341,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1603,17 +1378,12 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'internal', - has_issues: undefined, description: 'Internal repository for team collaboration', - has_projects: undefined, - has_wiki: undefined, homepage: 'https://internal.example.com', - auto_init: undefined, }); }); @@ -1647,17 +1417,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1691,17 +1454,11 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, has_projects: true, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1735,17 +1492,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1779,17 +1529,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1823,17 +1566,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'internal', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1867,17 +1603,12 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, description: 'Repository for web application project', - has_projects: undefined, - has_wiki: undefined, homepage: 'https://webapp.example.com', - auto_init: undefined, }); }); @@ -1911,17 +1642,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'pull_request_description', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: false, allow_rebase_merge: false, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1955,17 +1679,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: false, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -1999,17 +1716,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2043,17 +1753,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2087,17 +1790,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'public', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2131,17 +1827,13 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', has_issues: false, description: 'Repository for backend service', - has_projects: undefined, has_wiki: false, - homepage: undefined, - auto_init: undefined, }); }); @@ -2175,17 +1867,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2219,17 +1904,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2263,17 +1941,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2307,17 +1978,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: false, allow_rebase_merge: true, allow_auto_merge: true, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2351,17 +2015,11 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, homepage: 'https://example.com', - auto_init: undefined, }); }); @@ -2395,17 +2053,11 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, description: 'Repository for microservice development', - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2439,17 +2091,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2483,17 +2128,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2527,17 +2165,10 @@ describe('github:repo:create examples', () => { squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_update_branch: false, - custom_properties: undefined, allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2569,19 +2200,12 @@ describe('github:repo:create examples', () => { delete_branch_on_merge: false, allow_squash_merge: true, allow_update_branch: false, - custom_properties: undefined, squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); }); @@ -2613,19 +2237,43 @@ describe('github:repo:create examples', () => { delete_branch_on_merge: false, allow_squash_merge: true, allow_update_branch: false, - custom_properties: undefined, squash_merge_commit_title: 'COMMIT_OR_PR_TITLE', squash_merge_commit_message: 'COMMIT_MESSAGES', allow_merge_commit: true, allow_rebase_merge: true, allow_auto_merge: false, visibility: 'private', - has_issues: undefined, - description: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, auto_init: true, }); }); + + it(`Should ${examples[59].description}`, async () => { + mockOctokit.rest.users.getByUsername.mockResolvedValue({ + data: { type: 'Organization' }, + }); + + mockOctokit.rest.repos.createInOrg.mockResolvedValue({ data: {} }); + + let input; + try { + input = yaml.parse(examples[59].example).steps[0].input; + } catch (error) { + console.error('Failed to parse YAML:', error); + } + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + ...input, + }, + }); + + expect( + mockOctokit.rest.actions.setWorkflowAccessToRepository, + ).toHaveBeenCalledWith({ + access_level: input.workflowAccess, + owner: 'owner', + repo: 'repo', + }); + }); }); diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.examples.ts b/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.examples.ts index 41c6a15fba..698a85779e 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.examples.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.examples.ts @@ -1021,4 +1021,19 @@ export const examples: TemplateExample[] = [ ], }), }, + { + description: 'Allow workflow access for organization.', + example: yaml.stringify({ + steps: [ + { + action: 'github:repo:create', + name: 'Create a new GitHub repository that allows org-wide access to its workflows', + input: { + repoUrl: 'github.com?owner=owner&repo=repo', + workflowAccess: 'organization', + }, + }, + ], + }), + }, ]; diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.test.ts b/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.test.ts index adad5237da..56159e207a 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.test.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.test.ts @@ -57,6 +57,7 @@ const mockOctokit = { createRepoVariable: jest.fn(), createOrUpdateRepoSecret: jest.fn(), getRepoPublicKey: jest.fn(), + setWorkflowAccessToRepository: jest.fn(), }, activity: { setRepoSubscription: jest.fn(), @@ -152,12 +153,7 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, visibility: 'private', - auto_init: undefined, }); await action.handler({ @@ -180,13 +176,7 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - custom_properties: undefined, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, visibility: 'public', - auto_init: undefined, }); await action.handler({ @@ -210,11 +200,7 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, visibility: 'private', - auto_init: undefined, }); await action.handler({ @@ -239,13 +225,8 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - custom_properties: undefined, visibility: 'private', - has_wiki: undefined, - has_projects: undefined, - has_issues: undefined, homepage: 'https://example.com', - auto_init: undefined, }); await action.handler({ @@ -270,12 +251,7 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - custom_properties: undefined, visibility: 'private', - has_wiki: undefined, - has_projects: undefined, - has_issues: undefined, - auto_init: undefined, }); await action.handler({ @@ -302,13 +278,8 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - custom_properties: undefined, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, homepage: 'https://example.com', visibility: 'private', - auto_init: undefined, }); await action.handler({ @@ -332,11 +303,6 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - custom_properties: undefined, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, visibility: 'private', auto_init: true, }); @@ -362,11 +328,6 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - custom_properties: undefined, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, visibility: 'private', auto_init: false, }); @@ -396,11 +357,6 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); await action.handler({ @@ -424,11 +380,6 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, - homepage: undefined, - auto_init: undefined, }); await action.handler({ @@ -453,10 +404,6 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, - auto_init: undefined, }); await action.handler({ @@ -482,11 +429,7 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_wiki: undefined, - has_projects: undefined, - has_issues: undefined, homepage: 'https://example.com', - auto_init: undefined, }); await action.handler({ @@ -512,11 +455,7 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_wiki: undefined, - has_projects: undefined, - has_issues: undefined, homepage: 'https://example.com', - auto_init: undefined, }); // Custom properties on user repos should be ignored @@ -545,11 +484,7 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_issues: undefined, - has_projects: undefined, - has_wiki: undefined, homepage: 'https://example.com', - auto_init: undefined, }); await action.handler({ @@ -573,10 +508,6 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_wiki: undefined, - has_projects: undefined, - has_issues: undefined, - homepage: undefined, auto_init: true, }); @@ -601,10 +532,6 @@ describe('github:repo:create', () => { allow_rebase_merge: true, allow_auto_merge: false, allow_update_branch: false, - has_wiki: undefined, - has_projects: undefined, - has_issues: undefined, - homepage: undefined, auto_init: false, }); }); @@ -966,4 +893,30 @@ describe('github:repo:create', () => { ignored: false, }); }); + + it.each(['none', 'organization', 'user'])( + 'should set workflow access level - %s', + async expected => { + mockOctokit.rest.users.getByUsername.mockResolvedValue({ + data: { type: 'Organization' }, + }); + mockOctokit.rest.repos.createInOrg.mockResolvedValue({ data: {} }); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + workflowAccess: expected, + }, + }); + + expect( + mockOctokit.rest.actions.setWorkflowAccessToRepository, + ).toHaveBeenCalledWith({ + access_level: expected, + owner: 'owner', + repo: 'repo', + }); + }, + ); }); diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.ts b/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.ts index 952bf514d4..6278d2537e 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/githubRepoCreate.ts @@ -47,41 +47,7 @@ export function createGithubRepoCreateAction(options: { examples, schema: { input: { - repoUrl: inputProps.repoUrl, - description: inputProps.description, - homepage: inputProps.homepage, - access: inputProps.access, - requireCodeOwnerReviews: inputProps.requireCodeOwnerReviews, - bypassPullRequestAllowances: inputProps.bypassPullRequestAllowances, - requiredApprovingReviewCount: inputProps.requiredApprovingReviewCount, - restrictions: inputProps.restrictions, - requiredStatusCheckContexts: inputProps.requiredStatusCheckContexts, - requireBranchesToBeUpToDate: inputProps.requireBranchesToBeUpToDate, - requiredConversationResolution: - inputProps.requiredConversationResolution, - repoVisibility: inputProps.repoVisibility, - deleteBranchOnMerge: inputProps.deleteBranchOnMerge, - allowMergeCommit: inputProps.allowMergeCommit, - allowSquashMerge: inputProps.allowSquashMerge, - squashMergeCommitTitle: inputProps.squashMergeCommitTitle, - squashMergeCommitMessage: inputProps.squashMergeCommitMessage, - allowRebaseMerge: inputProps.allowRebaseMerge, - allowAutoMerge: inputProps.allowAutoMerge, - allowUpdateBranch: inputProps.allowUpdateBranch, - collaborators: inputProps.collaborators, - hasProjects: inputProps.hasProjects, - hasWiki: inputProps.hasWiki, - hasIssues: inputProps.hasIssues, - token: inputProps.token, - topics: inputProps.topics, - repoVariables: inputProps.repoVariables, - secrets: inputProps.secrets, - oidcCustomization: inputProps.oidcCustomization, - requiredCommitSigning: inputProps.requiredCommitSigning, - requiredLinearHistory: inputProps.requiredLinearHistory, - customProperties: inputProps.customProperties, - subscribe: inputProps.subscribe, - autoInit: inputProps.autoInit, + ...inputProps, }, output: { remoteUrl: outputProps.remoteUrl, @@ -115,6 +81,7 @@ export function createGithubRepoCreateAction(options: { subscribe, token: providedToken, autoInit = undefined, + workflowAccess, } = ctx.input; const { host, owner, repo } = parseRepoUrl(repoUrl, integrations); @@ -167,6 +134,7 @@ export function createGithubRepoCreateAction(options: { subscribe, ctx.logger, autoInit, + workflowAccess, ); return newRepo.clone_url; }, diff --git a/plugins/scaffolder-backend-module-github/src/actions/helpers.ts b/plugins/scaffolder-backend-module-github/src/actions/helpers.ts index a3d0caed33..58db784c35 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/helpers.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/helpers.ts @@ -79,6 +79,7 @@ export async function createGithubRepoWithCollaboratorsAndTopics( subscribe: boolean | undefined, logger: LoggerService, autoInit?: boolean | undefined, + workflowAccess?: 'none' | 'organization' | 'user', ) { // eslint-disable-next-line testing-library/no-await-sync-queries const user = await client.rest.users.getByUsername({ @@ -272,6 +273,14 @@ export async function createGithubRepoWithCollaboratorsAndTopics( }); } + if (workflowAccess) { + await client.rest.actions.setWorkflowAccessToRepository({ + access_level: workflowAccess, + owner, + repo, + }); + } + return newRepo; } diff --git a/plugins/scaffolder-backend-module-github/src/actions/inputProperties.ts b/plugins/scaffolder-backend-module-github/src/actions/inputProperties.ts index 8a901b0e99..5d5946c95f 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/inputProperties.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/inputProperties.ts @@ -421,50 +421,59 @@ const autoInit = (z: typeof zod) => .default(false) .optional(); +const workflowAccess = (z: typeof zod) => + z + .enum(['node', 'organization', 'user'], { + description: + 'Level of access for workflows outside of the repository. Default is "none".', + }) + .optional(); + export { - repoUrl, - description, - homepage, access, - requireCodeOwnerReviews, - dismissStaleReviews, - requiredStatusCheckContexts, - requireBranchesToBeUpToDate, - requiredConversationResolution, - requireLastPushApproval, - repoVisibility, - deleteBranchOnMerge, - gitAuthorName, - gitAuthorEmail, + allowAutoMerge, allowMergeCommit, + allowRebaseMerge, allowSquashMerge, allowUpdateBranch, - squashMergeCommitTitle, - squashMergeCommitMessage, - allowRebaseMerge, - allowAutoMerge, + autoInit, + blockCreations, + branch, + bypassPullRequestAllowances, collaborators, + customProperties, + defaultBranch, + deleteBranchOnMerge, + description, + dismissStaleReviews, + gitAuthorEmail, + gitAuthorName, + gitCommitMessage, + hasIssues, hasProjects, hasWiki, - hasIssues, - token, - topics, - defaultBranch, - gitCommitMessage, - sourcePath, - repoVariables, - secrets, + homepage, oidcCustomization, - customProperties, - subscribe, - requiredApprovingReviewCount, - restrictions, - requiredCommitSigning, - requiredLinearHistory, protectDefaultBranch, protectEnforceAdmins, - bypassPullRequestAllowances, - branch, - blockCreations, - autoInit, + repoUrl, + repoVariables, + repoVisibility, + requireBranchesToBeUpToDate, + requireCodeOwnerReviews, + requiredApprovingReviewCount, + requiredCommitSigning, + requiredConversationResolution, + requiredLinearHistory, + requiredStatusCheckContexts, + requireLastPushApproval, + restrictions, + secrets, + sourcePath, + squashMergeCommitMessage, + squashMergeCommitTitle, + subscribe, + token, + topics, + workflowAccess, }; diff --git a/plugins/scaffolder-backend-module-github/src/actions/outputProperties.ts b/plugins/scaffolder-backend-module-github/src/actions/outputProperties.ts index a1ee53fec5..b35047083d 100644 --- a/plugins/scaffolder-backend-module-github/src/actions/outputProperties.ts +++ b/plugins/scaffolder-backend-module-github/src/actions/outputProperties.ts @@ -31,6 +31,4 @@ const commitHash = (z: typeof zod) => description: 'The git commit hash of the initial commit', }); -export { remoteUrl }; -export { repoContentsUrl }; -export { commitHash }; +export { commitHash, remoteUrl, repoContentsUrl };