forked from remix-run/remix
-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathpublish-private.js
80 lines (72 loc) · 2.13 KB
/
publish-private.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
const path = require("node:path");
const { execSync } = require("node:child_process");
const semver = require("semver");
const jsonfile = require("jsonfile");
const buildDir = path.resolve(__dirname, "../build/node_modules");
function getTaggedVersion() {
let output = execSync("git tag --list --points-at HEAD").toString().trim();
return output.replace(/^v/g, "");
}
/**
* @param {string} dir
* @param {string} tag
*/
function publish(dir, tag) {
execSync(`pnpm publish ${dir} --tag ${tag}`, { stdio: "inherit" });
}
async function run() {
// Make sure there's a current tag
let taggedVersion = getTaggedVersion();
if (taggedVersion === "") {
console.error("Missing release version. Run the version script first.");
process.exit(1);
}
let prerelease = semver.prerelease(taggedVersion);
let prereleaseTag = prerelease ? String(prerelease[0]) : undefined;
let tag = prereleaseTag
? prereleaseTag.includes("nightly")
? "nightly"
: prereleaseTag.includes("experimental")
? "experimental"
: prereleaseTag
: "latest";
// Publish all @remix-run/* packages
for (let name of [
"dev",
"server-runtime", // publish before platforms
"cloudflare",
"cloudflare-pages",
"cloudflare-workers",
"deno",
"node", // publish node before node servers
"architect",
"express", // publish express before serve
"react",
"serve",
]) {
// fix for https://github.com/remix-run/remix/actions/runs/1500713248
await updatePackageConfig(name, (config) => {
config.repository = "https://github.com/remix-run/packages";
});
publish(path.join(buildDir, "@remix-run", name), tag);
}
}
run().then(
() => {
process.exit(0);
},
(error) => {
console.error(error);
process.exit(1);
}
);
/**
* @param {string} packageName
* @param {(json: import('type-fest').PackageJson) => any} transform
*/
async function updatePackageConfig(packageName, transform) {
let file = path.join(buildDir, "@remix-run", packageName, "package.json");
let json = await jsonfile.readFile(file);
transform(json);
await jsonfile.writeFile(file, json, { spaces: 2 });
}