@vino.tian/myte 0.1.19 → 0.1.20

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.19
1
+ 0.1.20
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vino.tian/myte",
3
- "version": "0.1.19",
3
+ "version": "0.1.20",
4
4
  "description": "myte CLI",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -14,13 +14,10 @@
14
14
  "bin",
15
15
  "scripts",
16
16
  "dist",
17
- "README.md"
17
+ "README.md",
18
+ "release-meta.json"
18
19
  ],
19
20
  "scripts": {
20
21
  "postinstall": "node ./scripts/install.js"
21
- },
22
- "myte": {
23
- "packageKey": "myte",
24
- "releaseRepository": "tianweilong/deploy-center"
25
22
  }
26
23
  }
@@ -0,0 +1,9 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "packageName": "@vino.tian/myte",
4
+ "packageVersion": "0.1.20",
5
+ "releaseRepository": "tianweilong/deploy-center",
6
+ "releaseTag": "myte-v0.1.20",
7
+ "releasePackageKey": "myte",
8
+ "distributionMode": "github_release"
9
+ }
@@ -30,6 +30,10 @@ function packageMetadata() {
30
30
  return require(join(__dirname, "..", "package.json"));
31
31
  }
32
32
 
33
+ function releaseMetadata() {
34
+ return require(join(__dirname, "..", "release-meta.json"));
35
+ }
36
+
33
37
  function validatePackageVersion(version) {
34
38
  if (version === "0.0.0") {
35
39
  throw new Error("检测到占位版本 0.0.0,说明发布流程未注入 npm 实际版本。");
@@ -39,6 +43,33 @@ function validatePackageVersion(version) {
39
43
  }
40
44
  }
41
45
 
46
+ function validateReleaseMetadata(meta, pkg) {
47
+ if (!meta || typeof meta !== "object") {
48
+ throw new Error("release-meta.json 内容非法。");
49
+ }
50
+ if (meta.schemaVersion !== 1) {
51
+ throw new Error(`release-meta.json schemaVersion 非法:${meta.schemaVersion}`);
52
+ }
53
+ if (meta.packageName !== pkg.name) {
54
+ throw new Error(`release-meta.json packageName 与 package.json 不一致:${meta.packageName}`);
55
+ }
56
+ if (meta.packageVersion !== pkg.version) {
57
+ throw new Error(`release-meta.json packageVersion 与 package.json 不一致:${meta.packageVersion}`);
58
+ }
59
+ if (meta.distributionMode !== "github_release") {
60
+ throw new Error(`myte 安装脚本当前仅支持 github_release,收到:${meta.distributionMode}`);
61
+ }
62
+ if (typeof meta.releaseRepository !== "string" || !meta.releaseRepository) {
63
+ throw new Error("release-meta.json 缺少 releaseRepository。");
64
+ }
65
+ if (typeof meta.releaseTag !== "string" || !meta.releaseTag) {
66
+ throw new Error("release-meta.json 缺少 releaseTag。");
67
+ }
68
+ if (typeof meta.releasePackageKey !== "string" || !meta.releasePackageKey) {
69
+ throw new Error("release-meta.json 缺少 releasePackageKey。");
70
+ }
71
+ }
72
+
42
73
  function vendorBinaryPath(target) {
43
74
  return join(__dirname, "..", "dist", target.dir, target.binary);
44
75
  }
@@ -162,10 +193,12 @@ async function install() {
162
193
  }
163
194
 
164
195
  const pkg = packageMetadata();
196
+ const meta = releaseMetadata();
165
197
  validatePackageVersion(pkg.version);
166
- const packageKey = pkg.myte.packageKey;
167
- const releaseRepository = pkg.myte.releaseRepository;
168
- const releaseTag = `${packageKey}-v${pkg.version}`;
198
+ validateReleaseMetadata(meta, pkg);
199
+ const packageKey = meta.releasePackageKey;
200
+ const releaseRepository = meta.releaseRepository;
201
+ const releaseTag = meta.releaseTag;
169
202
  const assetName = `${releaseTag}-${target.release}.${target.assetExt}`;
170
203
  const checksumName = `${releaseTag}-checksums.txt`;
171
204
  const baseUrl = `https://github.com/${releaseRepository}/releases/download/${releaseTag}`;