@jakubmazanec/carson-templates 3.2.0-unstable.f510a46c → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -48,7 +48,7 @@ jobs:
|
|
|
48
48
|
let {promises: fs} = require('node:fs');
|
|
49
49
|
let path = require('node:path');
|
|
50
50
|
|
|
51
|
-
async function
|
|
51
|
+
async function getProjects(files) {
|
|
52
52
|
let names = [];
|
|
53
53
|
|
|
54
54
|
for (let file of files) {
|
|
@@ -60,16 +60,30 @@ jobs:
|
|
|
60
60
|
return names;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
async function createChangeset(fileName,
|
|
63
|
+
async function createChangeset(fileName, dependencyBumps, projects) {
|
|
64
64
|
let message = '';
|
|
65
65
|
|
|
66
|
-
for (let [
|
|
67
|
-
message = message + `Dependency \`${
|
|
66
|
+
for (let [dependencyName, bump] of dependencyBumps) {
|
|
67
|
+
message = message + `Dependency \`${dependencyName}\` updated to version \`${bump}\`.\n`;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
message = message.replace('\n', ' ');
|
|
71
71
|
|
|
72
|
-
let header =
|
|
72
|
+
let header = projects.map((projectName) => `'${projectName}': patch`).join('\n');
|
|
73
|
+
|
|
74
|
+
await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function createChangesetForCarsonTemplates(fileName, dependencyBumps, projects) {
|
|
78
|
+
let message = '';
|
|
79
|
+
|
|
80
|
+
for (let [dependencyName, bump] of dependencyBumps) {
|
|
81
|
+
message = message + `Applies templates from \`${dependencyName}\` updated to version \`${bump}\`.\n`;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
message = message.replace('\n', ' ');
|
|
85
|
+
|
|
86
|
+
let header = projects.map((projectName) => `'${projectName}': patch`).join('\n');
|
|
73
87
|
|
|
74
88
|
await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
|
|
75
89
|
}
|
|
@@ -94,19 +108,19 @@ jobs:
|
|
|
94
108
|
return bumps;
|
|
95
109
|
}
|
|
96
110
|
|
|
97
|
-
async function
|
|
111
|
+
async function getProjectsUsingCarsonTemplates(dir = process.cwd(), result = []) {
|
|
98
112
|
let entries = await fs.readdir(dir, {withFileTypes: true});
|
|
99
113
|
|
|
100
114
|
for (let entry of entries) {
|
|
101
115
|
let fullPath = path.join(dir, entry.name);
|
|
102
116
|
|
|
103
117
|
if (entry.isDirectory()) {
|
|
104
|
-
if (entry.name === '.carson') {
|
|
118
|
+
if (entry.name === '.carson' && dir !== process.cwd()) {
|
|
105
119
|
let packageJson = JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf8'));
|
|
106
120
|
|
|
107
121
|
result.push(packageJson.name);
|
|
108
122
|
} else {
|
|
109
|
-
await
|
|
123
|
+
await getProjectsUsingCarsonTemplates(fullPath, result);
|
|
110
124
|
}
|
|
111
125
|
}
|
|
112
126
|
}
|
|
@@ -124,20 +138,28 @@ jobs:
|
|
|
124
138
|
}
|
|
125
139
|
|
|
126
140
|
let files = diffFiles
|
|
127
|
-
.filter((file) => file !== 'package.json') // skip
|
|
141
|
+
.filter((file) => file !== 'package.json') // skip workspace package.json
|
|
142
|
+
.filter((file) => file.includes('package.json'));
|
|
143
|
+
let filesWithWorkspace = diffFiles
|
|
128
144
|
.filter((file) => file.includes('package.json'));
|
|
129
|
-
let packageNames = await getPackagesNames(files);
|
|
130
145
|
let {stdout: shortHash} = await exec.getExecOutput('git rev-parse --short HEAD');
|
|
131
|
-
let
|
|
132
|
-
let
|
|
146
|
+
let changesetName = `.changeset/renovate-${shortHash.trim()}.md`;
|
|
147
|
+
let projects = await getProjects(files);
|
|
148
|
+
let dependencyBumpsWithWorkspace = await getBumps(filesWithWorkspace);
|
|
133
149
|
|
|
134
150
|
if (
|
|
135
|
-
!
|
|
136
|
-
|
|
137
|
-
|
|
151
|
+
!projects.length &&
|
|
152
|
+
dependencyBumpsWithWorkspace.size === 1 &&
|
|
153
|
+
dependencyBumpsWithWorkspace.has('<%- TEMPLATE_PACKAGE_NAME %>')
|
|
138
154
|
) {
|
|
139
|
-
|
|
140
|
-
|
|
155
|
+
projects = await getProjectsUsingCarsonTemplates();
|
|
156
|
+
|
|
157
|
+
let dependencyBumps = await getBumps(filesWithWorkspace);
|
|
158
|
+
|
|
159
|
+
await createChangesetForCarsonTemplates(changesetName, dependencyBumps, projects);
|
|
160
|
+
|
|
161
|
+
return;
|
|
162
|
+
} else if (!projects.length) {
|
|
141
163
|
console.log('No package.json changes to published packages, skipping...');
|
|
142
164
|
|
|
143
165
|
await exec.exec('npx', ['changeset', '--empty']);
|
|
@@ -145,8 +167,9 @@ jobs:
|
|
|
145
167
|
return;
|
|
146
168
|
}
|
|
147
169
|
|
|
148
|
-
await
|
|
170
|
+
let dependencyBumps = await getBumps(files);
|
|
149
171
|
|
|
172
|
+
await createChangeset(changesetName, dependencyBumps, projects);
|
|
150
173
|
|
|
151
174
|
- name: Update Carson
|
|
152
175
|
run: |
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
to: '.github/workflows/manual-update-pull-request.yaml'
|
|
3
|
-
strategy: overwrite
|
|
4
|
-
---
|
|
5
|
-
#
|
|
6
|
-
# DO NOT EDIT!
|
|
7
|
-
# This file was autogenerated by Carson.
|
|
8
|
-
# Changes may cause incorrect behavior and will be lost when the file is regenerated.
|
|
9
|
-
#
|
|
10
|
-
# Run `npx carson update workspace` to regenerate.
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
name: Update pull request
|
|
14
|
-
|
|
15
|
-
on: [push]
|
|
16
|
-
|
|
17
|
-
jobs:
|
|
18
|
-
update_pull_request:
|
|
19
|
-
name: Update pull request
|
|
20
|
-
runs-on: ubuntu-latest
|
|
21
|
-
timeout-minutes: 15
|
|
22
|
-
steps:
|
|
23
|
-
- uses: actions/checkout@v4
|
|
24
|
-
with:
|
|
25
|
-
ref: ${{ github.head_ref }}
|
|
26
|
-
token: ${{ secrets.PAT }}
|
|
27
|
-
fetch-depth: 0
|
|
28
|
-
|
|
29
|
-
- name: Configure git
|
|
30
|
-
run: |
|
|
31
|
-
git config user.email "bot@mazanec.dev"
|
|
32
|
-
git config user.name "Bot"
|
|
33
|
-
|
|
34
|
-
- uses: actions/setup-node@v4
|
|
35
|
-
with:
|
|
36
|
-
node-version: <%- semver.major(semver.minVersion(DEPENDENCY_VERSIONS.node)) %>
|
|
37
|
-
|
|
38
|
-
- name: Install packages
|
|
39
|
-
run: npm ci
|
|
40
|
-
|
|
41
|
-
- name: Generate changeset
|
|
42
|
-
uses: actions/github-script@v6
|
|
43
|
-
with:
|
|
44
|
-
script: |
|
|
45
|
-
let {promises: fs} = require('node:fs');
|
|
46
|
-
let path = require('node:path');
|
|
47
|
-
|
|
48
|
-
async function getPackagesNames(files) {
|
|
49
|
-
let names = [];
|
|
50
|
-
|
|
51
|
-
for (let file of files) {
|
|
52
|
-
let packageJson = JSON.parse(await fs.readFile(file, 'utf8'));
|
|
53
|
-
|
|
54
|
-
names.push(packageJson.name);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return names;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
async function createChangeset(fileName, packageBumps, packages) {
|
|
61
|
-
let message = '';
|
|
62
|
-
|
|
63
|
-
for (let [packageName, bump] of packageBumps) {
|
|
64
|
-
message = message + `Dependency \`${packageName}\` updated to version \`${bump}\`.\n`;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
message = message.replace('\n', ' ');
|
|
68
|
-
|
|
69
|
-
let header = packages.map((packageName) => `'${packageName}': patch`).join('\n');
|
|
70
|
-
|
|
71
|
-
await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
async function getBumps(files) {
|
|
75
|
-
let bumps = new Map();
|
|
76
|
-
|
|
77
|
-
for (let file of files) {
|
|
78
|
-
let {stdout: changes} = await exec.getExecOutput('git', ['show', file]);
|
|
79
|
-
|
|
80
|
-
for (let change of changes.split('\n')) {
|
|
81
|
-
if (!change.startsWith('+ ')) {
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
let match = change.match(/"(.*?)"/g);
|
|
86
|
-
|
|
87
|
-
bumps.set(match[0].replace(/"/g, ''), match[1].replace(/"/g, ''));
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return bumps;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
async function getPackageUsingCarsonNames(dir = process.cwd(), result = []) {
|
|
95
|
-
let entries = await fs.readdir(dir, {withFileTypes: true});
|
|
96
|
-
|
|
97
|
-
for (let entry of entries) {
|
|
98
|
-
let fullPath = path.join(dir, entry.name);
|
|
99
|
-
|
|
100
|
-
if (entry.isDirectory()) {
|
|
101
|
-
if (entry.name === '.carson') {
|
|
102
|
-
let packageJson = JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf8'));
|
|
103
|
-
|
|
104
|
-
result.push(packageJson.name);
|
|
105
|
-
} else {
|
|
106
|
-
await getPackageUsingCarsonNames(fullPath, result);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return result;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
let diffOutput = await exec.getExecOutput('git diff --name-only HEAD~1');
|
|
115
|
-
let diffFiles = diffOutput.stdout.split('\n');
|
|
116
|
-
|
|
117
|
-
if (diffFiles.find((diffFile) => diffFile.startsWith('.changeset'))) {
|
|
118
|
-
console.log('Changeset already exists, skipping...');
|
|
119
|
-
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
let files = diffFiles
|
|
124
|
-
.filter((file) => file !== 'package.json') // skip root package.json
|
|
125
|
-
.filter((file) => file.includes('package.json'));
|
|
126
|
-
let packageNames = await getPackagesNames(files);
|
|
127
|
-
let {stdout: shortHash} = await exec.getExecOutput('git rev-parse --short HEAD');
|
|
128
|
-
let fileName = `.changeset/renovate-${shortHash.trim()}.md`;
|
|
129
|
-
let packageBumps = await getBumps(files);
|
|
130
|
-
|
|
131
|
-
if (
|
|
132
|
-
!packageNames.length &&
|
|
133
|
-
packageBumps.size === 1 &&
|
|
134
|
-
packageBumps.has('<%- TEMPLATE_PACKAGE_NAME %>')
|
|
135
|
-
) {
|
|
136
|
-
packageNames = await getPackageUsingCarsonNames();
|
|
137
|
-
} else if (!packageNames.length) {
|
|
138
|
-
console.log('No package.json changes to published packages, skipping...');
|
|
139
|
-
|
|
140
|
-
await exec.exec('npx', ['changeset', '--empty']);
|
|
141
|
-
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
await createChangeset(fileName, packageBumps, packageNames);
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
- name: Update Carson
|
|
149
|
-
run: |
|
|
150
|
-
npm install
|
|
151
|
-
|
|
152
|
-
- name: Commit and push changes
|
|
153
|
-
run: |
|
|
154
|
-
git add . --all
|
|
155
|
-
git commit -m"Update"
|
|
156
|
-
git push --force
|