-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpackage-tag.js
executable file
·46 lines (35 loc) · 1.46 KB
/
package-tag.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
#! /usr/bin/env node
var path = require("path");
var fs = require("fs");
var semver = require("semver");
var yargs = require("yargs")
.usage('Usage: $0 --tag alpha')
.demand('tag')
.alias('t', 'tag')
.argv;
var tag = yargs.tag;
var packageJsons = yargs._;
if (!packageJsons || packageJsons.length === 0) {
packageJsons = ["./package.json"];
}
packageJsons.forEach(p => {
var absolutePath = path.resolve(p);
if (fs.statSync(absolutePath).isDirectory()) {
absolutePath = path.join(absolutePath, "package.json");
}
var packageJson = JSON.parse(fs.readFileSync(absolutePath));
var originalVersion = packageJson.version;
if (!semver.valid(originalVersion)) {
console.error("Original package.json version is not semver valid: " + taggedVersion + " for package at: " + absolutePath);
process.exit(2);
}
var originalNonTagVersion = (packageJson.version || "").split("-")[0];
var taggedVersion = originalNonTagVersion + "-" + tag;
if (!semver.valid(taggedVersion)) {
console.error("Tagged package.json version is not semver valid: " + taggedVersion + " for package at: " + absolutePath);
process.exit(2);
}
packageJson.version = taggedVersion;
fs.writeFileSync(absolutePath, JSON.stringify(packageJson, null, " "));
console.log(packageJson.name + "@" + originalVersion + " -> " + packageJson.name + "@" + taggedVersion + " at " + path.relative(process.cwd(), absolutePath));
});