@hardlydifficult/ci-scripts 1.0.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/dist/check-pinned-deps.d.ts +10 -0
- package/dist/check-pinned-deps.d.ts.map +1 -0
- package/dist/check-pinned-deps.js +80 -0
- package/dist/check-pinned-deps.js.map +1 -0
- package/dist/publish.d.ts +18 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +357 -0
- package/dist/publish.js.map +1 -0
- package/package.json +21 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Checks that all dependencies in package.json files use pinned versions.
|
|
4
|
+
* Fails if any dependency uses ^ or ~ prefixes.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx check-pinned-deps
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=check-pinned-deps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-pinned-deps.d.ts","sourceRoot":"","sources":["../src/check-pinned-deps.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Checks that all dependencies in package.json files use pinned versions.
|
|
5
|
+
* Fails if any dependency uses ^ or ~ prefixes.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx check-pinned-deps
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
const DEPENDENCY_FIELDS = [
|
|
14
|
+
'dependencies',
|
|
15
|
+
'devDependencies',
|
|
16
|
+
'peerDependencies',
|
|
17
|
+
'optionalDependencies',
|
|
18
|
+
];
|
|
19
|
+
const UNPINNED_PATTERN = /^[\^~]/;
|
|
20
|
+
function findPackageJsonFiles(dir, files = []) {
|
|
21
|
+
const entries = (0, fs_1.readdirSync)(dir);
|
|
22
|
+
for (const entry of entries) {
|
|
23
|
+
const fullPath = (0, path_1.join)(dir, entry);
|
|
24
|
+
if (entry === 'node_modules' || entry === 'dist') {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const stat = (0, fs_1.statSync)(fullPath);
|
|
28
|
+
if (stat.isDirectory()) {
|
|
29
|
+
findPackageJsonFiles(fullPath, files);
|
|
30
|
+
}
|
|
31
|
+
else if (entry === 'package.json') {
|
|
32
|
+
files.push(fullPath);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return files;
|
|
36
|
+
}
|
|
37
|
+
function checkPackageJson(filePath) {
|
|
38
|
+
const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
|
|
39
|
+
const pkg = JSON.parse(content);
|
|
40
|
+
const errors = [];
|
|
41
|
+
for (const field of DEPENDENCY_FIELDS) {
|
|
42
|
+
const deps = pkg[field];
|
|
43
|
+
if (!deps) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
for (const [name, version] of Object.entries(deps)) {
|
|
47
|
+
if (UNPINNED_PATTERN.test(version)) {
|
|
48
|
+
errors.push({
|
|
49
|
+
file: filePath,
|
|
50
|
+
field,
|
|
51
|
+
package: name,
|
|
52
|
+
version,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return errors;
|
|
58
|
+
}
|
|
59
|
+
function main() {
|
|
60
|
+
const rootDir = process.cwd();
|
|
61
|
+
const packageFiles = findPackageJsonFiles(rootDir);
|
|
62
|
+
const allErrors = [];
|
|
63
|
+
for (const file of packageFiles) {
|
|
64
|
+
const errors = checkPackageJson(file);
|
|
65
|
+
allErrors.push(...errors);
|
|
66
|
+
}
|
|
67
|
+
if (allErrors.length > 0) {
|
|
68
|
+
console.error('Found unpinned dependencies:\n');
|
|
69
|
+
for (const error of allErrors) {
|
|
70
|
+
console.error(` ${error.file}\n ${error.field}.${error.package}: "${error.version}"\n`);
|
|
71
|
+
}
|
|
72
|
+
console.error('\nAll dependencies must use exact versions (no ^ or ~ prefixes).');
|
|
73
|
+
console.error('Fix by removing the ^ or ~ prefix from each version.\n');
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
// eslint-disable-next-line no-console
|
|
77
|
+
console.log(`Checked ${String(packageFiles.length)} package.json file(s) - all dependencies are pinned.`);
|
|
78
|
+
}
|
|
79
|
+
main();
|
|
80
|
+
//# sourceMappingURL=check-pinned-deps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-pinned-deps.js","sourceRoot":"","sources":["../src/check-pinned-deps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Publishes packages that have changed since the last publish.
|
|
4
|
+
* Auto-increments the patch version for each changed package.
|
|
5
|
+
*
|
|
6
|
+
* Handles inter-package dependencies:
|
|
7
|
+
* - Detects dependency order and publishes dependencies first
|
|
8
|
+
* - Auto-updates dependency versions before publishing dependent packages
|
|
9
|
+
* - Transforms file: references to real versions at publish time
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* npx monorepo-publish [--packages-dir <dir>]
|
|
13
|
+
*
|
|
14
|
+
* Options:
|
|
15
|
+
* --packages-dir Directory containing packages (default: "packages")
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG"}
|
package/dist/publish.js
ADDED
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Publishes packages that have changed since the last publish.
|
|
5
|
+
* Auto-increments the patch version for each changed package.
|
|
6
|
+
*
|
|
7
|
+
* Handles inter-package dependencies:
|
|
8
|
+
* - Detects dependency order and publishes dependencies first
|
|
9
|
+
* - Auto-updates dependency versions before publishing dependent packages
|
|
10
|
+
* - Transforms file: references to real versions at publish time
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* npx monorepo-publish [--packages-dir <dir>]
|
|
14
|
+
*
|
|
15
|
+
* Options:
|
|
16
|
+
* --packages-dir Directory containing packages (default: "packages")
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
const child_process_1 = require("child_process");
|
|
20
|
+
const fs_1 = require("fs");
|
|
21
|
+
const path_1 = require("path");
|
|
22
|
+
function parseArgs() {
|
|
23
|
+
const args = process.argv.slice(2);
|
|
24
|
+
let packagesDir = 'packages';
|
|
25
|
+
for (let i = 0; i < args.length; i++) {
|
|
26
|
+
if (args[i] === '--packages-dir') {
|
|
27
|
+
const next = args[i + 1];
|
|
28
|
+
if (next !== undefined && next !== '') {
|
|
29
|
+
packagesDir = next;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { packagesDir };
|
|
34
|
+
}
|
|
35
|
+
function exec(command, options = {}) {
|
|
36
|
+
// eslint-disable-next-line no-console
|
|
37
|
+
console.log(`$ ${command}`);
|
|
38
|
+
try {
|
|
39
|
+
const { ignoreError: _ignoreError, ...execOptions } = options;
|
|
40
|
+
const result = (0, child_process_1.execSync)(command, { encoding: 'utf-8', stdio: 'pipe', ...execOptions });
|
|
41
|
+
return typeof result === 'string' ? result.trim() : '';
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
if (options.ignoreError === true) {
|
|
45
|
+
return '';
|
|
46
|
+
}
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function getPackages(packagesDir) {
|
|
51
|
+
const packagesPath = (0, path_1.join)(process.cwd(), packagesDir);
|
|
52
|
+
const entries = (0, fs_1.readdirSync)(packagesPath);
|
|
53
|
+
const packages = [];
|
|
54
|
+
for (const entry of entries) {
|
|
55
|
+
const packagePath = (0, path_1.join)(packagesPath, entry);
|
|
56
|
+
const stat = (0, fs_1.statSync)(packagePath);
|
|
57
|
+
if (!stat.isDirectory()) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const packageJsonPath = (0, path_1.join)(packagePath, 'package.json');
|
|
61
|
+
try {
|
|
62
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
63
|
+
if (packageJson.private === true) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
packages.push({
|
|
67
|
+
name: packageJson.name,
|
|
68
|
+
path: packagePath,
|
|
69
|
+
packageJsonPath,
|
|
70
|
+
relativePath: `${packagesDir}/${entry}`,
|
|
71
|
+
version: packageJson.version,
|
|
72
|
+
dependencies: packageJson.dependencies ?? {},
|
|
73
|
+
devDependencies: packageJson.devDependencies ?? {},
|
|
74
|
+
peerDependencies: packageJson.peerDependencies ?? {},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Skip if no package.json
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return packages;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Sort packages so dependencies are published first.
|
|
85
|
+
* Uses topological sort based on inter-package dependencies.
|
|
86
|
+
*/
|
|
87
|
+
function sortByDependencyOrder(packages) {
|
|
88
|
+
const packageNames = new Set(packages.map((p) => p.name));
|
|
89
|
+
const graph = new Map();
|
|
90
|
+
const inDegree = new Map();
|
|
91
|
+
// Initialize
|
|
92
|
+
for (const pkg of packages) {
|
|
93
|
+
graph.set(pkg.name, []);
|
|
94
|
+
inDegree.set(pkg.name, 0);
|
|
95
|
+
}
|
|
96
|
+
// Build dependency graph (only for packages in this monorepo)
|
|
97
|
+
for (const pkg of packages) {
|
|
98
|
+
const allDeps = {
|
|
99
|
+
...pkg.dependencies,
|
|
100
|
+
...pkg.devDependencies,
|
|
101
|
+
...pkg.peerDependencies,
|
|
102
|
+
};
|
|
103
|
+
for (const dep of Object.keys(allDeps)) {
|
|
104
|
+
if (packageNames.has(dep)) {
|
|
105
|
+
// dep must be published before pkg
|
|
106
|
+
const dependents = graph.get(dep);
|
|
107
|
+
if (dependents) {
|
|
108
|
+
dependents.push(pkg.name);
|
|
109
|
+
}
|
|
110
|
+
const currentDegree = inDegree.get(pkg.name);
|
|
111
|
+
if (currentDegree !== undefined) {
|
|
112
|
+
inDegree.set(pkg.name, currentDegree + 1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Kahn's algorithm for topological sort
|
|
118
|
+
const queue = [];
|
|
119
|
+
for (const [name, degree] of inDegree) {
|
|
120
|
+
if (degree === 0) {
|
|
121
|
+
queue.push(name);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const sorted = [];
|
|
125
|
+
while (queue.length > 0) {
|
|
126
|
+
const current = queue.shift();
|
|
127
|
+
if (current === undefined) {
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
sorted.push(current);
|
|
131
|
+
const dependents = graph.get(current);
|
|
132
|
+
if (dependents) {
|
|
133
|
+
for (const dependent of dependents) {
|
|
134
|
+
const currentDegree = inDegree.get(dependent);
|
|
135
|
+
if (currentDegree !== undefined) {
|
|
136
|
+
const newDegree = currentDegree - 1;
|
|
137
|
+
inDegree.set(dependent, newDegree);
|
|
138
|
+
if (newDegree === 0) {
|
|
139
|
+
queue.push(dependent);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (sorted.length !== packages.length) {
|
|
146
|
+
throw new Error('Circular dependency detected between packages');
|
|
147
|
+
}
|
|
148
|
+
// Return packages in sorted order
|
|
149
|
+
const packageMap = new Map(packages.map((p) => [p.name, p]));
|
|
150
|
+
return sorted
|
|
151
|
+
.map((name) => packageMap.get(name))
|
|
152
|
+
.filter((pkg) => pkg !== undefined);
|
|
153
|
+
}
|
|
154
|
+
function hasChanges(packagePath, lastTag) {
|
|
155
|
+
if (lastTag === null || lastTag === '') {
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
const diff = exec(`git diff --name-only ${lastTag} HEAD -- ${packagePath}`, {
|
|
160
|
+
ignoreError: true,
|
|
161
|
+
});
|
|
162
|
+
return diff.length > 0;
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function getLastTag(packageName) {
|
|
169
|
+
try {
|
|
170
|
+
const safeName = packageName.replace('@', '').replace('/', '-');
|
|
171
|
+
const tags = exec(`git tag -l "${safeName}-v*" --sort=-v:refname`, { ignoreError: true });
|
|
172
|
+
const tagList = tags.split('\n').filter(Boolean);
|
|
173
|
+
return tagList[0] ?? null;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get the latest patch version of a package from npm for a given major.minor.
|
|
181
|
+
* Returns the full version string (e.g., "1.1.5") or null if no versions exist for that major.minor.
|
|
182
|
+
*/
|
|
183
|
+
function getLatestNpmPatchVersion(packageName, majorMinor) {
|
|
184
|
+
try {
|
|
185
|
+
// Get all versions from npm and filter to the major.minor we want
|
|
186
|
+
const allVersions = exec(`npm view ${packageName} versions --json`, { ignoreError: false });
|
|
187
|
+
const versions = JSON.parse(allVersions);
|
|
188
|
+
// Filter to versions matching our major.minor and find the highest patch
|
|
189
|
+
const matchingVersions = versions
|
|
190
|
+
.filter((v) => v.startsWith(`${majorMinor}.`))
|
|
191
|
+
.map((v) => {
|
|
192
|
+
const parts = v.split('.');
|
|
193
|
+
return { full: v, patch: parseInt(parts[2] ?? '0', 10) };
|
|
194
|
+
})
|
|
195
|
+
.sort((a, b) => b.patch - a.patch);
|
|
196
|
+
return matchingVersions[0]?.full ?? null;
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Update a package's dependencies to use newly published versions.
|
|
204
|
+
* Handles both:
|
|
205
|
+
* - file:../packageName references (transforms to real version)
|
|
206
|
+
* - version numbers that need updating
|
|
207
|
+
*
|
|
208
|
+
* Note: peerDependencies are excluded from file: transformations since they
|
|
209
|
+
* should use version ranges for compatibility, not exact versions.
|
|
210
|
+
*/
|
|
211
|
+
function updateInternalDependencies(pkg, publishedVersions) {
|
|
212
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(pkg.packageJsonPath, 'utf-8'));
|
|
213
|
+
let updated = false;
|
|
214
|
+
const depTypes = ['dependencies', 'devDependencies', 'peerDependencies'];
|
|
215
|
+
for (const depType of depTypes) {
|
|
216
|
+
const deps = packageJson[depType];
|
|
217
|
+
if (!deps) {
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
for (const [depName, currentVersion] of Object.entries(deps)) {
|
|
221
|
+
// Check if this is a file: reference to a monorepo package
|
|
222
|
+
if (currentVersion.startsWith('file:')) {
|
|
223
|
+
// Skip file: transformations for peerDependencies - they should use
|
|
224
|
+
// version ranges for compatibility, not exact versions
|
|
225
|
+
if (depType === 'peerDependencies') {
|
|
226
|
+
console.warn(` Warning: ${depName} in peerDependencies uses file: reference. ` +
|
|
227
|
+
`Consider using a version range instead.`);
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
const newVersion = publishedVersions.get(depName);
|
|
231
|
+
if (newVersion !== undefined && newVersion !== '') {
|
|
232
|
+
// eslint-disable-next-line no-console
|
|
233
|
+
console.log(` Transforming ${depName}: ${currentVersion} → ${newVersion}`);
|
|
234
|
+
deps[depName] = newVersion;
|
|
235
|
+
updated = true;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Check if this is a version that needs updating
|
|
239
|
+
else {
|
|
240
|
+
const newVersion = publishedVersions.get(depName);
|
|
241
|
+
if (newVersion !== undefined && newVersion !== '' && currentVersion !== newVersion) {
|
|
242
|
+
// eslint-disable-next-line no-console
|
|
243
|
+
console.log(` Updating ${depName}: ${currentVersion} → ${newVersion}`);
|
|
244
|
+
deps[depName] = newVersion;
|
|
245
|
+
updated = true;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (updated) {
|
|
251
|
+
(0, fs_1.writeFileSync)(pkg.packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
|
|
252
|
+
}
|
|
253
|
+
return updated;
|
|
254
|
+
}
|
|
255
|
+
function main() {
|
|
256
|
+
const { packagesDir } = parseArgs();
|
|
257
|
+
const packages = getPackages(packagesDir);
|
|
258
|
+
if (packages.length === 0) {
|
|
259
|
+
// eslint-disable-next-line no-console
|
|
260
|
+
console.log('No publishable packages found.');
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
// Sort packages so dependencies are published first
|
|
264
|
+
const sortedPackages = sortByDependencyOrder(packages);
|
|
265
|
+
// eslint-disable-next-line no-console
|
|
266
|
+
console.log(`Found ${String(packages.length)} package(s) (in publish order):`);
|
|
267
|
+
sortedPackages.forEach((p, i) => {
|
|
268
|
+
// eslint-disable-next-line no-console
|
|
269
|
+
console.log(` ${String(i + 1)}. ${p.name}`);
|
|
270
|
+
});
|
|
271
|
+
// Track versions we've published this run
|
|
272
|
+
const publishedVersions = new Map();
|
|
273
|
+
for (const pkg of sortedPackages) {
|
|
274
|
+
// eslint-disable-next-line no-console
|
|
275
|
+
console.log(`\n--- Processing ${pkg.name} ---`);
|
|
276
|
+
const lastTag = getLastTag(pkg.name);
|
|
277
|
+
const changed = hasChanges(pkg.relativePath, lastTag);
|
|
278
|
+
// Check if any of its internal dependencies were just published
|
|
279
|
+
const depsUpdated = updateInternalDependencies(pkg, publishedVersions);
|
|
280
|
+
if (!changed && !depsUpdated) {
|
|
281
|
+
// eslint-disable-next-line no-console
|
|
282
|
+
console.log(`No changes since last publish (${lastTag ?? 'none'}). Skipping.`);
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
if (depsUpdated && !changed) {
|
|
286
|
+
// eslint-disable-next-line no-console
|
|
287
|
+
console.log('Internal dependencies updated. Publishing new version.');
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
// eslint-disable-next-line no-console
|
|
291
|
+
console.log(lastTag !== null && lastTag !== ''
|
|
292
|
+
? `Changes detected since ${lastTag}.`
|
|
293
|
+
: 'No previous tag found. Publishing initial version.');
|
|
294
|
+
}
|
|
295
|
+
// Get the major.minor version from package.json - this is controlled by developers.
|
|
296
|
+
// Then auto-determine the patch version based on what's already published to npm.
|
|
297
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(pkg.packageJsonPath, 'utf-8'));
|
|
298
|
+
const versionParts = packageJson.version.split('.');
|
|
299
|
+
const major = versionParts[0] ?? '0';
|
|
300
|
+
const minor = versionParts[1] ?? '0';
|
|
301
|
+
const majorMinor = `${major}.${minor}`;
|
|
302
|
+
// Check npm for the latest patch version of this major.minor
|
|
303
|
+
const latestNpmVersion = getLatestNpmPatchVersion(pkg.name, majorMinor);
|
|
304
|
+
let newVersion;
|
|
305
|
+
if (latestNpmVersion !== null) {
|
|
306
|
+
// Increment patch from the latest npm version
|
|
307
|
+
const npmParts = latestNpmVersion.split('.');
|
|
308
|
+
const nextPatch = parseInt(npmParts[2] ?? '0', 10) + 1;
|
|
309
|
+
newVersion = `${majorMinor}.${String(nextPatch)}`;
|
|
310
|
+
// eslint-disable-next-line no-console
|
|
311
|
+
console.log(`Latest npm version for ${majorMinor}.x: ${latestNpmVersion}`);
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
// No versions exist for this major.minor, start at .0
|
|
315
|
+
newVersion = `${majorMinor}.0`;
|
|
316
|
+
// eslint-disable-next-line no-console
|
|
317
|
+
console.log(`No existing versions for ${majorMinor}.x on npm.`);
|
|
318
|
+
}
|
|
319
|
+
// Update package.json with the new version
|
|
320
|
+
packageJson.version = newVersion;
|
|
321
|
+
(0, fs_1.writeFileSync)(pkg.packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
|
|
322
|
+
// eslint-disable-next-line no-console
|
|
323
|
+
console.log(`New version: ${newVersion}`);
|
|
324
|
+
// Track this version for dependent packages
|
|
325
|
+
publishedVersions.set(pkg.name, newVersion);
|
|
326
|
+
// Publish
|
|
327
|
+
// eslint-disable-next-line no-console
|
|
328
|
+
console.log('Publishing to npm...');
|
|
329
|
+
try {
|
|
330
|
+
exec(`npm publish --access public`, { cwd: pkg.path });
|
|
331
|
+
// eslint-disable-next-line no-console
|
|
332
|
+
console.log(`Successfully published ${pkg.name}@${newVersion}`);
|
|
333
|
+
// Create and push git tag
|
|
334
|
+
const safeName = pkg.name.replace('@', '').replace('/', '-');
|
|
335
|
+
const tagName = `${safeName}-v${newVersion}`;
|
|
336
|
+
exec(`git tag ${tagName}`);
|
|
337
|
+
exec(`git push origin ${tagName}`);
|
|
338
|
+
// eslint-disable-next-line no-console
|
|
339
|
+
console.log(`Created and pushed tag: ${tagName}`);
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
343
|
+
console.error(`Failed to publish ${pkg.name}:`, message);
|
|
344
|
+
process.exit(1);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
// eslint-disable-next-line no-console
|
|
348
|
+
console.log('\nDone!');
|
|
349
|
+
}
|
|
350
|
+
try {
|
|
351
|
+
main();
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
console.error('Publish failed:', error);
|
|
355
|
+
process.exit(1);
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hardlydifficult/ci-scripts",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Reusable CI scripts",
|
|
5
|
+
"bin": {
|
|
6
|
+
"check-pinned-deps": "./dist/check-pinned-deps.js",
|
|
7
|
+
"monorepo-publish": "./dist/publish.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"clean": "rm -rf dist",
|
|
15
|
+
"lint": "tsc --noEmit"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@types/node": "20.19.31",
|
|
19
|
+
"typescript": "5.8.3"
|
|
20
|
+
}
|
|
21
|
+
}
|