From 96b196ae76f8c1f35c4f14d1950b25e32d20f44c Mon Sep 17 00:00:00 2001 From: QuiiBz Date: Thu, 21 Sep 2023 11:32:48 +0200 Subject: [PATCH 1/2] feat(changesets-renovate): ignore packages ignored in config --- .changeset/honest-vans-chew.md | 5 ++ .../src/__tests__/generate-changeset.ts | 75 ++++++++++++++++++- packages/changesets-renovate/src/index.ts | 31 ++++++++ 3 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 .changeset/honest-vans-chew.md diff --git a/.changeset/honest-vans-chew.md b/.changeset/honest-vans-chew.md new file mode 100644 index 000000000..98394c40d --- /dev/null +++ b/.changeset/honest-vans-chew.md @@ -0,0 +1,5 @@ +--- +'@scaleway/changesets-renovate': minor +--- + +Ignore packages that are ignored in the changeset config diff --git a/packages/changesets-renovate/src/__tests__/generate-changeset.ts b/packages/changesets-renovate/src/__tests__/generate-changeset.ts index 9f91a1a01..fe0a74d08 100644 --- a/packages/changesets-renovate/src/__tests__/generate-changeset.ts +++ b/packages/changesets-renovate/src/__tests__/generate-changeset.ts @@ -104,7 +104,8 @@ describe('generate changeset file', () => { fs.readFile = jest .fn() - .mockResolvedValue(`{"name":"packageName","version":"1.0.0"}`) + .mockResolvedValueOnce(`{}`) + .mockResolvedValueOnce(`{"name":"packageName","version":"1.0.0"}`) fs.writeFile = jest.fn() await run() @@ -138,7 +139,8 @@ describe('generate changeset file', () => { fs.readFile = jest .fn() - .mockResolvedValue(`{"name":"packageName","workspaces":[]}`) + .mockResolvedValueOnce(`{}`) + .mockResolvedValueOnce(`{"name":"packageName","workspaces":[]}`) fs.writeFile = jest.fn() await run() @@ -167,7 +169,74 @@ describe('generate changeset file', () => { `, }) - fs.readFile = jest.fn().mockResolvedValue(`{"name":"packageName"}`) + fs.readFile = jest + .fn() + .mockResolvedValueOnce(`{}`) + .mockResolvedValueOnce(`{"name":"packageName"}`) + fs.writeFile = jest.fn() + + await run() + + expect(fs.readFile).toHaveBeenCalledWith(file, 'utf8') + expect(console.log).toHaveBeenCalledWith('No packages modified, skipping') + }) + + it('should ignore changeset ignored packages', async () => { + const file = 'test/package.json' + + ;(simpleGit as jest.Mock).mockReturnValue({ + branch: () => ({ + current: 'renovate/test', + }), + diffSummary: () => ({ + files: [ + { + file, + }, + ], + }), + show: () => ` ++ "package": "version" ++ "package2": "version2" +`, + }) + + fs.readFile = jest + .fn() + .mockResolvedValueOnce(`{"ignore":["packageName"]}`) + .mockResolvedValueOnce(`{"name":"packageName","version":"1.0.0"}`) + fs.writeFile = jest.fn() + + await run() + + expect(fs.readFile).toHaveBeenCalledWith(file, 'utf8') + expect(console.log).toHaveBeenCalledWith('No packages modified, skipping') + }) + + it('should ignore changeset ignored packages with star', async () => { + const file = 'test/package.json' + + ;(simpleGit as jest.Mock).mockReturnValue({ + branch: () => ({ + current: 'renovate/test', + }), + diffSummary: () => ({ + files: [ + { + file, + }, + ], + }), + show: () => ` ++ "package": "version" ++ "package2": "version2" +`, + }) + + fs.readFile = jest + .fn() + .mockResolvedValueOnce(`{"ignore":["@example/*"]}`) + .mockResolvedValueOnce(`{"name":"@example/test","version":"1.0.0"}`) fs.writeFile = jest.fn() await run() diff --git a/packages/changesets-renovate/src/index.ts b/packages/changesets-renovate/src/index.ts index cc040986d..70b7fa85a 100644 --- a/packages/changesets-renovate/src/index.ts +++ b/packages/changesets-renovate/src/index.ts @@ -3,7 +3,34 @@ import fs from 'node:fs/promises' import { simpleGit } from 'simple-git' +async function getChangesetIgnoredPackages(): Promise { + const changesetConfig = JSON.parse( + await fs.readFile('.changeset/config.json', 'utf8'), + ) as { + ignore?: string[] + } + + return changesetConfig.ignore ?? [] +} + +function shouldIgnorePackage( + packageName: string, + ignoredPackages: string[], +): boolean { + console.log('packageName', packageName) + console.log('ignoredPackages', ignoredPackages) + + return ignoredPackages.some(ignoredPackage => { + if (ignoredPackage.endsWith('*')) { + return packageName.startsWith(ignoredPackage.slice(0, -1)) + } + + return packageName === ignoredPackage + }) +} + async function getPackagesNames(files: string[]): Promise { + const ignoredPackages = await getChangesetIgnoredPackages() const packages: string[] = [] const promises = files.map(async file => { @@ -13,6 +40,10 @@ async function getPackagesNames(files: string[]): Promise { version?: string } + if (shouldIgnorePackage(data.name, ignoredPackages)) { + return + } + // Do not generate changeset for the root package.json of a monorepo if (!data.workspaces && data.version) { packages.push(data.name) From bf936eb233a509dc4f5168c69dc22b22da72a5ce Mon Sep 17 00:00:00 2001 From: QuiiBz Date: Thu, 21 Sep 2023 11:34:30 +0200 Subject: [PATCH 2/2] fix: remove console log --- packages/changesets-renovate/src/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/changesets-renovate/src/index.ts b/packages/changesets-renovate/src/index.ts index 70b7fa85a..28b25d213 100644 --- a/packages/changesets-renovate/src/index.ts +++ b/packages/changesets-renovate/src/index.ts @@ -17,9 +17,6 @@ function shouldIgnorePackage( packageName: string, ignoredPackages: string[], ): boolean { - console.log('packageName', packageName) - console.log('ignoredPackages', ignoredPackages) - return ignoredPackages.some(ignoredPackage => { if (ignoredPackage.endsWith('*')) { return packageName.startsWith(ignoredPackage.slice(0, -1))