aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ashcon Partovi <ashcon@partovi.net> 2023-02-01 10:56:08 -0800
committerGravatar Ashcon Partovi <ashcon@partovi.net> 2023-02-01 10:56:08 -0800
commit9c27b5d17f3e2c54482be7df05577ca36dd824b3 (patch)
tree7314889755c0760b3525bb4ef2ba030ca367d840
parent9973df028b9c272ea88804705282c4c31a4295e8 (diff)
downloadbun-9c27b5d17f3e2c54482be7df05577ca36dd824b3.tar.gz
bun-9c27b5d17f3e2c54482be7df05577ca36dd824b3.tar.zst
bun-9c27b5d17f3e2c54482be7df05577ca36dd824b3.zip
Fix getting SHA for canary
-rw-r--r--packages/bun-release/scripts/npm-exec.ts4
-rw-r--r--packages/bun-release/scripts/npm-postinstall.ts4
-rw-r--r--packages/bun-release/scripts/upload-assets.ts35
-rw-r--r--packages/bun-release/scripts/upload-npm.ts13
-rw-r--r--packages/bun-release/src/console.ts8
-rw-r--r--packages/bun-release/src/fetch.ts9
-rw-r--r--packages/bun-release/src/fs.ts11
-rw-r--r--packages/bun-release/src/github.ts45
-rw-r--r--packages/bun-release/src/npm/install.ts23
-rw-r--r--packages/bun-release/src/platform.ts19
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);