@jakubmazanec/carson-templates 3.1.3 → 3.2.0-unstable.2bf2d5ce

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-unstable.2bf2d5ce",
4
4
  "description": "Collection of Carson templates.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,179 @@
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 getProjects(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, dependencyBumps, projects) {
61
+ let message = '';
62
+
63
+ for (let [dependencyName, bump] of dependencyBumps) {
64
+ message = message + `Dependency \`${dependencyName}\` updated to version \`${bump}\`.\n`;
65
+ }
66
+
67
+ message = message.replace('\n', ' ');
68
+
69
+ let header = projects.map((projectName) => `'${projectName}': patch`).join('\n');
70
+
71
+ await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
72
+ }
73
+
74
+ async function createChangesetForCarsonTemplates(fileName, dependencyBumps, projects) {
75
+ let message = '';
76
+
77
+ for (let [dependencyName, bump] of dependencyBumps) {
78
+ message = message + `Applies templates from \`${dependencyName}\` updated to version \`${bump}\`.\n`;
79
+ }
80
+
81
+ message = message.replace('\n', ' ');
82
+
83
+ let header = projects.map((projectName) => `'${projectName}': patch`).join('\n');
84
+
85
+ await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
86
+ }
87
+
88
+ async function getBumps(files) {
89
+ let bumps = new Map();
90
+
91
+ for (let file of files) {
92
+ let {stdout: changes} = await exec.getExecOutput('git', ['show', file]);
93
+
94
+ for (let change of changes.split('\n')) {
95
+ if (!change.startsWith('+ ')) {
96
+ continue;
97
+ }
98
+
99
+ let match = change.match(/"(.*?)"/g);
100
+
101
+ bumps.set(match[0].replace(/"/g, ''), match[1].replace(/"/g, ''));
102
+ }
103
+ }
104
+
105
+ return bumps;
106
+ }
107
+
108
+ async function getProjectsUsingCarsonTemplates(dir = process.cwd(), result = []) {
109
+ let entries = await fs.readdir(dir, {withFileTypes: true});
110
+
111
+ for (let entry of entries) {
112
+ let fullPath = path.join(dir, entry.name);
113
+
114
+ if (entry.isDirectory()) {
115
+ if (entry.name === '.carson' && dir !== process.cwd()) {
116
+ let packageJson = JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf8'));
117
+
118
+ result.push(packageJson.name);
119
+ } else {
120
+ await getProjectsUsingCarsonTemplates(fullPath, result);
121
+ }
122
+ }
123
+ }
124
+
125
+ return result;
126
+ }
127
+
128
+ let diffOutput = await exec.getExecOutput('git diff --name-only HEAD~1');
129
+ let diffFiles = diffOutput.stdout.split('\n');
130
+
131
+ if (diffFiles.find((diffFile) => diffFile.startsWith('.changeset'))) {
132
+ console.log('Changeset already exists, skipping...');
133
+
134
+ return;
135
+ }
136
+
137
+ let files = diffFiles
138
+ .filter((file) => file !== 'package.json') // skip root package.json
139
+ .filter((file) => file.includes('package.json'));
140
+ let filesWithWorkspace = diffFiles
141
+ .filter((file) => file.includes('package.json'));
142
+ let {stdout: shortHash} = await exec.getExecOutput('git rev-parse --short HEAD');
143
+ let changesetName = `.changeset/renovate-${shortHash.trim()}.md`;
144
+ let projects = await getProjects(files);
145
+ let dependencyBumpsWithWorkspace = await getBumps(filesWithWorkspace);
146
+
147
+ if (
148
+ !projects.length &&
149
+ dependencyBumpsWithWorkspace.size === 1 &&
150
+ dependencyBumpsWithWorkspace.has('<%- TEMPLATE_PACKAGE_NAME %>')
151
+ ) {
152
+ projects = await getProjectsUsingCarsonTemplates();
153
+
154
+ let dependencyBumps = await getBumps(filesWithWorkspace);
155
+
156
+ await createChangesetForCarsonTemplates(changesetName, dependencyBumps, projects);
157
+
158
+ return;
159
+ } else if (!projects.length) {
160
+ console.log('No package.json changes to published packages, skipping...');
161
+
162
+ await exec.exec('npx', ['changeset', '--empty']);
163
+
164
+ return;
165
+ }
166
+
167
+ let dependencyBumps = await getBumps(files);
168
+
169
+ await createChangeset(changesetName, dependencyBumps, projects);
170
+
171
+ - name: Update Carson
172
+ run: |
173
+ npm install
174
+
175
+ - name: Commit and push changes
176
+ run: |
177
+ git add . --all
178
+ git commit -m"Update"
179
+ git push --force
@@ -45,7 +45,8 @@ 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
51
  async function getPackagesNames(files) {
51
52
  let names = [];
@@ -63,15 +64,12 @@ jobs:
63
64
  let message = '';
64
65
 
65
66
  for (let [packageName, bump] of packageBumps) {
66
- message =
67
- message + `Dependency \`${packageName}\` updated to version \`${bump}\`.\n`;
67
+ message = message + `Dependency \`${packageName}\` 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 = packages.map((packageName) => `'${packageName}': patch`).join('\n');
75
73
 
76
74
  await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
77
75
  }
@@ -80,7 +78,7 @@ jobs:
80
78
  let bumps = new Map();
81
79
 
82
80
  for (let file of files) {
83
- let { stdout: changes } = await exec.getExecOutput('git', ['show', file]);
81
+ let {stdout: changes} = await exec.getExecOutput('git', ['show', file]);
84
82
 
85
83
  for (let change of changes.split('\n')) {
86
84
  if (!change.startsWith('+ ')) {
@@ -96,6 +94,26 @@ jobs:
96
94
  return bumps;
97
95
  }
98
96
 
97
+ async function getPackageUsingCarsonNames(dir = process.cwd(), result = []) {
98
+ let entries = await fs.readdir(dir, {withFileTypes: true});
99
+
100
+ for (let entry of entries) {
101
+ let fullPath = path.join(dir, entry.name);
102
+
103
+ if (entry.isDirectory()) {
104
+ if (entry.name === '.carson') {
105
+ let packageJson = JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf8'));
106
+
107
+ result.push(packageJson.name);
108
+ } else {
109
+ await getPackageUsingCarsonNames(fullPath, result);
110
+ }
111
+ }
112
+ }
113
+
114
+ return result;
115
+ }
116
+
99
117
  let diffOutput = await exec.getExecOutput('git diff --name-only HEAD~1');
100
118
  let diffFiles = diffOutput.stdout.split('\n');
101
119
 
@@ -109,8 +127,17 @@ jobs:
109
127
  .filter((file) => file !== 'package.json') // skip root package.json
110
128
  .filter((file) => file.includes('package.json'));
111
129
  let packageNames = await getPackagesNames(files);
130
+ let {stdout: shortHash} = await exec.getExecOutput('git rev-parse --short HEAD');
131
+ let fileName = `.changeset/renovate-${shortHash.trim()}.md`;
132
+ let packageBumps = await getBumps(files);
112
133
 
113
- if (!packageNames.length) {
134
+ if (
135
+ !packageNames.length &&
136
+ packageBumps.size === 1 &&
137
+ packageBumps.has('<%- TEMPLATE_PACKAGE_NAME %>')
138
+ ) {
139
+ packageNames = await getPackageUsingCarsonNames();
140
+ } else if (!packageNames.length) {
114
141
  console.log('No package.json changes to published packages, skipping...');
115
142
 
116
143
  await exec.exec('npx', ['changeset', '--empty']);
@@ -118,14 +145,9 @@ jobs:
118
145
  return;
119
146
  }
120
147
 
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);
126
-
127
148
  await createChangeset(fileName, packageBumps, packageNames);
128
149
 
150
+
129
151
  - name: Update Carson
130
152
  run: |
131
153
  npm install