build: Added updated admin scripts

This commit is contained in:
Richard Moore 2020-11-25 15:29:58 -05:00
parent 211defa27f
commit ba00df1ab7
No known key found for this signature in database
GPG Key ID: 665176BE8E9DC651
12 changed files with 184 additions and 28 deletions

@ -28,6 +28,7 @@ const npm = __importStar(require("../npm"));
const utils_1 = require("../utils"); const utils_1 = require("../utils");
(function () { (function () {
return __awaiter(this, void 0, void 0, 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 progress = log_1.getProgressBar(log_1.colorify.bold("Bumping package.json versions"));
const latestVersions = {}; const latestVersions = {};
let updated = false; let updated = false;
@ -36,6 +37,9 @@ const utils_1 = require("../utils");
for (let i = 0; i < path_1.dirnames.length; i++) { for (let i = 0; i < path_1.dirnames.length; i++) {
progress(i / path_1.dirnames.length); progress(i / path_1.dirnames.length);
const dirname = path_1.dirnames[i]; 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 pLocal = local.getPackage(dirname);
const pNpm = yield npm.getPackage(dirname); const pNpm = yield npm.getPackage(dirname);
const tarballHash = local.computeTarballHash(dirname); const tarballHash = local.computeTarballHash(dirname);
@ -50,7 +54,7 @@ const utils_1 = require("../utils");
log_1.colorify.bold(" => "), log_1.colorify.bold(" => "),
log_1.colorify.green(version) log_1.colorify.green(version)
].join("")); ].join(""));
local.updateJson(path_1.getPackageJsonPath(dirname), { gitHead: undefined, tarballHash, version }, true); local.updateJson(packageJsonPath, { gitHead: undefined, tarballHash, version }, true);
updated = true; updated = true;
} }
latestVersions[pLocal.name] = version; latestVersions[pLocal.name] = version;

1
misc/admin/lib/cmds/get-config.d.ts vendored Normal file

@ -0,0 +1 @@
export {};

@ -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);
});

