From 60f1b70cac817a15efdbe7b897f063dd03846597 Mon Sep 17 00:00:00 2001 From: ImOverlord Date: Wed, 7 Aug 2024 17:57:00 +0200 Subject: [PATCH 1/3] feat(changesets-renovate): add option to skip branch check --- .changeset/fresh-zebras-eat.md | 5 ++ packages/changesets-renovate/README.md | 6 +++ .../generate-changeset.test.ts.snap | 46 +++++++++++++++++ .../src/__tests__/generate-changeset.test.ts | 50 +++++++++++++++++++ packages/changesets-renovate/src/index.ts | 5 +- 5 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 .changeset/fresh-zebras-eat.md diff --git a/.changeset/fresh-zebras-eat.md b/.changeset/fresh-zebras-eat.md new file mode 100644 index 000000000..d8cef540e --- /dev/null +++ b/.changeset/fresh-zebras-eat.md @@ -0,0 +1,5 @@ +--- +"@scaleway/changesets-renovate": minor +--- + +Add `SKIP_BRANCH_CHECK` as an option to not check branch name diff --git a/packages/changesets-renovate/README.md b/packages/changesets-renovate/README.md index 3287233e0..d49b03322 100644 --- a/packages/changesets-renovate/README.md +++ b/packages/changesets-renovate/README.md @@ -22,4 +22,10 @@ To skip committing the changeset. SKIP_COMMIT=TRUE changesets-renovate ``` +To skip checking the branch name starts `renovate/` + +```bash +SKIP_BRANCH_CHECK=TRUE changesets-renovate +``` + It's inspired by this GitHub Action from Backstage: https://github.com/backstage/backstage/blob/master/.github/workflows/sync_renovate-changesets.yml diff --git a/packages/changesets-renovate/src/__tests__/__snapshots__/generate-changeset.test.ts.snap b/packages/changesets-renovate/src/__tests__/__snapshots__/generate-changeset.test.ts.snap index 7bac09101..a6926e44b 100644 --- a/packages/changesets-renovate/src/__tests__/__snapshots__/generate-changeset.test.ts.snap +++ b/packages/changesets-renovate/src/__tests__/__snapshots__/generate-changeset.test.ts.snap @@ -45,3 +45,49 @@ Updated dependency \`package2\` to \`version2\`. ], } `; + +exports[`generate changeset file > should not skip if not in renovate branch, when branch check skip is true 1`] = ` +[MockFunction spy] { + "calls": [ + [ + ".changeset/renovate-test.md", + "--- +'packageName': patch +--- + +Updated dependency \`package\` to \`version\`. +Updated dependency \`package2\` to \`version2\`. +", + ], + ], + "results": [ + { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`generate changeset file > should skip if not in renovate branch 1`] = ` +[MockFunction spy] { + "calls": [ + [ + ".changeset/renovate-test.md", + "--- +'packageName': patch +--- + +Updated dependency \`package\` to \`version\`. +Updated dependency \`package2\` to \`version2\`. +", + ], + ], + "results": [ + { + "type": "return", + "value": undefined, + }, + ], +} +`; diff --git a/packages/changesets-renovate/src/__tests__/generate-changeset.test.ts b/packages/changesets-renovate/src/__tests__/generate-changeset.test.ts index c6fb131f3..bf9f82d0a 100644 --- a/packages/changesets-renovate/src/__tests__/generate-changeset.test.ts +++ b/packages/changesets-renovate/src/__tests__/generate-changeset.test.ts @@ -25,6 +25,56 @@ describe('generate changeset file', () => { expect(console.log).toHaveBeenCalledWith('Not a renovate branch, skipping') }) + it('should not skip if not in renovate branch, when branch check skip is true', async () => { + process.env['SKIP_BRANCH_CHECK'] = 'TRUE' + + const rev = 'test' + const fileName = `.changeset/renovate-${rev}.md` + const file = 'test/package.json' + const revparse = vi.fn().mockReturnValue(rev) + const add = vi.fn() + const commit = vi.fn() + const push = vi.fn() + + mockSimpleGit.mockReturnValue({ + branch: () => ({ + current: 'main', + }), + diffSummary: () => ({ + files: [ + { + file, + }, + ], + }), + show: () => ` ++ "package": "version" ++ "package2": "version2" +`, + revparse, + add, + commit, + push, + }) + + fs.readFile = vi + .fn() + .mockResolvedValueOnce(`{}`) + .mockResolvedValueOnce(`{"name":"packageName","version":"1.0.0"}`) + fs.writeFile = vi.fn() + + await run() + + expect(console.log).not.toHaveBeenCalledWith( + 'Not a renovate branch, skipping', + ) + expect(fs.readFile).toHaveBeenCalledWith(file, 'utf8') + expect(fs.writeFile).toMatchSnapshot() + expect(add).toHaveBeenCalledWith(fileName) + expect(commit).toHaveBeenCalledWith(`chore: add changeset renovate-${rev}`) + expect(push).toHaveBeenCalledTimes(1) + }) + it('should skip if .changeset is already modified', async () => { mockSimpleGit.mockReturnValue({ ...defaultGitValues, diff --git a/packages/changesets-renovate/src/index.ts b/packages/changesets-renovate/src/index.ts index 98d9e9244..9c638418c 100644 --- a/packages/changesets-renovate/src/index.ts +++ b/packages/changesets-renovate/src/index.ts @@ -97,7 +97,10 @@ export async function run() { console.log('Detected branch:', branch) - if (!branch.current.startsWith('renovate/')) { + if ( + !branch.current.startsWith('renovate/') && + !process.env['SKIP_BRANCH_CHECK'] + ) { console.log('Not a renovate branch, skipping') return From f97e5096470a8ae1c640bc6d62dc8734f7271fa4 Mon Sep 17 00:00:00 2001 From: ImOverlord Date: Tue, 13 Aug 2024 15:21:01 +0200 Subject: [PATCH 2/3] feat(changeset-renovate): add option to have custom renovate branch prefix --- .../generate-changeset.test.ts.snap | 4 +- .../src/__tests__/generate-changeset.test.ts | 54 ++++++++++++++++++- packages/changesets-renovate/src/index.ts | 3 +- 3 files changed, 56 insertions(+), 5 deletions(-) diff --git a/packages/changesets-renovate/src/__tests__/__snapshots__/generate-changeset.test.ts.snap b/packages/changesets-renovate/src/__tests__/__snapshots__/generate-changeset.test.ts.snap index a6926e44b..3d400f5a3 100644 --- a/packages/changesets-renovate/src/__tests__/__snapshots__/generate-changeset.test.ts.snap +++ b/packages/changesets-renovate/src/__tests__/__snapshots__/generate-changeset.test.ts.snap @@ -46,7 +46,7 @@ Updated dependency \`package2\` to \`version2\`. } `; -exports[`generate changeset file > should not skip if not in renovate branch, when branch check skip is true 1`] = ` +exports[`generate changeset file > should not skip if branch starts with custom branch prefix 1`] = ` [MockFunction spy] { "calls": [ [ @@ -69,7 +69,7 @@ Updated dependency \`package2\` to \`version2\`. } `; -exports[`generate changeset file > should skip if not in renovate branch 1`] = ` +exports[`generate changeset file > should not skip if not in renovate branch, when branch check skip is true 1`] = ` [MockFunction spy] { "calls": [ [ diff --git a/packages/changesets-renovate/src/__tests__/generate-changeset.test.ts b/packages/changesets-renovate/src/__tests__/generate-changeset.test.ts index bf9f82d0a..ca9b644f4 100644 --- a/packages/changesets-renovate/src/__tests__/generate-changeset.test.ts +++ b/packages/changesets-renovate/src/__tests__/generate-changeset.test.ts @@ -25,9 +25,57 @@ describe('generate changeset file', () => { expect(console.log).toHaveBeenCalledWith('Not a renovate branch, skipping') }) - it('should not skip if not in renovate branch, when branch check skip is true', async () => { - process.env['SKIP_BRANCH_CHECK'] = 'TRUE' + it('should not skip if branch starts with custom branch prefix', async () => { + const rev = 'test' + const fileName = `.changeset/renovate-${rev}.md` + const file = 'test/package.json' + const revparse = vi.fn().mockReturnValue(rev) + const add = vi.fn() + const commit = vi.fn() + const push = vi.fn() + mockSimpleGit.mockReturnValue({ + branch: () => ({ + current: 'dep-upgrade/test', + }), + diffSummary: () => ({ + files: [ + { + file, + }, + ], + }), + show: () => ` ++ "package": "version" ++ "package2": "version2" +`, + revparse, + add, + commit, + push, + }) + + fs.readFile = vi + .fn() + .mockResolvedValueOnce(`{}`) + .mockResolvedValueOnce(`{"name":"packageName","version":"1.0.0"}`) + fs.writeFile = vi.fn() + + process.env['BRANCH_PREFIX'] = 'dep-upgrade/' + await run() + process.env['BRANCH_PREFIX'] = undefined + + expect(console.log).not.toHaveBeenCalledWith( + 'Not a renovate branch, skipping', + ) + expect(fs.readFile).toHaveBeenCalledWith(file, 'utf8') + expect(fs.writeFile).toMatchSnapshot() + expect(add).toHaveBeenCalledWith(fileName) + expect(commit).toHaveBeenCalledWith(`chore: add changeset renovate-${rev}`) + expect(push).toHaveBeenCalledTimes(1) + }) + + it('should not skip if not in renovate branch, when branch check skip is true', async () => { const rev = 'test' const fileName = `.changeset/renovate-${rev}.md` const file = 'test/package.json' @@ -63,7 +111,9 @@ describe('generate changeset file', () => { .mockResolvedValueOnce(`{"name":"packageName","version":"1.0.0"}`) fs.writeFile = vi.fn() + process.env['SKIP_BRANCH_CHECK'] = 'TRUE' await run() + process.env['SKIP_BRANCH_CHECK'] = undefined expect(console.log).not.toHaveBeenCalledWith( 'Not a renovate branch, skipping', diff --git a/packages/changesets-renovate/src/index.ts b/packages/changesets-renovate/src/index.ts index 9c638418c..25682b429 100644 --- a/packages/changesets-renovate/src/index.ts +++ b/packages/changesets-renovate/src/index.ts @@ -94,11 +94,12 @@ async function getBumps(files: string[]): Promise> { export async function run() { const branch = await simpleGit().branch() + const branchPrefix = process.env['BRANCH_PREFIX'] ?? 'renovate/' console.log('Detected branch:', branch) if ( - !branch.current.startsWith('renovate/') && + !branch.current.startsWith(branchPrefix) && !process.env['SKIP_BRANCH_CHECK'] ) { console.log('Not a renovate branch, skipping') From c76f966631a426b064bfd7cb5646dac63649b84d Mon Sep 17 00:00:00 2001 From: ImOverlord Date: Tue, 13 Aug 2024 15:24:34 +0200 Subject: [PATCH 3/3] chore(changeset-renovate): update readme --- packages/changesets-renovate/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/changesets-renovate/README.md b/packages/changesets-renovate/README.md index d49b03322..da823e30b 100644 --- a/packages/changesets-renovate/README.md +++ b/packages/changesets-renovate/README.md @@ -22,6 +22,12 @@ To skip committing the changeset. SKIP_COMMIT=TRUE changesets-renovate ``` +To have a custom prefix for renovate branch name instead of `renovate/` + +```bash +BRANCH_PREFIX=dep-upgrade changesets-renovate +``` + To skip checking the branch name starts `renovate/` ```bash