diff options
author | 2023-02-01 10:56:08 -0800 | |
---|---|---|
committer | 2023-02-01 10:56:08 -0800 | |
commit | 9c27b5d17f3e2c54482be7df05577ca36dd824b3 (patch) | |
tree | 7314889755c0760b3525bb4ef2ba030ca367d840 | |
parent | 9973df028b9c272ea88804705282c4c31a4295e8 (diff) | |
download | bun-9c27b5d17f3e2c54482be7df05577ca36dd824b3.tar.gz bun-9c27b5d17f3e2c54482be7df05577ca36dd824b3.tar.zst bun-9c27b5d17f3e2c54482be7df05577ca36dd824b3.zip |
Fix getting SHA for canary
-rw-r--r-- | packages/bun-release/scripts/npm-exec.ts | 4 | ||||
-rw-r--r-- | packages/bun-release/scripts/npm-postinstall.ts | 4 | ||||
-rw-r--r-- | packages/bun-release/scripts/upload-assets.ts | 35 | ||||
-rw-r--r-- | packages/bun-release/scripts/upload-npm.ts | 13 | ||||
-rw-r--r-- | packages/bun-release/src/console.ts | 8 | ||||
-rw-r--r-- | packages/bun-release/src/fetch.ts | 9 | ||||
-rw-r--r-- | packages/bun-release/src/fs.ts | 11 | ||||
-rw-r--r-- | packages/bun-release/src/github.ts | 45 | ||||
-rw-r--r-- | packages/bun-release/src/npm/install.ts | 23 | ||||
-rw-r--r-- | packages/bun-release/src/platform.ts | 19 |
10 files changed, 49 insertions, 122 deletions
diff --git a/packages/bun-release/scripts/npm-exec.ts b/packages/bun-release/scripts/npm-exec.ts index 5b054ac86..517f296ce 100644 --- a/packages/bun-release/scripts/npm-exec.ts +++ b/packages/bun-release/scripts/npm-exec.ts @@ -2,12 +2,12 @@ import { importBun } from "../src/npm/install"; import { execFileSync } from "child_process"; importBun() - .then((bun) => { + .then(bun => { return execFileSync(bun, process.argv.slice(2), { stdio: "inherit", }); }) - .catch((error) => { + .catch(error => { console.error(error); process.exit(1); }); diff --git a/packages/bun-release/scripts/npm-postinstall.ts b/packages/bun-release/scripts/npm-postinstall.ts index bde044300..e0f5d5aaf 100644 --- a/packages/bun-release/scripts/npm-postinstall.ts +++ b/packages/bun-release/scripts/npm-postinstall.ts @@ -1,10 +1,10 @@ import { importBun, optimizeBun } from "../src/npm/install"; importBun() - .then((path) => { + .then(path => { optimizeBun(path); }) - .catch((error) => { + .catch(error => { console.error(error); process.exit(1); }); diff --git a/packages/bun-release/scripts/upload-assets.ts b/packages/bun-release/scripts/upload-assets.ts index 27b7ba01a..aeab55c04 100644 --- a/packages/bun-release/scripts/upload-assets.ts +++ b/packages/bun-release/scripts/upload-assets.ts @@ -13,7 +13,7 @@ if (!tag) { const { tag_name, assets } = await getRelease(tag); log("Release:", tag_name, "\n"); log("Existing assets:\n", ...assets.map(({ name }) => `- ${name}\n`)); -log("Updating assets:\n", ...paths.map((path) => `+ ${basename(path)}\n`)); +log("Updating assets:\n", ...paths.map(path => `+ ${basename(path)}\n`)); await confirm(); log("Hashing assets...\n"); @@ -37,12 +37,7 @@ log( .filter(([name]) => !updated.has(name)) .map(([name, sha256]) => ` - ${sha256} => ${name}\n`), ); -log( - "Changed hashes:\n", - ...Array.from(updated.entries()).map( - ([name, sha256]) => ` + ${sha256} => ${name}\n`, - ), -); +log("Changed hashes:\n", ...Array.from(updated.entries()).map(([name, sha256]) => ` + ${sha256} => ${name}\n`)); await confirm(); log("Signing assets...\n"); @@ -51,39 +46,23 @@ const path = join(cwd, "SHASUMS256.txt"); const signedPath = `${path}.asc`; write( path, - [ - ...Array.from(updated.entries()), - ...Array.from(existing.entries()).filter(([name]) => !updated.has(name)), - ] + [...Array.from(updated.entries()), ...Array.from(existing.entries()).filter(([name]) => !updated.has(name))] .sort(([a], [b]) => a.localeCompare(b)) .map(([name, sha256]) => `${sha256} ${name}`) .join("\n"), ); -const { stdout: keys } = spawn("gpg", [ - "--list-secret-keys", - "--keyid-format", - "long", -]); +const { stdout: keys } = spawn("gpg", ["--list-secret-keys", "--keyid-format", "long"]); const verifiedKeys = [ "F3DCC08A8572C0749B3E18888EAB4D40A7B22B59", // robobun@oven.sh ]; -if (!verifiedKeys.find((key) => keys.includes(key))) { +if (!verifiedKeys.find(key => keys.includes(key))) { warn("Signature is probably wrong, key not found: robobun@oven.sh"); } const passphrase = await stdin("Passphrase:"); log(); const { exitCode, stdout, stderr } = spawn( "gpg", - [ - "--pinentry-mode", - "loopback", - "--passphrase-fd", - "0", - "--clearsign", - "--output", - signedPath, - path, - ], + ["--pinentry-mode", "loopback", "--passphrase-fd", "0", "--clearsign", "--output", signedPath, path], { // @ts-ignore input: passphrase, @@ -96,7 +75,7 @@ if (exitCode !== 0) { } const uploads = [...paths, path, signedPath]; -log("Uploading assets:\n", ...uploads.map((path) => ` + ${basename(path)}\n`)); +log("Uploading assets:\n", ...uploads.map(path => ` + ${basename(path)}\n`)); await confirm(); for (const path of uploads) { diff --git a/packages/bun-release/scripts/upload-npm.ts b/packages/bun-release/scripts/upload-npm.ts index 8309d7e57..c81ef4763 100644 --- a/packages/bun-release/scripts/upload-npm.ts +++ b/packages/bun-release/scripts/upload-npm.ts @@ -73,9 +73,7 @@ async function buildRootModule() { scripts: { postinstall: "node install.js", }, - optionalDependencies: Object.fromEntries( - platforms.map(({ bin }) => [`${owner}/${bin}`, version]), - ), + optionalDependencies: Object.fromEntries(platforms.map(({ bin }) => [`${owner}/${bin}`, version])), bin: { bun: "bin/bun", bunx: "bin/bun", @@ -136,10 +134,7 @@ function publishModule(name: string, dryRun?: boolean): void { } } -async function extractFromZip( - url: string, - filename: string, -): Promise<JSZipObject> { +async function extractFromZip(url: string, filename: string): Promise<JSZipObject> { const response = await fetch(url); const buffer = await response.arrayBuffer(); const zip = await loadAsync(buffer); @@ -155,9 +150,7 @@ async function extractFromZip( async function getCanarySemver(): Promise<string> { const date = new Date().toISOString().split("T")[0].replace(/-/g, ""); try { - const response = await fetch( - `https://registry.npmjs.org/-/package/${module}/dist-tags`, - ); + const response = await fetch(`https://registry.npmjs.org/-/package/${module}/dist-tags`); const { canary }: { canary: string } = await response.json(); if (canary.includes(date)) { const match = /canary.[0-9]{8}\.([0-9]+)+?/.exec(canary); diff --git a/packages/bun-release/src/console.ts b/packages/bun-release/src/console.ts index 69e0911d6..5c9db8872 100644 --- a/packages/bun-release/src/console.ts +++ b/packages/bun-release/src/console.ts @@ -4,9 +4,7 @@ import { createInterface } from "readline"; export const isAction = !!process.env["GITHUB_ACTION"]; export const isDebug = - process.env["DEBUG"] === "1" || - process.env["LOG_LEVEL"] === "debug" || - process.env["RUNNER_DEBUG"] === "1"; + process.env["DEBUG"] === "1" || process.env["LOG_LEVEL"] === "debug" || process.env["RUNNER_DEBUG"] === "1"; export function debug(...message: any[]): void { if (isAction) { @@ -54,10 +52,10 @@ export async function stdin(question: string): Promise<string> { terminal: false, }); let buffer = ""; - reader.on("line", (line) => { + reader.on("line", line => { buffer += line; }); - return new Promise((resolve) => { + return new Promise(resolve => { reader.once("close", () => resolve(buffer)); }); } diff --git a/packages/bun-release/src/fetch.ts b/packages/bun-release/src/fetch.ts index d9c85a5f3..ce385ffd3 100644 --- a/packages/bun-release/src/fetch.ts +++ b/packages/bun-release/src/fetch.ts @@ -17,13 +17,10 @@ async function webFetch(url: string, options: Options = {}): Promise<Response> { return response; } -async function nodeFetch( - url: string, - options: Options = {}, -): Promise<Response> { +async function nodeFetch(url: string, options: Options = {}): Promise<Response> { const { get } = await import("node:http"); return new Promise((resolve, reject) => { - get(url, (response) => { + get(url, response => { debug("http.get", url, response.statusCode); const status = response.statusCode ?? 501; if (response.headers.location && isRedirect(status)) { @@ -33,7 +30,7 @@ async function nodeFetch( return reject(new Error(`${status}: ${url}`)); } const body: Buffer[] = []; - response.on("data", (chunk) => { + response.on("data", chunk => { body.push(chunk); }); response.on("end", () => { diff --git a/packages/bun-release/src/fs.ts b/packages/bun-release/src/fs.ts index ef20c224a..34b1c4076 100644 --- a/packages/bun-release/src/fs.ts +++ b/packages/bun-release/src/fs.ts @@ -73,10 +73,7 @@ export function rename(path: string, newPath: string): void { fs.renameSync(path, newPath); } -export function write( - dst: string, - content: string | ArrayBuffer | ArrayBufferView, -): void { +export function write(dst: string, content: string | ArrayBuffer | ArrayBufferView): void { debug("write", dst); try { fs.writeFileSync(dst, content); @@ -123,11 +120,7 @@ export function blob(path: string): Blob { } const buffer = fs.readFileSync(path); return new Blob([buffer], { - type: path.endsWith(".zip") - ? "application/zip" - : path.endsWith(".txt") - ? "text/plain" - : "application/octet-stream", + type: path.endsWith(".zip") ? "application/zip" : path.endsWith(".txt") ? "text/plain" : "application/octet-stream", }); } diff --git a/packages/bun-release/src/github.ts b/packages/bun-release/src/github.ts index fbbbbf267..fd743d17e 100644 --- a/packages/bun-release/src/github.ts +++ b/packages/bun-release/src/github.ts @@ -3,10 +3,7 @@ import { Octokit } from "octokit"; import { fetch } from "./fetch"; import { debug, log, warn, error } from "./console"; -const [owner, repo] = process.env["GITHUB_REPOSITORY"]?.split("/") ?? [ - "oven-sh", - "bun", -]; +const [owner, repo] = process.env["GITHUB_REPOSITORY"]?.split("/") ?? ["oven-sh", "bun"]; const octokit = new Octokit({ auth: process.env["GITHUB_TOKEN"], @@ -24,14 +21,10 @@ const octokit = new Octokit({ export async function github<R extends Route>( url: R | keyof Endpoints, options?: Omit< - R extends keyof Endpoints - ? Endpoints[R]["parameters"] & RequestParameters - : RequestParameters, + R extends keyof Endpoints ? Endpoints[R]["parameters"] & RequestParameters : RequestParameters, "owner" | "repo" >, -): Promise< - R extends keyof Endpoints ? Endpoints[R]["response"]["data"] : unknown -> { +): Promise<R extends keyof Endpoints ? Endpoints[R]["response"]["data"] : unknown> { // @ts-ignore const { data } = await octokit.request(url, { owner, @@ -52,7 +45,7 @@ export async function getRelease(tag?: string) { export async function uploadAsset(tag: string, name: string, blob: Blob) { const release = await getRelease(tag); - const asset = release.assets.find((asset) => asset.name === name); + const asset = release.assets.find(asset => asset.name === name); // Github requires that existing assets are deleted before uploading // a new asset, but does not provide a rename or re-upload API?!? if (asset) { @@ -60,24 +53,21 @@ export async function uploadAsset(tag: string, name: string, blob: Blob) { asset_id: asset.id, }); } - return github( - "POST {origin}/repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", - { - baseUrl: "https://uploads.github.com", - release_id: release.id, - name, - headers: { - "content-type": blob.type, - "content-length": blob.size, - }, - data: Buffer.from(await blob.arrayBuffer()), + return github("POST {origin}/repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", { + baseUrl: "https://uploads.github.com", + release_id: release.id, + name, + headers: { + "content-type": blob.type, + "content-length": blob.size, }, - ); + data: Buffer.from(await blob.arrayBuffer()), + }); } export async function downloadAsset(tag: string, name: string): Promise<Blob> { const release = await getRelease(tag); - const asset = release.assets.find((asset) => asset.name === name); + const asset = release.assets.find(asset => asset.name === name); if (!asset) { throw new Error(`Asset not found: ${name}`); } @@ -86,8 +76,11 @@ export async function downloadAsset(tag: string, name: string): Promise<Blob> { } export async function getSha(tag: string, format?: "short" | "long") { - const { sha } = await github("GET /repos/{owner}/{repo}/git/tags/{tag_sha}", { - tag_sha: formatTag(tag), + const ref = formatTag(tag); + const { + object: { sha }, + } = await github("GET /repos/{owner}/{repo}/git/ref/{ref}", { + ref: ref === "canary" ? "heads/main" : `tags/${ref}`, }); return format === "short" ? sha.substring(0, 7) : sha; } diff --git a/packages/bun-release/src/npm/install.ts b/packages/bun-release/src/npm/install.ts index ac6f2e670..12d30ff94 100644 --- a/packages/bun-release/src/npm/install.ts +++ b/packages/bun-release/src/npm/install.ts @@ -53,10 +53,7 @@ async function requireBun(platform: Platform): Promise<string> { await downloadBun(platform, cwd); } catch (cause) { debug("downloadBun failed", cause); - error( - `Failed to download package "${module}" from "registry.npmjs.org".`, - cause, - ); + error(`Failed to download package "${module}" from "registry.npmjs.org".`, cause); } } return resolveBun(); @@ -69,14 +66,7 @@ function installBun(platform: Platform, dst: string): void { write(join(cwd, "package.json"), "{}"); const { exitCode } = spawn( "npm", - [ - "install", - "--loglevel=error", - "--prefer-offline", - "--no-audit", - "--progress=false", - `${module}@${version}`, - ], + ["install", "--loglevel=error", "--prefer-offline", "--no-audit", "--progress=false", `${module}@${version}`], { cwd, stdio: "pipe", @@ -100,9 +90,7 @@ function installBun(platform: Platform, dst: string): void { } async function downloadBun(platform: Platform, dst: string): Promise<void> { - const response = await fetch( - `https://registry.npmjs.org/${owner}/${platform.bin}/-/${platform.bin}-${version}.tgz`, - ); + const response = await fetch(`https://registry.npmjs.org/${owner}/${platform.bin}/-/${platform.bin}-${version}.tgz`); const tgz = await response.arrayBuffer(); let buffer: Buffer; try { @@ -111,10 +99,7 @@ async function downloadBun(platform: Platform, dst: string): Promise<void> { throw new Error("Invalid gzip data", { cause }); } function str(i: number, n: number): string { - return String.fromCharCode(...buffer.subarray(i, i + n)).replace( - /\0.*$/, - "", - ); + return String.fromCharCode(...buffer.subarray(i, i + n)).replace(/\0.*$/, ""); } let offset = 0; while (offset < buffer.length) { diff --git a/packages/bun-release/src/platform.ts b/packages/bun-release/src/platform.ts index fb438d824..98fd6fe36 100644 --- a/packages/bun-release/src/platform.ts +++ b/packages/bun-release/src/platform.ts @@ -4,14 +4,9 @@ import { debug } from "./console"; export const os = process.platform; -export const arch = - os === "darwin" && process.arch === "x64" && isRosetta2() - ? "arm64" - : process.arch; +export const arch = os === "darwin" && process.arch === "x64" && isRosetta2() ? "arm64" : process.arch; -export const avx2 = - (arch === "x64" && os === "linux" && isLinuxAVX2()) || - (os === "darwin" && isDarwinAVX2()); +export const avx2 = (arch === "x64" && os === "linux" && isLinuxAVX2()) || (os === "darwin" && isDarwinAVX2()); export type Platform = { os: string; @@ -63,10 +58,7 @@ export const platforms: Platform[] = [ ]; export const supportedPlatforms: Platform[] = platforms - .filter( - (platform) => - platform.os === os && platform.arch === arch && (!platform.avx2 || avx2), - ) + .filter(platform => platform.os === os && platform.arch === arch && (!platform.avx2 || avx2)) .sort((a, b) => (a.avx2 === b.avx2 ? 0 : a.avx2 ? -1 : 1)); function isLinuxAVX2(): boolean { @@ -90,10 +82,7 @@ function isDarwinAVX2(): boolean { function isRosetta2(): boolean { try { - const { exitCode, stdout } = spawn("sysctl", [ - "-n", - "sysctl.proc_translated", - ]); + const { exitCode, stdout } = spawn("sysctl", ["-n", "sysctl.proc_translated"]); return exitCode === 0 && stdout.includes("1"); } catch (error) { debug("isRosetta2 failed", error); |