@ -19,8 +19,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result; return result;
}; };
Object.defineProperty(exports, "__esModule", { value: true }); 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 fs_1 = __importDefault(require("fs"));
const aws_sdk_1 = __importDefault(require("aws-sdk"));
const changelog_1 = require("../changelog"); const changelog_1 = require("../changelog");
const config_1 = require("../config"); const config_1 = require("../config");
const depgraph_1 = require("../depgraph"); const depgraph_1 = require("../depgraph");
@ -153,16 +154,29 @@ exports.invalidate = invalidate;
// The password above already succeeded // The password above already succeeded
const username = yield config_1.config.get("github-user"); const username = yield config_1.config.get("github-user");
const password = yield config_1.config.get("github-release"); 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")); 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 += '<script type="text/javascript"\n';
content += ` integrity="sha384-${hash}"\n`;
content += ' crossorigin="anonymous"\n';
content += ` src="https:/\/cdn-cors.ethers.io/lib/ethers-${change.version.substring(1)}.umd.min.js">\n`;
content += '</script>\n';
content += '```';
// Publish the release // Publish the release
const beta = false; 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}`); console.log(`${log_1.colorify.bold("Published release:")} ${link}`);
} }
// Upload libs to the CDN (as ethers-v5.0 and ethers-5.0.x) // 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 bucketNameLib = yield config_1.config.get("aws-upload-scripts-bucket");
const originRoot = yield config_1.config.get("aws-upload-scripts-root"); 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({ const s3 = new aws_sdk_1.default.S3({
apiVersion: '2006-03-01', apiVersion: '2006-03-01',
accessKeyId: awsAccessId, accessKeyId: awsAccessId,
@ -170,13 +184,49 @@ exports.invalidate = invalidate;
}); });
// Upload the libs to ethers-v5.0 and ethers-5.0.x // Upload the libs to ethers-v5.0 and ethers-5.0.x
const fileInfos = [ const fileInfos = [
{ filename: "packages/ethers/dist/ethers.esm.min.js", key: `ethers-${change.version.substring(1)}.esm.min.js` }, // The CORS-enabled versions on cdn-cors.ethers.io
{ 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" }, bucketName: bucketNameCors,
{ filename: "packages/ethers/dist/ethers.umd.min.js", key: "ethers-5.0.umd.min.js" }, 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++) { for (let i = 0; i < fileInfos.length; i++) {
const { filename, key } = fileInfos[i]; const { bucketName, originRoot, filename, key, suffix } = fileInfos[i];
yield putObject(s3, { yield putObject(s3, {
ACL: "public-read", ACL: "public-read",
Body: fs_1.default.readFileSync(path_1.resolve(filename)), Body: fs_1.default.readFileSync(path_1.resolve(filename)),
@ -184,7 +234,7 @@ exports.invalidate = invalidate;
ContentType: "application/javascript; charset=utf-8", ContentType: "application/javascript; charset=utf-8",
Key: (originRoot + key) 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 // Flush the edge caches

@ -32,7 +32,7 @@ hardened has highly ignoring implemented implementer imported including instanti
joined keyword labelled larger lookup matches mined modified modifies multi joined keyword labelled larger lookup matches mined modified modifies multi
named needed nested neutered numeric offline optimizer overriding owned packed named needed nested neutered numeric offline optimizer overriding owned packed
padded parsed parsing passed placeholder processing properties prototyping reached 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 serializes shared signed signing skipped stored supported tagging targetted
throttled transactions typed uninstall unstake unsubscribe using verifies verifying website throttled transactions typed uninstall unstake unsubscribe using verifies verifying website

@ -9,7 +9,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
}); });
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
//import { getGitTag } from "../git";
const local_1 = require("../local"); const local_1 = require("../local");
const log_1 = require("../log"); const log_1 = require("../log");
const path_1 = require("../path"); const path_1 = require("../path");

@ -9,6 +9,8 @@ import * as npm from "../npm";
import { loadJson, repeat, saveJson } from "../utils"; import { loadJson, repeat, saveJson } from "../utils";
(async function() { (async function() {
const common = loadJson(resolve("package.json")).common;
const progress = getProgressBar(colorify.bold("Bumping package.json versions")); const progress = getProgressBar(colorify.bold("Bumping package.json versions"));
const latestVersions: Record<string, string> = { }; const latestVersions: Record<string, string> = { };
@ -21,6 +23,10 @@ import { loadJson, repeat, saveJson } from "../utils";
progress(i / dirnames.length); progress(i / dirnames.length);
const dirname = dirnames[i]; 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 pLocal = local.getPackage(dirname);
const pNpm = await npm.getPackage(dirname); const pNpm = await npm.getPackage(dirname);
@ -41,7 +47,7 @@ import { loadJson, repeat, saveJson } from "../utils";
colorify.green(version) colorify.green(version)
].join("")); ].join(""));
local.updateJson(getPackageJsonPath(dirname), { gitHead: undefined, tarballHash, version }, true); local.updateJson(packageJsonPath, { gitHead: undefined, tarballHash, version }, true);
updated = true; updated = true;
} }

@ -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);
});

@ -1,6 +1,8 @@
import AWS from 'aws-sdk'; const { createHash } = require("crypto");
import fs from "fs"; import fs from "fs";
import AWS from 'aws-sdk';
import { getLatestChange } from "../changelog"; import { getLatestChange } from "../changelog";
import { config } from "../config"; import { config } from "../config";
import { getOrdered } from "../depgraph"; import { getOrdered } from "../depgraph";
@ -157,18 +159,34 @@ export function invalidate(cloudfront: AWS.CloudFront, distributionId: string):
const username = await config.get("github-user"); const username = await config.get("github-user");
const password = await config.get("github-release"); 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")); 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 += '<script type="text/javascript"\n';
content += ` integrity="sha384-${ hash }"\n`;
content += ' crossorigin="anonymous"\n';
content += ` src="https:/\/cdn-cors.ethers.io/lib/ethers-${ change.version.substring(1) }.umd.min.js">\n`;
content += '</script>\n';
content += '```';
// Publish the release // Publish the release
const beta = false; 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 }`); console.log(`${ colorify.bold("Published release:") } ${ link }`);
} }
// Upload libs to the CDN (as ethers-v5.0 and ethers-5.0.x) // Upload libs to the CDN (as ethers-v5.0 and ethers-5.0.x)
{ {
const bucketName = await config.get("aws-upload-scripts-bucket"); const bucketNameLib = await config.get("aws-upload-scripts-bucket");
const originRoot = await config.get("aws-upload-scripts-root"); 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({ const s3 = new AWS.S3({
apiVersion: '2006-03-01', 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 // Upload the libs to ethers-v5.0 and ethers-5.0.x
const fileInfos: Array<{ filename: string, key: string }> = [ const fileInfos: Array<{ bucketName: string, originRoot: string, filename: string, key: string, suffix?: string }> = [
{ filename: "packages/ethers/dist/ethers.esm.min.js", key: `ethers-${ change.version.substring(1) }.esm.min.js` }, // The CORS-enabled versions on cdn-cors.ethers.io
{ 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" }, bucketName: bucketNameCors,
{ filename: "packages/ethers/dist/ethers.umd.min.js", key: "ethers-5.0.umd.min.js" }, 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++) { for (let i = 0; i < fileInfos.length; i++) {
const { filename, key } = fileInfos[i]; const { bucketName, originRoot, filename, key, suffix } = fileInfos[i];
await putObject(s3, { await putObject(s3, {
ACL: "public-read", ACL: "public-read",
Body: fs.readFileSync(resolve(filename)), Body: fs.readFileSync(resolve(filename)),
@ -193,7 +248,7 @@ export function invalidate(cloudfront: AWS.CloudFront, distributionId: string):
ContentType: "application/javascript; charset=utf-8", ContentType: "application/javascript; charset=utf-8",
Key: (originRoot + key) 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 }`);
} }
} }

@ -23,7 +23,7 @@ hardened has highly ignoring implemented implementer imported including instanti
joined keyword labelled larger lookup matches mined modified modifies multi joined keyword labelled larger lookup matches mined modified modifies multi
named needed nested neutered numeric offline optimizer overriding owned packed named needed nested neutered numeric offline optimizer overriding owned packed
padded parsed parsing passed placeholder processing properties prototyping reached 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 serializes shared signed signing skipped stored supported tagging targetted
throttled transactions typed uninstall unstake unsubscribe using verifies verifying website throttled transactions typed uninstall unstake unsubscribe using verifies verifying website

@ -1,4 +1,4 @@
//import { getGitTag } from "../git";
import { computeTarballHash, updateJson } from "../local"; import { computeTarballHash, updateJson } from "../local";
import { colorify, getProgressBar } from "../log"; import { colorify, getProgressBar } from "../log";
import { dirnames, getPackageJsonPath } from "../path"; import { dirnames, getPackageJsonPath } from "../path";

@ -21,7 +21,6 @@ export async function createRelease(user: string, password: string, tagName: str
password: password password: password
}); });
return JSON.parse(Buffer.from(result.body).toString("utf8")).html_url; return JSON.parse(Buffer.from(result.body).toString("utf8")).html_url;
} }