From ba00df1ab7ae84bc1d20d9dbe369ca6018f7df3f Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Wed, 25 Nov 2020 15:29:58 -0500 Subject: [PATCH] build: Added updated admin scripts --- misc/admin/lib/cmds/bump-versions.js | 6 +- misc/admin/lib/cmds/get-config.d.ts | 1 + misc/admin/lib/cmds/get-config.js | 26 +++++++++ misc/admin/lib/cmds/publish.js | 70 ++++++++++++++++++---- misc/admin/lib/cmds/spell-check.js | 2 +- misc/admin/lib/cmds/update-hashes.js | 1 - misc/admin/src.ts/cmds/bump-versions.ts | 8 ++- misc/admin/src.ts/cmds/get-config.ts | 16 +++++ misc/admin/src.ts/cmds/publish.ts | 77 +++++++++++++++++++++---- misc/admin/src.ts/cmds/spell-check.ts | 2 +- misc/admin/src.ts/cmds/update-hashes.ts | 2 +- misc/admin/src.ts/github.ts | 1 - 12 files changed, 184 insertions(+), 28 deletions(-) create mode 100644 misc/admin/lib/cmds/get-config.d.ts create mode 100644 misc/admin/lib/cmds/get-config.js create mode 100644 misc/admin/src.ts/cmds/get-config.ts diff --git a/misc/admin/lib/cmds/bump-versions.js b/misc/admin/lib/cmds/bump-versions.js index 289a7260d..954dd223b 100644 --- a/misc/admin/lib/cmds/bump-versions.js +++ b/misc/admin/lib/cmds/bump-versions.js @@ -28,6 +28,7 @@ const npm = __importStar(require("../npm")); const utils_1 = require("../utils"); (function () { return __awaiter(this, void 0, void 0, function* () { + const common = utils_1.loadJson(path_1.resolve("package.json")).common; const progress = log_1.getProgressBar(log_1.colorify.bold("Bumping package.json versions")); const latestVersions = {}; let updated = false; @@ -36,6 +37,9 @@ const utils_1 = require("../utils"); for (let i = 0; i < path_1.dirnames.length; i++) { progress(i / path_1.dirnames.length); const dirname = path_1.dirnames[i]; + const packageJsonPath = path_1.getPackageJsonPath(dirname); + // Set the common elements to the package.json + local.updateJson(packageJsonPath, common, true); const pLocal = local.getPackage(dirname); const pNpm = yield npm.getPackage(dirname); const tarballHash = local.computeTarballHash(dirname); @@ -50,7 +54,7 @@ const utils_1 = require("../utils"); log_1.colorify.bold(" => "), log_1.colorify.green(version) ].join("")); - local.updateJson(path_1.getPackageJsonPath(dirname), { gitHead: undefined, tarballHash, version }, true); + local.updateJson(packageJsonPath, { gitHead: undefined, tarballHash, version }, true); updated = true; } latestVersions[pLocal.name] = version; diff --git a/misc/admin/lib/cmds/get-config.d.ts b/misc/admin/lib/cmds/get-config.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/misc/admin/lib/cmds/get-config.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/misc/admin/lib/cmds/get-config.js b/misc/admin/lib/cmds/get-config.js new file mode 100644 index 000000000..430a1e838 --- /dev/null +++ b/misc/admin/lib/cmds/get-config.js @@ -0,0 +1,26 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const config_1 = require("../config"); +if (process.argv.length !== 3) { + console.log("Usage: get-config KEY"); + process.exit(1); +} +const key = process.argv[2]; +(function () { + return __awaiter(this, void 0, void 0, function* () { + const value = yield config_1.config.get(key); + console.log(value); + }); +})().catch((error) => { + console.log(`Error running ${process.argv[0]}: ${error.message}`); + process.exit(1); +}); diff --git a/misc/admin/lib/cmds/publish.js b/misc/admin/lib/cmds/publish.js index 9ad644567..97bd274c4 100644 --- a/misc/admin/lib/cmds/publish.js +++ b/misc/admin/lib/cmds/publish.js @@ -19,8 +19,9 @@ var __importStar = (this && this.__importStar) || function (mod) { return result; }; Object.defineProperty(exports, "__esModule", { value: true }); -const aws_sdk_1 = __importDefault(require("aws-sdk")); +const { createHash } = require("crypto"); const fs_1 = __importDefault(require("fs")); +const aws_sdk_1 = __importDefault(require("aws-sdk")); const changelog_1 = require("../changelog"); const config_1 = require("../config"); const depgraph_1 = require("../depgraph"); @@ -153,16 +154,29 @@ exports.invalidate = invalidate; // The password above already succeeded const username = yield config_1.config.get("github-user"); const password = yield config_1.config.get("github-release"); + const hash = createHash("sha384").update(fs_1.default.readFileSync(path_1.resolve("packages/ethers/dist/ethers.umd.min.js"))).digest("base64"); const gitCommit = yield git_1.getGitTag(path_1.resolve("CHANGELOG.md")); + let content = change.content.trim(); + content += '\n\n----\n\n'; + content += '**Embedding UMD with [SRI](https:/\/developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity):**\n'; + content += '```html\n'; + content += '\n'; + content += '```'; // Publish the release const beta = false; - const link = yield github_1.createRelease(username, password, change.version, change.title, change.content, beta, gitCommit); + const link = yield github_1.createRelease(username, password, change.version, change.title, content, beta, gitCommit); console.log(`${log_1.colorify.bold("Published release:")} ${link}`); } // Upload libs to the CDN (as ethers-v5.0 and ethers-5.0.x) { - const bucketName = yield config_1.config.get("aws-upload-scripts-bucket"); - const originRoot = yield config_1.config.get("aws-upload-scripts-root"); + const bucketNameLib = yield config_1.config.get("aws-upload-scripts-bucket"); + const originRootLib = yield config_1.config.get("aws-upload-scripts-root"); + const bucketNameCors = yield config_1.config.get("aws-upload-scripts-bucket-cors"); + const originRootCors = yield config_1.config.get("aws-upload-scripts-root-cors"); const s3 = new aws_sdk_1.default.S3({ apiVersion: '2006-03-01', accessKeyId: awsAccessId, @@ -170,13 +184,49 @@ exports.invalidate = invalidate; }); // Upload the libs to ethers-v5.0 and ethers-5.0.x const fileInfos = [ - { filename: "packages/ethers/dist/ethers.esm.min.js", key: `ethers-${change.version.substring(1)}.esm.min.js` }, - { filename: "packages/ethers/dist/ethers.umd.min.js", key: `ethers-${change.version.substring(1)}.umd.min.js` }, - { filename: "packages/ethers/dist/ethers.esm.min.js", key: "ethers-5.0.esm.min.js" }, - { filename: "packages/ethers/dist/ethers.umd.min.js", key: "ethers-5.0.umd.min.js" }, + // The CORS-enabled versions on cdn-cors.ethers.io + { + bucketName: bucketNameCors, + originRoot: originRootCors, + suffix: "-cors", + filename: "packages/ethers/dist/ethers.esm.min.js", + key: `ethers-${change.version.substring(1)}.esm.min.js` + }, + { + bucketName: bucketNameCors, + originRoot: originRootCors, + suffix: "-cors", + filename: "packages/ethers/dist/ethers.umd.min.js", + key: `ethers-${change.version.substring(1)}.umd.min.js` + }, + // The non-CORS-enabled versions on cdn.ethers.io + { + bucketName: bucketNameLib, + originRoot: originRootLib, + filename: "packages/ethers/dist/ethers.esm.min.js", + key: `ethers-${change.version.substring(1)}.esm.min.js` + }, + { + bucketName: bucketNameLib, + originRoot: originRootLib, + filename: "packages/ethers/dist/ethers.umd.min.js", + key: `ethers-${change.version.substring(1)}.umd.min.js` + }, + { + bucketName: bucketNameLib, + originRoot: originRootLib, + filename: "packages/ethers/dist/ethers.esm.min.js", + key: "ethers-5.0.esm.min.js" + }, + { + bucketName: bucketNameLib, + originRoot: originRootLib, + filename: "packages/ethers/dist/ethers.umd.min.js", + key: "ethers-5.0.umd.min.js" + }, ]; for (let i = 0; i < fileInfos.length; i++) { - const { filename, key } = fileInfos[i]; + const { bucketName, originRoot, filename, key, suffix } = fileInfos[i]; yield putObject(s3, { ACL: "public-read", Body: fs_1.default.readFileSync(path_1.resolve(filename)), @@ -184,7 +234,7 @@ exports.invalidate = invalidate; ContentType: "application/javascript; charset=utf-8", Key: (originRoot + key) }); - console.log(`${log_1.colorify.bold("Uploaded:")} https://cdn.ethers.io/lib/${key}`); + console.log(`${log_1.colorify.bold("Uploaded:")} https://cdn${suffix || ""}.ethers.io/lib/${key}`); } } // Flush the edge caches diff --git a/misc/admin/lib/cmds/spell-check.js b/misc/admin/lib/cmds/spell-check.js index b9e9c12e8..09b08fb46 100644 --- a/misc/admin/lib/cmds/spell-check.js +++ b/misc/admin/lib/cmds/spell-check.js @@ -32,7 +32,7 @@ hardened has highly ignoring implemented implementer imported including instanti joined keyword labelled larger lookup matches mined modified modifies multi named needed nested neutered numeric offline optimizer overriding owned packed padded parsed parsing passed placeholder processing properties prototyping reached -recommended recovered redacted remaining replaced required +recommended recovered redacted remaining replaced required reverted serializes shared signed signing skipped stored supported tagging targetted throttled transactions typed uninstall unstake unsubscribe using verifies verifying website diff --git a/misc/admin/lib/cmds/update-hashes.js b/misc/admin/lib/cmds/update-hashes.js index f7fa84560..feda49c85 100644 --- a/misc/admin/lib/cmds/update-hashes.js +++ b/misc/admin/lib/cmds/update-hashes.js @@ -9,7 +9,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", { value: true }); -//import { getGitTag } from "../git"; const local_1 = require("../local"); const log_1 = require("../log"); const path_1 = require("../path"); diff --git a/misc/admin/src.ts/cmds/bump-versions.ts b/misc/admin/src.ts/cmds/bump-versions.ts index 78091877a..f8e49f2cc 100644 --- a/misc/admin/src.ts/cmds/bump-versions.ts +++ b/misc/admin/src.ts/cmds/bump-versions.ts @@ -9,6 +9,8 @@ import * as npm from "../npm"; import { loadJson, repeat, saveJson } from "../utils"; (async function() { + const common = loadJson(resolve("package.json")).common; + const progress = getProgressBar(colorify.bold("Bumping package.json versions")); const latestVersions: Record = { }; @@ -21,6 +23,10 @@ import { loadJson, repeat, saveJson } from "../utils"; progress(i / dirnames.length); const dirname = dirnames[i]; + const packageJsonPath = getPackageJsonPath(dirname); + + // Set the common elements to the package.json + local.updateJson(packageJsonPath, common, true); const pLocal = local.getPackage(dirname); const pNpm = await npm.getPackage(dirname); @@ -41,7 +47,7 @@ import { loadJson, repeat, saveJson } from "../utils"; colorify.green(version) ].join("")); - local.updateJson(getPackageJsonPath(dirname), { gitHead: undefined, tarballHash, version }, true); + local.updateJson(packageJsonPath, { gitHead: undefined, tarballHash, version }, true); updated = true; } diff --git a/misc/admin/src.ts/cmds/get-config.ts b/misc/admin/src.ts/cmds/get-config.ts new file mode 100644 index 000000000..ab2240d38 --- /dev/null +++ b/misc/admin/src.ts/cmds/get-config.ts @@ -0,0 +1,16 @@ +import { config } from "../config"; + +if (process.argv.length !== 3) { + console.log("Usage: get-config KEY"); + process.exit(1); +} + +const key = process.argv[2]; + +(async function() { + const value = await config.get(key); + console.log(value); +})().catch((error) => { + console.log(`Error running ${ process.argv[0] }: ${ error.message }`); + process.exit(1); +}); diff --git a/misc/admin/src.ts/cmds/publish.ts b/misc/admin/src.ts/cmds/publish.ts index 9977763fe..ec4321c73 100644 --- a/misc/admin/src.ts/cmds/publish.ts +++ b/misc/admin/src.ts/cmds/publish.ts @@ -1,6 +1,8 @@ -import AWS from 'aws-sdk'; +const { createHash } = require("crypto"); import fs from "fs"; +import AWS from 'aws-sdk'; + import { getLatestChange } from "../changelog"; import { config } from "../config"; import { getOrdered } from "../depgraph"; @@ -157,18 +159,34 @@ export function invalidate(cloudfront: AWS.CloudFront, distributionId: string): const username = await config.get("github-user"); const password = await config.get("github-release"); + const hash = createHash("sha384").update(fs.readFileSync(resolve("packages/ethers/dist/ethers.umd.min.js"))).digest("base64"); + const gitCommit = await getGitTag(resolve("CHANGELOG.md")); + let content = change.content.trim(); + content += '\n\n----\n\n'; + content += '**Embedding UMD with [SRI](https:/\/developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity):**\n'; + content += '```html\n'; + content += '\n'; + content += '```'; + // Publish the release const beta = false; - const link = await createRelease(username, password, change.version, change.title, change.content, beta, gitCommit); + const link = await createRelease(username, password, change.version, change.title, content, beta, gitCommit); console.log(`${ colorify.bold("Published release:") } ${ link }`); } // Upload libs to the CDN (as ethers-v5.0 and ethers-5.0.x) { - const bucketName = await config.get("aws-upload-scripts-bucket"); - const originRoot = await config.get("aws-upload-scripts-root"); + const bucketNameLib = await config.get("aws-upload-scripts-bucket"); + const originRootLib = await config.get("aws-upload-scripts-root"); + + const bucketNameCors = await config.get("aws-upload-scripts-bucket-cors"); + const originRootCors = await config.get("aws-upload-scripts-root-cors"); const s3 = new AWS.S3({ apiVersion: '2006-03-01', @@ -177,15 +195,52 @@ export function invalidate(cloudfront: AWS.CloudFront, distributionId: string): }); // Upload the libs to ethers-v5.0 and ethers-5.0.x - const fileInfos: Array<{ filename: string, key: string }> = [ - { filename: "packages/ethers/dist/ethers.esm.min.js", key: `ethers-${ change.version.substring(1) }.esm.min.js` }, - { filename: "packages/ethers/dist/ethers.umd.min.js", key: `ethers-${ change.version.substring(1) }.umd.min.js` }, - { filename: "packages/ethers/dist/ethers.esm.min.js", key: "ethers-5.0.esm.min.js" }, - { filename: "packages/ethers/dist/ethers.umd.min.js", key: "ethers-5.0.umd.min.js" }, + const fileInfos: Array<{ bucketName: string, originRoot: string, filename: string, key: string, suffix?: string }> = [ + // The CORS-enabled versions on cdn-cors.ethers.io + { + bucketName: bucketNameCors, + originRoot: originRootCors, + suffix: "-cors", + filename: "packages/ethers/dist/ethers.esm.min.js", + key: `ethers-${ change.version.substring(1) }.esm.min.js` + }, + { + bucketName: bucketNameCors, + originRoot: originRootCors, + suffix: "-cors", + filename: "packages/ethers/dist/ethers.umd.min.js", + key: `ethers-${ change.version.substring(1) }.umd.min.js` + }, + + // The non-CORS-enabled versions on cdn.ethers.io + { + bucketName: bucketNameLib, + originRoot: originRootLib, + filename: "packages/ethers/dist/ethers.esm.min.js", + key: `ethers-${ change.version.substring(1) }.esm.min.js` + }, + { + bucketName: bucketNameLib, + originRoot: originRootLib, + filename: "packages/ethers/dist/ethers.umd.min.js", + key: `ethers-${ change.version.substring(1) }.umd.min.js` + }, + { + bucketName: bucketNameLib, + originRoot: originRootLib, + filename: "packages/ethers/dist/ethers.esm.min.js", + key: "ethers-5.0.esm.min.js" + }, + { + bucketName: bucketNameLib, + originRoot: originRootLib, + filename: "packages/ethers/dist/ethers.umd.min.js", + key: "ethers-5.0.umd.min.js" + }, ]; for (let i = 0; i < fileInfos.length; i++) { - const { filename, key } = fileInfos[i]; + const { bucketName, originRoot, filename, key, suffix } = fileInfos[i]; await putObject(s3, { ACL: "public-read", Body: fs.readFileSync(resolve(filename)), @@ -193,7 +248,7 @@ export function invalidate(cloudfront: AWS.CloudFront, distributionId: string): ContentType: "application/javascript; charset=utf-8", Key: (originRoot + key) }); - console.log(`${ colorify.bold("Uploaded:") } https://cdn.ethers.io/lib/${ key }`); + console.log(`${ colorify.bold("Uploaded:") } https://cdn${ suffix || "" }.ethers.io/lib/${ key }`); } } diff --git a/misc/admin/src.ts/cmds/spell-check.ts b/misc/admin/src.ts/cmds/spell-check.ts index ead5fd1ee..d1654084d 100644 --- a/misc/admin/src.ts/cmds/spell-check.ts +++ b/misc/admin/src.ts/cmds/spell-check.ts @@ -23,7 +23,7 @@ hardened has highly ignoring implemented implementer imported including instanti joined keyword labelled larger lookup matches mined modified modifies multi named needed nested neutered numeric offline optimizer overriding owned packed padded parsed parsing passed placeholder processing properties prototyping reached -recommended recovered redacted remaining replaced required +recommended recovered redacted remaining replaced required reverted serializes shared signed signing skipped stored supported tagging targetted throttled transactions typed uninstall unstake unsubscribe using verifies verifying website diff --git a/misc/admin/src.ts/cmds/update-hashes.ts b/misc/admin/src.ts/cmds/update-hashes.ts index b2f717721..008b3b193 100644 --- a/misc/admin/src.ts/cmds/update-hashes.ts +++ b/misc/admin/src.ts/cmds/update-hashes.ts @@ -1,4 +1,4 @@ -//import { getGitTag } from "../git"; + import { computeTarballHash, updateJson } from "../local"; import { colorify, getProgressBar } from "../log"; import { dirnames, getPackageJsonPath } from "../path"; diff --git a/misc/admin/src.ts/github.ts b/misc/admin/src.ts/github.ts index 3bf7fc147..ff6ed4104 100644 --- a/misc/admin/src.ts/github.ts +++ b/misc/admin/src.ts/github.ts @@ -21,7 +21,6 @@ export async function createRelease(user: string, password: string, tagName: str password: password }); - return JSON.parse(Buffer.from(result.body).toString("utf8")).html_url; }