Skip to content

Commit 5f1fc75

Browse files
author
Tom Lienard
authored
feat(changesets-renovate): ignore packages ignored in config (#1531)
* feat(changesets-renovate): ignore packages ignored in config * fix: remove console log
1 parent 26aeea5 commit 5f1fc75

File tree

3 files changed

+105
-3
lines changed

3 files changed

+105
-3
lines changed

.changeset/honest-vans-chew.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@scaleway/changesets-renovate': minor
3+
---
4+
5+
Ignore packages that are ignored in the changeset config

packages/changesets-renovate/src/__tests__/generate-changeset.ts

Lines changed: 72 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ describe('generate changeset file', () => {
104104

105105
fs.readFile = jest
106106
.fn<any>()
107-
.mockResolvedValue(`{"name":"packageName","version":"1.0.0"}`)
107+
.mockResolvedValueOnce(`{}`)
108+
.mockResolvedValueOnce(`{"name":"packageName","version":"1.0.0"}`)
108109
fs.writeFile = jest.fn<any>()
109110

110111
await run()
@@ -138,7 +139,8 @@ describe('generate changeset file', () => {
138139

139140
fs.readFile = jest
140141
.fn<any>()
141-
.mockResolvedValue(`{"name":"packageName","workspaces":[]}`)
142+
.mockResolvedValueOnce(`{}`)
143+
.mockResolvedValueOnce(`{"name":"packageName","workspaces":[]}`)
142144
fs.writeFile = jest.fn<any>()
143145

144146
await run()
@@ -167,7 +169,74 @@ describe('generate changeset file', () => {
167169
`,
168170
})
169171

170-
fs.readFile = jest.fn<any>().mockResolvedValue(`{"name":"packageName"}`)
172+
fs.readFile = jest
173+
.fn<any>()
174+
.mockResolvedValueOnce(`{}`)
175+
.mockResolvedValueOnce(`{"name":"packageName"}`)
176+
fs.writeFile = jest.fn<any>()
177+
178+
await run()
179+
180+
expect(fs.readFile).toHaveBeenCalledWith(file, 'utf8')
181+
expect(console.log).toHaveBeenCalledWith('No packages modified, skipping')
182+
})
183+
184+
it('should ignore changeset ignored packages', async () => {
185+
const file = 'test/package.json'
186+
187+
;(simpleGit as jest.Mock).mockReturnValue({
188+
branch: () => ({
189+
current: 'renovate/test',
190+
}),
191+
diffSummary: () => ({
192+
files: [
193+
{
194+
file,
195+
},
196+
],
197+
}),
198+
show: () => `
199+
+ "package": "version"
200+
+ "package2": "version2"
201+
`,
202+
})
203+
204+
fs.readFile = jest
205+
.fn<any>()
206+
.mockResolvedValueOnce(`{"ignore":["packageName"]}`)
207+
.mockResolvedValueOnce(`{"name":"packageName","version":"1.0.0"}`)
208+
fs.writeFile = jest.fn<any>()
209+
210+
await run()
211+
212+
expect(fs.readFile).toHaveBeenCalledWith(file, 'utf8')
213+
expect(console.log).toHaveBeenCalledWith('No packages modified, skipping')
214+
})
215+
216+
it('should ignore changeset ignored packages with star', async () => {
217+
const file = 'test/package.json'
218+
219+
;(simpleGit as jest.Mock).mockReturnValue({
220+
branch: () => ({
221+
current: 'renovate/test',
222+
}),
223+
diffSummary: () => ({
224+
files: [
225+
{
226+
file,
227+
},
228+
],
229+
}),
230+
show: () => `
231+
+ "package": "version"
232+
+ "package2": "version2"
233+
`,
234+
})
235+
236+
fs.readFile = jest
237+
.fn<any>()
238+
.mockResolvedValueOnce(`{"ignore":["@example/*"]}`)
239+
.mockResolvedValueOnce(`{"name":"@example/test","version":"1.0.0"}`)
171240
fs.writeFile = jest.fn<any>()
172241

173242
await run()

packages/changesets-renovate/src/index.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,31 @@
33
import fs from 'node:fs/promises'
44
import { simpleGit } from 'simple-git'
55

6+
async function getChangesetIgnoredPackages(): Promise<string[]> {
7+
const changesetConfig = JSON.parse(
8+
await fs.readFile('.changeset/config.json', 'utf8'),
9+
) as {
10+
ignore?: string[]
11+
}
12+
13+
return changesetConfig.ignore ?? []
14+
}
15+
16+
function shouldIgnorePackage(
17+
packageName: string,
18+
ignoredPackages: string[],
19+
): boolean {
20+
return ignoredPackages.some(ignoredPackage => {
21+
if (ignoredPackage.endsWith('*')) {
22+
return packageName.startsWith(ignoredPackage.slice(0, -1))
23+
}
24+
25+
return packageName === ignoredPackage
26+
})
27+
}
28+
629
async function getPackagesNames(files: string[]): Promise<string[]> {
30+
const ignoredPackages = await getChangesetIgnoredPackages()
731
const packages: string[] = []
832

933
const promises = files.map(async file => {
@@ -13,6 +37,10 @@ async function getPackagesNames(files: string[]): Promise<string[]> {
1337
version?: string
1438
}
1539

40+
if (shouldIgnorePackage(data.name, ignoredPackages)) {
41+
return
42+
}
43+
1644
// Do not generate changeset for the root package.json of a monorepo
1745
if (!data.workspaces && data.version) {
1846
packages.push(data.name)

0 commit comments

Comments
 (0)