@jakubmazanec/carson-templates 3.1.3 → 3.2.0-next.e3084e5a

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jakubmazanec/carson-templates",
3
- "version": "3.1.3",
3
+ "version": "3.2.0-next.e3084e5a",
4
4
  "description": "Collection of Carson templates.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,9 +45,10 @@ jobs:
45
45
  uses: actions/github-script@v6
46
46
  with:
47
47
  script: |
48
- let { promises: fs } = require('fs');
48
+ let {promises: fs} = require('node:fs');
49
+ let path = require('node:path');
49
50
 
50
- async function getPackagesNames(files) {
51
+ async function getProjects(files) {
51
52
  let names = [];
52
53
 
53
54
  for (let file of files) {
@@ -59,19 +60,30 @@ jobs:
59
60
  return names;
60
61
  }
61
62
 
62
- async function createChangeset(fileName, packageBumps, packages) {
63
+ async function createChangeset(fileName, dependencyBumps, projects) {
63
64
  let message = '';
64
65
 
65
- for (let [packageName, bump] of packageBumps) {
66
- message =
67
- message + `Dependency \`${packageName}\` updated to version \`${bump}\`.\n`;
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 = packages
73
- .map((packageName) => `'${packageName}': patch`)
74
- .join('\n');
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');
75
87
 
76
88
  await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
77
89
  }
@@ -80,7 +92,7 @@ jobs:
80
92
  let bumps = new Map();
81
93
 
82
94
  for (let file of files) {
83
- let { stdout: changes } = await exec.getExecOutput('git', ['show', file]);
95
+ let {stdout: changes} = await exec.getExecOutput('git', ['show', file]);
84
96
 
85
97
  for (let change of changes.split('\n')) {
86
98
  if (!change.startsWith('+ ')) {
@@ -96,6 +108,26 @@ jobs:
96
108
  return bumps;
97
109
  }
98
110
 
111
+ async function getProjectsUsingCarsonTemplates(dir = process.cwd(), result = []) {
112
+ let entries = await fs.readdir(dir, {withFileTypes: true});
113
+
114
+ for (let entry of entries) {
115
+ let fullPath = path.join(dir, entry.name);
116
+
117
+ if (entry.isDirectory()) {
118
+ if (entry.name === '.carson' && dir !== process.cwd()) {
119
+ let packageJson = JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf8'));
120
+
121
+ result.push(packageJson.name);
122
+ } else {
123
+ await getProjectsUsingCarsonTemplates(fullPath, result);
124
+ }
125
+ }
126
+ }
127
+
128
+ return result;
129
+ }
130
+
99
131
  let diffOutput = await exec.getExecOutput('git diff --name-only HEAD~1');
100
132
  let diffFiles = diffOutput.stdout.split('\n');
101
133
 
@@ -106,11 +138,28 @@ jobs:
106
138
  }
107
139
 
108
140
  let files = diffFiles
109
- .filter((file) => file !== 'package.json') // skip root package.json
141
+ .filter((file) => file !== 'package.json') // skip workspace package.json
142
+ .filter((file) => file.includes('package.json'));
143
+ let filesWithWorkspace = diffFiles
110
144
  .filter((file) => file.includes('package.json'));
111
- let packageNames = await getPackagesNames(files);
145
+ let {stdout: shortHash} = await exec.getExecOutput('git rev-parse --short HEAD');
146
+ let changesetName = `.changeset/renovate-${shortHash.trim()}.md`;
147
+ let projects = await getProjects(files);
148
+ let dependencyBumpsWithWorkspace = await getBumps(filesWithWorkspace);
149
+
150
+ if (
151
+ !projects.length &&
152
+ dependencyBumpsWithWorkspace.size === 1 &&
153
+ dependencyBumpsWithWorkspace.has('<%- TEMPLATE_PACKAGE_NAME %>')
154
+ ) {
155
+ projects = await getProjectsUsingCarsonTemplates();
112
156
 
113
- if (!packageNames.length) {
157
+ let dependencyBumps = await getBumps(filesWithWorkspace);
158
+
159
+ await createChangesetForCarsonTemplates(changesetName, dependencyBumps, projects);
160
+
161
+ return;
162
+ } else if (!projects.length) {
114
163
  console.log('No package.json changes to published packages, skipping...');
115
164
 
116
165
  await exec.exec('npx', ['changeset', '--empty']);
@@ -118,13 +167,9 @@ jobs:
118
167
  return;
119
168
  }
120
169
 
121
- let { stdout: shortHash } = await exec.getExecOutput(
122
- 'git rev-parse --short HEAD',
123
- );
124
- let fileName = `.changeset/renovate-${shortHash.trim()}.md`;
125
- let packageBumps = await getBumps(files);
170
+ let dependencyBumps = await getBumps(files);
126
171
 
127
- await createChangeset(fileName, packageBumps, packageNames);
172
+ await createChangeset(changesetName, dependencyBumps, projects);
128
173
 
129
174
  - name: Update Carson
130
175
  run: |