forked from cloud-annotations/docusaurus-openapi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpublish.ts
More file actions
executable file
·119 lines (97 loc) · 2.84 KB
/
publish.ts
File metadata and controls
executable file
·119 lines (97 loc) · 2.84 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/usr/bin/env ts-node
/* ============================================================================
* Copyright (c) Cloud Annotations
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
* ========================================================================== */
import { execSync } from "child_process";
import fs from "fs";
import path from "path";
import { createDryRun } from "./utils/dry-run";
import { getOutput } from "./utils/get-output";
import { printBanner } from "./utils/print-utils";
import { version } from "../lerna.json";
const ORG = "cloud-annotations";
const REPO = "docusaurus-openapi";
let REPO_ROOT = undefined;
// Makes the script crash on unhandled rejections instead of silently
// ignoring them. In the future, promise rejections that are not handled will
// terminate the Node.js process with a non-zero exit code.
process.on("unhandledRejection", (err) => {
throw err;
});
const safeExec = createDryRun(execSync);
const safeRmdir = createDryRun(fs.rmSync);
const safeMkdir = createDryRun(fs.mkdirSync);
function getGitUserName() {
return getOutput("git config user.name");
}
function getGitUserEmail() {
return getOutput("git config user.email");
}
function ensureCleanDir(path: string) {
if (fs.existsSync(path)) {
safeRmdir(path, { recursive: true });
}
safeMkdir(path, { recursive: true });
}
function checkoutCode() {
printBanner("Retrieving source code");
const BUILD_PATH = "build";
ensureCleanDir(BUILD_PATH);
safeExec(`git clone git@github.com:${ORG}/${REPO}.git ${REPO}`, {
cwd: BUILD_PATH,
});
REPO_ROOT = path.join(BUILD_PATH, REPO);
}
function configureGit() {
const gitUserName = getGitUserName();
const gitUserEmail = getGitUserEmail();
safeExec(`git config user.name ${gitUserName}`, {
cwd: REPO_ROOT,
});
safeExec(`git config user.email ${gitUserEmail}`, {
cwd: REPO_ROOT,
});
}
function buildAndPublish() {
safeExec(`yarn install --frozen-lockfile`, {
cwd: REPO_ROOT,
stdio: "ignore",
});
printBanner("Building Packages");
safeExec(`yarn lerna run build --no-private`, {
cwd: REPO_ROOT,
});
printBanner("Publishing Packages");
safeExec(`lerna publish --yes from-package`, {
cwd: REPO_ROOT,
});
}
function tag() {
const tag = `v${version}`;
const message = `Version ${version}`;
safeExec(`git tag -a ${tag} -m "${message}"`, {
cwd: REPO_ROOT,
});
safeExec(`git push origin ${tag}`, {
cwd: REPO_ROOT,
});
}
function versions() {
return getOutput(`git tag --list 'v*'`).split("\n");
}
function main() {
if (versions().includes(`v${version}`)) {
console.log(`\x1b[33mSKIPPING: Version ${version} already exists.\x1b[0m`);
return;
}
if (!process.env.CI) {
checkoutCode();
}
configureGit();
buildAndPublish();
tag();
}
main();