Skip to content

Commit b74859f

Browse files
committed
Some small tweaks to scripts
1 parent c8e66e1 commit b74859f

File tree

4 files changed

+66
-98
lines changed

4 files changed

+66
-98
lines changed

scripts/publish-release.js

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import * as cp from 'node:child_process';
22

3+
import { fileExists, readJson } from './utils/fs.js';
34
import { createRelease } from './utils/github-releases.js';
4-
import { getPackageDir, hasJsrJson, readJsrJson, readPackageJson } from './utils/packages.js';
5+
import { getPackageDir, getPackageFile } from './utils/packages.js';
56
import { logAndExec } from './utils/process.js';
67
import { isValidVersion } from './utils/semver.js';
78

@@ -50,7 +51,8 @@ console.log(`Publishing release ${tag} ...`);
5051
console.log();
5152

5253
// 3) Publish to npm
53-
let packageJson = readPackageJson(packageName);
54+
let packageJsonFile = getPackageFile(packageName, 'package.json');
55+
let packageJson = readJson(packageJsonFile);
5456
if (packageJson.version !== version) {
5557
console.error(
5658
`Tag does not match package.json version: ${version} !== ${packageJson.version} (${tag})`,
@@ -65,16 +67,17 @@ logAndExec(`npm publish --access public`, {
6567
console.log();
6668

6769
// 4) Publish to jsr (if applicable)
68-
if (hasJsrJson(packageName)) {
69-
let jsrJson = readJsrJson(packageName);
70+
let jsrJsonFile = getPackageFile(packageName, 'jsr.json');
71+
if (fileExists(jsrJsonFile)) {
72+
let jsrJson = readJson(jsrJsonFile);
7073
if (jsrJson.version !== version) {
7174
console.error(
7275
`Tag does not match jsr.json version: ${version} !== ${jsrJson.version} (${tag})`,
7376
);
7477
process.exit(1);
7578
}
7679

77-
logAndExec(`pnpm dlx jsr publish`, {
80+
logAndExec(`npx jsr publish`, {
7881
cwd: getPackageDir(packageName),
7982
env: process.env,
8083
});
@@ -84,6 +87,6 @@ if (hasJsrJson(packageName)) {
8487
// 5) Publish to GitHub Releases
8588
console.log(`Publishing ${tag} on GitHub Releases ...`);
8689
let releaseUrl = await createRelease(packageName, version);
87-
console.log(`Published at: ${releaseUrl}`);
90+
console.log(`Done, see ${releaseUrl}`);
8891

8992
console.log();

scripts/tag-release.js

+15-20
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
import * as cp from 'node:child_process';
22

3-
import {
4-
getPackageFile,
5-
readChangelog,
6-
writeChangelog,
7-
hasJsrJson,
8-
readJsrJson,
9-
writeJsrJson,
10-
readPackageJson,
11-
writePackageJson,
12-
} from './utils/packages.js';
3+
import { fileExists, readFile, readJson, writeFile, writeJson } from './utils/fs.js';
4+
import { getPackageFile } from './utils/packages.js';
135
import { logAndExec } from './utils/process.js';
146
import { getNextVersion } from './utils/semver.js';
157

@@ -25,7 +17,8 @@ if (packageName.startsWith('@mjackson/')) {
2517
packageName = packageName.slice('@mjackson/'.length);
2618
}
2719

28-
let packageJson = readPackageJson(packageName);
20+
let packageJsonFile = getPackageFile(packageName, 'package.json');
21+
let packageJson = readJson(packageJsonFile);
2922
let nextVersion = getNextVersion(packageJson.version, releaseType);
3023
let tag = `${packageName}@${nextVersion}`;
3124

@@ -40,18 +33,20 @@ console.log(`Tagging release ${tag} ...`);
4033
console.log();
4134

4235
// 2) Update package.json with the new release version
43-
writePackageJson(packageName, { ...packageJson, version: nextVersion });
44-
logAndExec(`git add ${getPackageFile(packageName, 'package.json')}`);
36+
writeJson(packageJsonFile, { ...packageJson, version: nextVersion });
37+
logAndExec(`git add ${packageJsonFile}`);
4538

4639
// 4) Update jsr.json (if applicable) with the new release version
47-
if (hasJsrJson(packageName)) {
48-
let jsrJson = readJsrJson(packageName);
49-
writeJsrJson(packageName, { ...jsrJson, version: nextVersion });
50-
logAndExec(`git add ${getPackageFile(packageName, 'jsr.json')}`);
40+
let jsrJsonFile = getPackageFile(packageName, 'jsr.json');
41+
if (fileExists(jsrJsonFile)) {
42+
let jsrJson = readJson(jsrJsonFile);
43+
writeJson(jsrJsonFile, { ...jsrJson, version: nextVersion });
44+
logAndExec(`git add ${jsrJsonFile}`);
5145
}
5246

5347
// 3) Swap out "## HEAD" in CHANGELOG.md with the new release version + date
54-
let changelog = readChangelog(packageName);
48+
let changelogFile = getPackageFile(packageName, 'CHANGELOG.md');
49+
let changelog = readFile(packageName);
5550
let match = /^## HEAD\n/m.exec(changelog);
5651
if (match) {
5752
let [today] = new Date().toISOString().split('T');
@@ -61,8 +56,8 @@ if (match) {
6156
`## v${nextVersion} (${today})\n` +
6257
changelog.slice(match.index + match[0].length);
6358

64-
writeChangelog(packageName, changelog);
65-
logAndExec(`git add ${getPackageFile(packageName, 'CHANGELOG.md')}`);
59+
writeFile(changelogFile, changelog);
60+
logAndExec(`git add ${changelogFile}`);
6661
}
6762

6863
// 5) Commit and tag

scripts/utils/fs.js

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import * as fs from 'node:fs';
2+
3+
/** @type (filename: string) => boolean */
4+
export function fileExists(filename) {
5+
return fs.existsSync(filename);
6+
}
7+
8+
/** @type (filename: string) => string */
9+
export function readFile(filename) {
10+
try {
11+
return fs.readFileSync(filename, 'utf-8');
12+
} catch (error) {
13+
if (isFsError(error) && error.code === 'ENOENT') {
14+
console.error(`Not found: "${filename}"`);
15+
process.exit(1);
16+
} else {
17+
throw error;
18+
}
19+
}
20+
}
21+
22+
/** @type (filename: string, data: string) => void */
23+
export function writeFile(filename, data) {
24+
fs.writeFileSync(filename, data);
25+
}
26+
27+
/** @type (filename: string) => any */
28+
export function readJson(filename) {
29+
return JSON.parse(readFile(filename));
30+
}
31+
32+
/** @type (filename: string, data: any) => void */
33+
export function writeJson(filename, data) {
34+
writeFile(filename, JSON.stringify(data, null, 2) + '\n');
35+
}
36+
37+
/** @type (error: unknown) => error is { code: string } */
38+
function isFsError(error) {
39+
return (
40+
typeof error === 'object' && error != null && 'code' in error && typeof error.code === 'string'
41+
);
42+
}

scripts/utils/packages.js

-72
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import * as fs from 'node:fs';
21
import * as path from 'node:path';
32

43
const __dirname = path.dirname(new URL(import.meta.url).pathname);
@@ -17,74 +16,3 @@ export function getPackageDir(packageName) {
1716
export function getPackageFile(packageName, filename) {
1817
return path.join(getPackageDir(packageName), filename);
1918
}
20-
21-
/** @type (packageName: string) => boolean */
22-
export function hasChangelog(packageName) {
23-
return fs.existsSync(getPackageFile(packageName, 'CHANGELOG.md'));
24-
}
25-
26-
/** @type (packageName: string) => string */
27-
export function readChangelog(packageName) {
28-
return fs.readFileSync(getPackageFile(packageName, 'CHANGELOG.md'), 'utf-8');
29-
}
30-
31-
/** @type (packageName: string, data: string) => void */
32-
export function writeChangelog(packageName, data) {
33-
fs.writeFileSync(getPackageFile(packageName, 'CHANGELOG.md'), data);
34-
}
35-
36-
/** @type (packageName: string) => boolean */
37-
export function hasJsrJson(packageName) {
38-
return fs.existsSync(getPackageFile(packageName, 'jsr.json'));
39-
}
40-
41-
/** @type (packageName: string) => any */
42-
export function readJsrJson(packageName) {
43-
return readJson(getPackageFile(packageName, 'jsr.json'));
44-
}
45-
46-
/** @type (packageName: string, data: any) => void */
47-
export function writeJsrJson(packageName, data) {
48-
writeJson(getPackageFile(packageName, 'jsr.json'), data);
49-
}
50-
51-
/** @type (packageName: string) => boolean */
52-
export function hasPackageJson(packageName) {
53-
return fs.existsSync(getPackageFile(packageName, 'package.json'));
54-
}
55-
56-
/** @type (packageName: string) => any */
57-
export function readPackageJson(packageName) {
58-
return readJson(getPackageFile(packageName, 'package.json'));
59-
}
60-
61-
/** @type (packageName: string, data: any) => void */
62-
export function writePackageJson(packageName, data) {
63-
writeJson(getPackageFile(packageName, 'package.json'), data);
64-
}
65-
66-
/** @type (file: string) => any */
67-
function readJson(file) {
68-
try {
69-
return JSON.parse(fs.readFileSync(file, 'utf-8'));
70-
} catch (error) {
71-
if (isFsError(error) && error.code === 'ENOENT') {
72-
console.error(`Not found: "${file}"`);
73-
process.exit(1);
74-
} else {
75-
throw error;
76-
}
77-
}
78-
}
79-
80-
/** @type (filename: string, data: any) => void */
81-
function writeJson(filename, data) {
82-
fs.writeFileSync(filename, JSON.stringify(data, null, 2) + '\n');
83-
}
84-
85-
/** @type (error: unknown) => error is { code: string } */
86-
function isFsError(error) {
87-
return (
88-
typeof error === 'object' && error != null && 'code' in error && typeof error.code === 'string'
89-
);
90-
}

0 commit comments

Comments
 (0)