Skip to content

Commit f6aadb4

Browse files
authored
Merge branch 'main' into renovate/typescript-eslint-monorepo
2 parents f2e4a47 + d122517 commit f6aadb4

File tree

7 files changed

+202
-78
lines changed

7 files changed

+202
-78
lines changed

.changeset/clean-cougars-thank.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+
add an option to sort the message

.github/renovate.json

Lines changed: 67 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,107 @@
11
{
22
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
3-
"assignees": ["team:console"],
3+
"assignees": [
4+
"team:console"
5+
],
46
"assigneesSampleSize": 1,
57
"automerge": false,
68
"dependencyDashboard": true,
7-
"enabledManagers": ["github-actions", "npm"],
8-
"extends": ["config:base", ":combinePatchMinorReleases"],
9-
"labels": ["dependencies"],
9+
"enabledManagers": [
10+
"github-actions",
11+
"npm"
12+
],
13+
"extends": [
14+
"config:recommended",
15+
":combinePatchMinorReleases"
16+
],
17+
"labels": [
18+
"dependencies"
19+
],
1020
"prConcurrentLimit": 10,
1121
"prHourlyLimit": 5,
1222
"rangeStrategy": "pin",
1323
"rebaseWhen": "auto",
14-
"reviewers": ["team:console"],
24+
"reviewers": [
25+
"team:console"
26+
],
1527
"reviewersSampleSize": 2,
1628
"semanticCommitScope": "deps",
1729
"semanticCommitType": "chore",
18-
"ignorePaths": ["packages_deprecated/**/package.json"],
30+
"ignorePaths": [
31+
"packages_deprecated/**/package.json"
32+
],
1933
"packageRules": [
2034
{
21-
"matchDepTypes": ["engines", "peerDependencies"],
22-
"versionStrategy": "widen"
35+
"matchDepTypes": [
36+
"engines",
37+
"peerDependencies"
38+
],
39+
"rangeStrategy": "widen"
2340
},
2441
{
25-
"matchManagers": ["github-actions"],
42+
"matchManagers": [
43+
"github-actions"
44+
],
2645
"semanticCommitScope": "devDeps",
2746
"automerge": true,
2847
"autoApprove": true
2948
},
3049
{
3150
"semanticCommitScope": "devDeps",
32-
"matchDepTypes": ["packageManager", "devDependencies"],
33-
"matchUpdateTypes": ["major"]
51+
"matchDepTypes": [
52+
"packageManager",
53+
"devDependencies"
54+
],
55+
"matchUpdateTypes": [
56+
"major"
57+
]
3458
},
3559
{
3660
"semanticCommitScope": "devDeps",
37-
"matchDepTypes": ["packageManager", "devDependencies"],
38-
"matchUpdateTypes": ["minor", "patch"]
61+
"matchDepTypes": [
62+
"packageManager",
63+
"devDependencies"
64+
],
65+
"matchUpdateTypes": [
66+
"minor",
67+
"patch"
68+
]
3969
},
4070
{
41-
"labels": ["UPDATE-MAJOR"],
42-
"stabilityDays": 14,
43-
"matchUpdateTypes": ["major"]
71+
"labels": [
72+
"UPDATE-MAJOR"
73+
],
74+
"minimumReleaseAge": "14 days",
75+
"matchUpdateTypes": [
76+
"major"
77+
]
4478
},
4579
{
46-
"labels": ["UPDATE-MINOR"],
47-
"stabilityDays": 7,
48-
"matchUpdateTypes": ["minor"],
80+
"labels": [
81+
"UPDATE-MINOR"
82+
],
83+
"minimumReleaseAge": "7 days",
84+
"matchUpdateTypes": [
85+
"minor"
86+
],
4987
"automerge": true,
5088
"autoApprove": true
5189
},
5290
{
53-
"labels": ["UPDATE-PATCH"],
54-
"stabilityDays": 3,
55-
"matchUpdateTypes": ["patch"],
91+
"labels": [
92+
"UPDATE-PATCH"
93+
],
94+
"minimumReleaseAge": "3 days",
95+
"matchUpdateTypes": [
96+
"patch"
97+
],
5698
"automerge": true,
5799
"autoApprove": true
58100
},
59101
{
60-
"matchDepTypes": ["engines"],
102+
"matchDepTypes": [
103+
"engines"
104+
],
61105
"rangeStrategy": "widen"
62106
}
63107
]

packages/changesets-renovate/README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,36 @@ To skip checking the branch name starts `renovate/`
3434
SKIP_BRANCH_CHECK=TRUE changesets-renovate
3535
```
3636

37+
To sort both the package bumps and update messages alphabetically
38+
39+
```bash
40+
SORT_CHANGESETS=TRUE changesets-renovate
41+
```
42+
43+
Example:
44+
45+
Unsorted:
46+
```
47+
---
48+
'package-z': patch
49+
'package-a': patch
50+
---
51+
52+
Updated dependency `@company/zzz` to `0.228.0`.
53+
Updated dependency `@company/aaa` to `1.1.15`.
54+
Updated dependency `@company/zzz-backend` to `^0.228.0`.
55+
```
56+
57+
Sorted:
58+
```
59+
---
60+
'package-a': patch
61+
'package-z': patch
62+
---
63+
64+
Updated dependency `@company/aaa` to `1.1.15`.
65+
Updated dependency `@company/zzz-backend` to `^0.228.0`.
66+
Updated dependency `@company/zzz` to `0.228.0`.
67+
```
68+
3769
It's inspired by this GitHub Action from Backstage: https://github.com/backstage/backstage/blob/master/.github/workflows/sync_renovate-changesets.yml

packages/changesets-renovate/src/__tests__/__snapshots__/generate-changeset.test.ts.snap

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,32 @@ exports[`generate changeset file > should generate changeset file, commit and pu
3232
'packageName': patch
3333
---
3434
35-
Updated dependency \`package\` to \`version\`.
36-
Updated dependency \`package2\` to \`version2\`.
35+
Updated dependency \`packagez\` to \`version2\`.
36+
Updated dependency \`packagea\` to \`version\`.
37+
",
38+
],
39+
],
40+
"results": [
41+
{
42+
"type": "return",
43+
"value": undefined,
44+
},
45+
],
46+
}
47+
`;
48+
49+
exports[`generate changeset file > should generate sorted changeset file, but skip commit and push 1`] = `
50+
[MockFunction spy] {
51+
"calls": [
52+
[
53+
".changeset/renovate-test.md",
54+
"---
55+
'packageNameA': patch
56+
'packageNameB': patch
57+
---
58+
59+
Updated dependency \`packagea\` to \`version\`.
60+
Updated dependency \`packagez\` to \`version2\`.
3761
",
3862
],
3963
],

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

Lines changed: 0 additions & 47 deletions
This file was deleted.

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

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ beforeEach(() => {
1010
})
1111

1212
describe('generate changeset file', () => {
13+
beforeEach(() => {
14+
delete process.env['SKIP_BRANCH_CHECK']
15+
delete process.env['SKIP_COMMIT']
16+
delete process.env['BRANCH_PREFIX']
17+
delete process.env['SORT_CHANGESETS']
18+
})
19+
1320
it('should skip if not in renovate branch', async () => {
1421
mockSimpleGit.mockReturnValue({
1522
...defaultGitValues,
@@ -63,7 +70,6 @@ describe('generate changeset file', () => {
6370

6471
process.env['BRANCH_PREFIX'] = 'dep-upgrade/'
6572
await run()
66-
process.env['BRANCH_PREFIX'] = undefined
6773

6874
expect(console.log).not.toHaveBeenCalledWith(
6975
'Not a renovate branch, skipping',
@@ -113,7 +119,6 @@ describe('generate changeset file', () => {
113119

114120
process.env['SKIP_BRANCH_CHECK'] = 'TRUE'
115121
await run()
116-
process.env['SKIP_BRANCH_CHECK'] = undefined
117122

118123
expect(console.log).not.toHaveBeenCalledWith(
119124
'Not a renovate branch, skipping',
@@ -188,8 +193,8 @@ describe('generate changeset file', () => {
188193
],
189194
}),
190195
show: () => `
191-
+ "package": "version"
192-
+ "package2": "version2"
196+
+ "packagez": "version2"
197+
+ "packagea": "version"
193198
`,
194199
revparse,
195200
add,
@@ -260,6 +265,61 @@ describe('generate changeset file', () => {
260265
expect(push).not.toHaveBeenCalledTimes(1)
261266
})
262267

268+
it('should generate sorted changeset file, but skip commit and push', async () => {
269+
const rev = 'test'
270+
const fileName = `.changeset/renovate-${rev}.md`
271+
const fileA = 'test-a/package.json'
272+
const fileB = 'test-b/package.json'
273+
const revparse = vi.fn().mockReturnValue(rev)
274+
const add = vi.fn()
275+
const commit = vi.fn()
276+
const push = vi.fn()
277+
278+
mockSimpleGit.mockReturnValue({
279+
branch: () => ({
280+
current: 'renovate/test',
281+
}),
282+
diffSummary: () => ({
283+
files: [
284+
{
285+
file: fileB,
286+
},
287+
{
288+
file: fileA,
289+
},
290+
],
291+
}),
292+
show: () => `
293+
+ "packagez": "version2"
294+
+ "packagea": "version"
295+
`,
296+
revparse,
297+
add,
298+
commit,
299+
push,
300+
})
301+
302+
fs.readFile = vi
303+
.fn()
304+
.mockResolvedValueOnce(`{}`)
305+
.mockResolvedValueOnce(`{"name":"packageNameB","version":"1.1.1"}`)
306+
.mockResolvedValueOnce(`{"name":"packageNameA","version":"1.0.0"}`)
307+
fs.writeFile = vi.fn()
308+
309+
process.env['SKIP_COMMIT'] = 'TRUE'
310+
process.env['SORT_CHANGESETS'] = 'TRUE'
311+
await run()
312+
313+
expect(fs.readFile).toHaveBeenCalledWith(fileA, 'utf8')
314+
expect(fs.readFile).toHaveBeenCalledWith(fileB, 'utf8')
315+
expect(fs.writeFile).toMatchSnapshot()
316+
expect(add).not.toHaveBeenCalledWith(fileName)
317+
expect(commit).not.toHaveBeenCalledWith(
318+
`chore: add changeset renovate-${rev}`,
319+
)
320+
expect(push).not.toHaveBeenCalledTimes(1)
321+
})
322+
263323
it('should ignore workspace package.json', async () => {
264324
const file = 'package.json'
265325

packages/changesets-renovate/src/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,18 @@ async function createChangeset(
5959
packageBumps: Map<string, string>,
6060
packages: string[],
6161
) {
62-
let message = ''
62+
const messageLines = []
6363

6464
for (const [pkg, bump] of packageBumps) {
65-
message += `Updated dependency \`${pkg}\` to \`${bump}\`.\n`
65+
messageLines.push(`Updated dependency \`${pkg}\` to \`${bump}\`.`)
6666
}
6767

68+
if (process.env['SORT_CHANGESETS']) {
69+
packages.sort()
70+
messageLines.sort()
71+
}
72+
73+
const message = messageLines.join('\n')
6874
const pkgs = packages.map(pkg => `'${pkg}': patch`).join('\n')
6975
const body = `---\n${pkgs}\n---\n\n${message.trim()}\n`
7076
await fs.writeFile(fileName, body)

0 commit comments

Comments
 (0)