microsoft/vscode-react-native

Public

mirrored fromhttps://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
14a3206c5e6c4f11e8a8c6e78fc766a2ff669bc5

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

gulp_scripts/release.js

129lines · modecode

1const gulp = require("gulp");
2const log = require("fancy-log");
3const path = require("path");
4const os = require("os");
5const fs = require("fs");
6const GulpExtras = require("../tools/gulp-extras");
7
8const isNightly = process.argv.includes("--nightly");
9const useNpm = process.argv.includes("--no-yarn");
10const isPrepublish = process.argv.includes("--no-prepublish");
11const extensionName = isNightly ? "vscode-react-native-preview" : "vscode-react-native";
12const executeCommand = GulpExtras.executeCommand;
13
14function release(cb) {
15 prepareLicenses();
16 cb();
17}
18
19function prepareLicenses() {
20 const backupFiles = [
21 "LICENSE.txt",
22 "ThirdPartyNotices.txt",
23 "package.json",
24 "package-lock.json",
25 ];
26 const backupFolder = path.resolve(path.join(os.tmpdir(), "vscode-react-native"));
27 if (!fs.existsSync(backupFolder)) {
28 fs.mkdirSync(backupFolder);
29 }
30
31 return Promise.resolve()
32 .then(() => {
33 /* back up LICENSE.txt, ThirdPartyNotices.txt, README.md */
34 log("Backing up license files to " + backupFolder + "...");
35 backupFiles.forEach(fileName => {
36 fs.writeFileSync(path.join(backupFolder, fileName), fs.readFileSync(fileName));
37 });
38
39 /* copy over the release package license files */
40 log("Preparing license files for release...");
41 fs.writeFileSync("LICENSE.txt", fs.readFileSync("release/LICENSE.txt"));
42 fs.writeFileSync(
43 "ThirdPartyNotices.txt",
44 fs.readFileSync("release/ThirdPartyNotices.txt"),
45 );
46 })
47 .then(() => {
48 let packageJson = readJson("/package.json");
49 packageJson.main = "/dist/rn-extension";
50
51 if (isPrepublish) {
52 log("Ignore vscode:prepublish script before vsce package");
53 const scripts = packageJson.scripts;
54 delete scripts["vscode:prepublish"];
55 }
56
57 if (isNightly) {
58 log("Performing gulp release...");
59 packageJson.version = getVersionNumber();
60 packageJson.name = extensionName;
61 packageJson.preview = true;
62 packageJson.displayName += " (Preview)";
63 }
64 writeJson("/package.json", packageJson);
65 log("Creating release package...");
66 return new Promise((resolve, reject) => {
67 // NOTE: vsce must see npm 3.X otherwise it will not correctly strip out dev dependencies.
68 let vsceArgs = ["package"];
69 const useBun = process.argv.includes("--bun");
70 if (useBun) {
71 vsceArgs = ["package", "--no-yarn"];
72 log("Using bun for vsce packaging...");
73 } else if (useNpm) {
74 vsceArgs = ["package", "--no-yarn"];
75 log("Using npm for vsce packaging...");
76 } else {
77 log("Using yarn for vsce packaging...");
78 }
79 executeCommand(
80 "vsce",
81 vsceArgs,
82 arg => {
83 if (arg) {
84 reject(arg);
85 }
86 resolve();
87 },
88 { cwd: appRoot },
89 );
90 });
91 })
92 .finally(() => {
93 /* restore backed up files */
94 log("Restoring modified files...");
95 backupFiles.forEach(fileName => {
96 fs.writeFileSync(
97 path.join(appRoot, fileName),
98 fs.readFileSync(path.join(backupFolder, fileName)),
99 );
100 });
101 });
102}
103
104function readJson(file) {
105 const contents = fs.readFileSync(path.join(appRoot, file), "utf-8").toString();
106 return JSON.parse(contents);
107}
108
109function writeJson(file, jsonObj) {
110 const content = JSON.stringify(jsonObj, null, 2);
111 fs.writeFileSync(path.join(appRoot, file), content);
112}
113
114const getVersionNumber = () => {
115 const date = new Date(new Date().toLocaleString("en-US", { timeZone: "America/Los_Angeles" }));
116
117 return [
118 // YY
119 date.getFullYear(),
120 // MM,
121 date.getMonth() + 1,
122 //DDHH
123 `${date.getDate()}${String(date.getHours()).padStart(2, "0")}`,
124 ].join(".");
125};
126
127module.exports = {
128 release,
129};
130