From 0cc279936fc5a737fc0f731aa09c1a2ce3f2de6a Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Mon, 19 May 2025 10:16:24 +0700 Subject: [PATCH 1/9] feat: move test/bun to bun --- .gitignore | 3 +- {test/bun => bun}/biome.jsonc | 0 {test/bun => bun}/bun.lock | 5 ++ bun/package.json | 42 +++++++++++++++++ {test/bun => bun}/src/aggregate.ts | 0 .../src/aggregateWithRandomness.ts | 0 {test/bun => bun}/src/binding.ts | 22 +++++---- {test/bun => bun}/src/const.ts | 0 {test/bun => bun}/src/index.ts | 0 {test/bun => bun}/src/publicKey.ts | 0 {test/bun => bun}/src/secretKey.ts | 0 {test/bun => bun}/src/signature.ts | 0 {test/bun => bun}/src/util.ts | 0 {test/bun => bun}/src/verify.ts | 0 .../src/verifyMultipleAggregateSignatures.ts | 0 {test/bun => bun}/test/__fixtures__/index.ts | 0 .../test/unit/aggregatePublicKeys.test.ts | 0 .../test/unit/aggregateWithRandomness.test.ts | 0 {test/bun => bun}/test/unit/publicKey.test.ts | 0 {test/bun => bun}/test/unit/secretKey.test.ts | 0 {test/bun => bun}/test/unit/signature.test.ts | 0 {test/bun => bun}/test/unit/verify.test.ts | 0 .../verifyMultipleAggregateSignatures.test.ts | 0 {test/bun => bun}/test/utils/helpers.ts | 0 {test/bun => bun}/test/utils/index.ts | 0 {test/bun => bun}/test/utils/testSets.ts | 0 {test/bun => bun}/test/utils/types.ts | 0 {test/bun => bun}/tsconfig.json | 0 test/bun/package.json | 22 --------- test/bun/scripts/install.ts | 24 ---------- test/bun/utils/index.ts | 46 ------------------- 31 files changed, 62 insertions(+), 102 deletions(-) rename {test/bun => bun}/biome.jsonc (100%) rename {test/bun => bun}/bun.lock (99%) create mode 100644 bun/package.json rename {test/bun => bun}/src/aggregate.ts (100%) rename {test/bun => bun}/src/aggregateWithRandomness.ts (100%) rename {test/bun => bun}/src/binding.ts (89%) rename {test/bun => bun}/src/const.ts (100%) rename {test/bun => bun}/src/index.ts (100%) rename {test/bun => bun}/src/publicKey.ts (100%) rename {test/bun => bun}/src/secretKey.ts (100%) rename {test/bun => bun}/src/signature.ts (100%) rename {test/bun => bun}/src/util.ts (100%) rename {test/bun => bun}/src/verify.ts (100%) rename {test/bun => bun}/src/verifyMultipleAggregateSignatures.ts (100%) rename {test/bun => bun}/test/__fixtures__/index.ts (100%) rename {test/bun => bun}/test/unit/aggregatePublicKeys.test.ts (100%) rename {test/bun => bun}/test/unit/aggregateWithRandomness.test.ts (100%) rename {test/bun => bun}/test/unit/publicKey.test.ts (100%) rename {test/bun => bun}/test/unit/secretKey.test.ts (100%) rename {test/bun => bun}/test/unit/signature.test.ts (100%) rename {test/bun => bun}/test/unit/verify.test.ts (100%) rename {test/bun => bun}/test/unit/verifyMultipleAggregateSignatures.test.ts (100%) rename {test/bun => bun}/test/utils/helpers.ts (100%) rename {test/bun => bun}/test/utils/index.ts (100%) rename {test/bun => bun}/test/utils/testSets.ts (100%) rename {test/bun => bun}/test/utils/types.ts (100%) rename {test/bun => bun}/tsconfig.json (100%) delete mode 100644 test/bun/package.json delete mode 100644 test/bun/scripts/install.ts delete mode 100644 test/bun/utils/index.ts diff --git a/.gitignore b/.gitignore index 9def580..577b41b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ zig-out/ .zig-cache/ -test/bun/node_modules/ \ No newline at end of file +bun/node_modules/ +bun/benchmark_data/ \ No newline at end of file diff --git a/test/bun/biome.jsonc b/bun/biome.jsonc similarity index 100% rename from test/bun/biome.jsonc rename to bun/biome.jsonc diff --git a/test/bun/bun.lock b/bun/bun.lock similarity index 99% rename from test/bun/bun.lock rename to bun/bun.lock index 51bada7..e4628c5 100644 --- a/test/bun/bun.lock +++ b/bun/bun.lock @@ -3,6 +3,9 @@ "workspaces": { "": { "name": "blst-bun", + "dependencies": { + "@chainsafe/bun-ffi-z": "https://github.com/ChainSafe/bun-ffi-z.git", + }, "devDependencies": { "@biomejs/biome": "^1.9.3", "@chainsafe/benchmark": "^1.2.3", @@ -77,6 +80,8 @@ "@chainsafe/benchmark": ["@chainsafe/benchmark@1.2.3", "", { "dependencies": { "@actions/cache": "^4.0.0", "@actions/github": "^6.0.0", "@vitest/runner": "^2.1.8", "ajv": "^8.17.1", "aws-sdk": "^2.932.0", "cli-table3": "^0.6.5", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", "debug": "^4.4.0", "glob": "^10.4.5", "log-symbols": "^7.0.0", "yaml": "^2.7.0", "yargs": "^17.7.2" }, "bin": { "benchmark": "bin/index.js" } }, "sha512-5rQKK2ar1k8DwqEMU5hTQlTrtrPzNdlfrMtbRgtrfYT/QpSADXGq1vBlywofY1D8HuEuv1LhRrn3p2rgibIXew=="], + "@chainsafe/bun-ffi-z": ["@chainsafe/bun-ffi-z@github:ChainSafe/bun-ffi-z#81b828f", { "peerDependencies": { "typescript": "^5" }, "bin": { "bun-ffi-z": "src/cli.ts" } }, "ChainSafe-bun-ffi-z-81b828f"], + "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], diff --git a/bun/package.json b/bun/package.json new file mode 100644 index 0000000..c03d6b7 --- /dev/null +++ b/bun/package.json @@ -0,0 +1,42 @@ +{ + "name": "blst-bun", + "module": "src/index.ts", + "type": "module", + "dependencies": { + "@chainsafe/bun-ffi-z": "https://github.com/ChainSafe/bun-ffi-z.git" + }, + "devDependencies": { + "@types/bun": "latest", + "@types/js-yaml": "^4.0.9", + "@biomejs/biome": "^1.9.3", + "@chainsafe/benchmark": "^1.2.3", + "tar": "^7.4.0", + "js-yaml": "^4.1.0" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "scripts": { + "build": "bun ./node_modules/.bin/bun-ffi-z build", + "prepublishOnly": "bun ./node_modules/.bin/bun-ffi-z prepublish --artifacts artifacts", + "publish": "bun ./node_modules/.bin/bun-ffi-z publish", + "test:unit": "bun test test/unit", + "lint": "biome check", + "lint:fix": "yarn lint --write", + "benchmark": "bun benchmark:files 'test/perf/*.test.ts'", + "benchmark:files": "bun ./node_modules/.bin/benchmark --config .benchrc.yaml --defaultBranch main" + }, + "bun-ffi-z": { + "name": "blst_min_pk", + "targets": [ + "linux-x64-gnu", + "linux-arm64-gnu", + "linux-x64-musl", + "linux-arm64-musl", + "darwin-x64", + "darwin-arm64" + ], + "optimize": "ReleaseSafe", + "zigCwd": ".." + } +} diff --git a/test/bun/src/aggregate.ts b/bun/src/aggregate.ts similarity index 100% rename from test/bun/src/aggregate.ts rename to bun/src/aggregate.ts diff --git a/test/bun/src/aggregateWithRandomness.ts b/bun/src/aggregateWithRandomness.ts similarity index 100% rename from test/bun/src/aggregateWithRandomness.ts rename to bun/src/aggregateWithRandomness.ts diff --git a/test/bun/src/binding.ts b/bun/src/binding.ts similarity index 89% rename from test/bun/src/binding.ts rename to bun/src/binding.ts index d4ed5e1..fc716f1 100644 --- a/test/bun/src/binding.ts +++ b/bun/src/binding.ts @@ -1,11 +1,9 @@ -import {dlopen, ptr} from "bun:ffi"; -import {getBinaryName, getPrebuiltBinaryPath} from "../utils/index.js"; - -const binaryName = getBinaryName(); -const binaryPath = getPrebuiltBinaryPath(binaryName); +import {ptr} from "bun:ffi"; +import path from "node:path"; +import {openLibrary} from "@chainsafe/bun-ffi-z"; // Load the compiled Zig shared library -const lib = dlopen(binaryPath, { +const fns = { // PublicKey functions validatePublicKey: { args: ["ptr"], @@ -145,8 +143,13 @@ const lib = dlopen(binaryPath, { args: [], returns: "void", }, -}); +}; +// Load the compiled Zig shared library +// the first param is bun's cwd +// - on dev env it's the cwd which is `./bun` +// - on prod env it does not matter because bun-ffi-z will load platfrom-specific package like @chainsafe/state-transition-bun-linux-x64-gnu/libstate-transition-utils.so instead +const lib = await openLibrary(path.join(import.meta.dirname, ".."), fns); export const binding = lib.symbols; /** @@ -157,8 +160,9 @@ if (res !== 0) { throw new Error("Failed to initialize Zig binding"); } -// console.log("@@@@ Zig binding initialized"); - +/** + * Call this api to close the binding. + */ export function closeBinding(): void { binding.deinit(); lib.close(); diff --git a/test/bun/src/const.ts b/bun/src/const.ts similarity index 100% rename from test/bun/src/const.ts rename to bun/src/const.ts diff --git a/test/bun/src/index.ts b/bun/src/index.ts similarity index 100% rename from test/bun/src/index.ts rename to bun/src/index.ts diff --git a/test/bun/src/publicKey.ts b/bun/src/publicKey.ts similarity index 100% rename from test/bun/src/publicKey.ts rename to bun/src/publicKey.ts diff --git a/test/bun/src/secretKey.ts b/bun/src/secretKey.ts similarity index 100% rename from test/bun/src/secretKey.ts rename to bun/src/secretKey.ts diff --git a/test/bun/src/signature.ts b/bun/src/signature.ts similarity index 100% rename from test/bun/src/signature.ts rename to bun/src/signature.ts diff --git a/test/bun/src/util.ts b/bun/src/util.ts similarity index 100% rename from test/bun/src/util.ts rename to bun/src/util.ts diff --git a/test/bun/src/verify.ts b/bun/src/verify.ts similarity index 100% rename from test/bun/src/verify.ts rename to bun/src/verify.ts diff --git a/test/bun/src/verifyMultipleAggregateSignatures.ts b/bun/src/verifyMultipleAggregateSignatures.ts similarity index 100% rename from test/bun/src/verifyMultipleAggregateSignatures.ts rename to bun/src/verifyMultipleAggregateSignatures.ts diff --git a/test/bun/test/__fixtures__/index.ts b/bun/test/__fixtures__/index.ts similarity index 100% rename from test/bun/test/__fixtures__/index.ts rename to bun/test/__fixtures__/index.ts diff --git a/test/bun/test/unit/aggregatePublicKeys.test.ts b/bun/test/unit/aggregatePublicKeys.test.ts similarity index 100% rename from test/bun/test/unit/aggregatePublicKeys.test.ts rename to bun/test/unit/aggregatePublicKeys.test.ts diff --git a/test/bun/test/unit/aggregateWithRandomness.test.ts b/bun/test/unit/aggregateWithRandomness.test.ts similarity index 100% rename from test/bun/test/unit/aggregateWithRandomness.test.ts rename to bun/test/unit/aggregateWithRandomness.test.ts diff --git a/test/bun/test/unit/publicKey.test.ts b/bun/test/unit/publicKey.test.ts similarity index 100% rename from test/bun/test/unit/publicKey.test.ts rename to bun/test/unit/publicKey.test.ts diff --git a/test/bun/test/unit/secretKey.test.ts b/bun/test/unit/secretKey.test.ts similarity index 100% rename from test/bun/test/unit/secretKey.test.ts rename to bun/test/unit/secretKey.test.ts diff --git a/test/bun/test/unit/signature.test.ts b/bun/test/unit/signature.test.ts similarity index 100% rename from test/bun/test/unit/signature.test.ts rename to bun/test/unit/signature.test.ts diff --git a/test/bun/test/unit/verify.test.ts b/bun/test/unit/verify.test.ts similarity index 100% rename from test/bun/test/unit/verify.test.ts rename to bun/test/unit/verify.test.ts diff --git a/test/bun/test/unit/verifyMultipleAggregateSignatures.test.ts b/bun/test/unit/verifyMultipleAggregateSignatures.test.ts similarity index 100% rename from test/bun/test/unit/verifyMultipleAggregateSignatures.test.ts rename to bun/test/unit/verifyMultipleAggregateSignatures.test.ts diff --git a/test/bun/test/utils/helpers.ts b/bun/test/utils/helpers.ts similarity index 100% rename from test/bun/test/utils/helpers.ts rename to bun/test/utils/helpers.ts diff --git a/test/bun/test/utils/index.ts b/bun/test/utils/index.ts similarity index 100% rename from test/bun/test/utils/index.ts rename to bun/test/utils/index.ts diff --git a/test/bun/test/utils/testSets.ts b/bun/test/utils/testSets.ts similarity index 100% rename from test/bun/test/utils/testSets.ts rename to bun/test/utils/testSets.ts diff --git a/test/bun/test/utils/types.ts b/bun/test/utils/types.ts similarity index 100% rename from test/bun/test/utils/types.ts rename to bun/test/utils/types.ts diff --git a/test/bun/tsconfig.json b/bun/tsconfig.json similarity index 100% rename from test/bun/tsconfig.json rename to bun/tsconfig.json diff --git a/test/bun/package.json b/test/bun/package.json deleted file mode 100644 index 79253b3..0000000 --- a/test/bun/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "blst-bun", - "module": "src/index.ts", - "type": "module", - "devDependencies": { - "@types/bun": "latest", - "@types/js-yaml": "^4.0.9", - "@biomejs/biome": "^1.9.3", - "@chainsafe/benchmark": "^1.2.3", - "tar": "^7.4.0", - "js-yaml": "^4.1.0" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "scripts": { - "test:unit": "bun test test/unit", - "lint": "biome check", - "lint:fix": "yarn lint --write", - "postinstall": "bun scripts/install.ts" - } -} diff --git a/test/bun/scripts/install.ts b/test/bun/scripts/install.ts deleted file mode 100644 index 916696f..0000000 --- a/test/bun/scripts/install.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {existsSync} from "node:fs"; -import {getBinaryName, getPrebuiltBinaryPath} from "../utils/index.js"; - -// CLI runner and entrance for this file when called by npm/yarn -install().then( - () => process.exit(0), - (e) => { - console.error(e); - process.exit(1); - } -); - -async function install(): Promise { - const binaryName = getBinaryName(); - const binaryPath: string | undefined = getPrebuiltBinaryPath(binaryName); - - // Check if bindings already bundled, downloaded or built - if (existsSync(binaryPath)) { - console.log(`Found prebuilt bindings at ${binaryPath}`); - return; - } - - throw Error(`No prebuilt bindings found for ${binaryPath}`); -} diff --git a/test/bun/utils/index.ts b/test/bun/utils/index.ts deleted file mode 100644 index 0289063..0000000 --- a/test/bun/utils/index.ts +++ /dev/null @@ -1,46 +0,0 @@ -import {resolve} from "node:path"; -export const BINDINGS_NAME = "libblst_min_pk"; - -export const ROOT_DIR = resolve(__dirname, "../../.."); -export const PREBUILD_DIR = resolve(ROOT_DIR, "zig-out/lib"); - -class NotBunError extends Error { - constructor(missingItem: string) { - super(`blst-bun bindings only run in a Bun context. No ${missingItem} found.`); - } -} - -/** - * Get shared library name according to blst-z release artifacts - * for example: https://github.com/ChainSafe/blst-z/releases/tag/v0.1.0-rc.0 - * name: libblst_min_pk_{arch}-{platform}.{ext} - */ -export function getBinaryName(): string { - if (!process) throw new NotBunError("global object"); - const platform = process.platform; - if (!platform) throw new NotBunError("process.platform"); - - // shared library extension - let ext: string; - switch (platform) { - case "darwin": - ext = "dylib"; - break; - case "linux": - ext = "so"; - break; - case "win32": - ext = "dll"; - break; - default: - throw new Error(`Unsupported platform: ${platform}`); - } - - // return `${BINDINGS_NAME}_${archName}-${platformName}.${ext}`; - // for dev - return `${BINDINGS_NAME}.${ext}`; -} - -export function getPrebuiltBinaryPath(binaryName: string): string { - return resolve(PREBUILD_DIR, binaryName); -} From ebbb49e0243fb38f6e5cd14c1e23062949f80ab9 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Mon, 19 May 2025 10:25:58 +0700 Subject: [PATCH 2/9] feat: add bun benchmark --- bun/.benchrc.yaml | 10 +++ bun/bun.lock | 120 ++++++++++++++++++++++++++++++ bun/package.json | 6 +- bun/test/perf/PublicKey.test.ts | 33 ++++++++ bun/test/perf/SecretKey.test.ts | 33 ++++++++ bun/test/perf/Signature.test.ts | 36 +++++++++ bun/test/perf/functions.test.ts | 128 ++++++++++++++++++++++++++++++++ 7 files changed, 365 insertions(+), 1 deletion(-) create mode 100644 bun/.benchrc.yaml create mode 100644 bun/test/perf/PublicKey.test.ts create mode 100644 bun/test/perf/SecretKey.test.ts create mode 100644 bun/test/perf/Signature.test.ts create mode 100644 bun/test/perf/functions.test.ts diff --git a/bun/.benchrc.yaml b/bun/.benchrc.yaml new file mode 100644 index 0000000..9472182 --- /dev/null +++ b/bun/.benchrc.yaml @@ -0,0 +1,10 @@ +# Mocha opts +extension: ["ts"] +colors: true +node-option: + - "loader=ts-node/register" + +# benchmark opts +threshold: 3 +maxMs: 60_000 +minRuns: 10 diff --git a/bun/bun.lock b/bun/bun.lock index e4628c5..628cfe0 100644 --- a/bun/bun.lock +++ b/bun/bun.lock @@ -8,7 +8,11 @@ }, "devDependencies": { "@biomejs/biome": "^1.9.3", + "@chainsafe/as-sha256": "^0.5.0", "@chainsafe/benchmark": "^1.2.3", + "@lodestar/params": "^1.27.0", + "@lodestar/state-transition": "^1.27.0", + "@lodestar/utils": "^1.27.0", "@types/bun": "latest", "@types/js-yaml": "^4.0.9", "js-yaml": "^4.1.0", @@ -78,10 +82,78 @@ "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@1.9.4", "", { "os": "win32", "cpu": "x64" }, "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA=="], + "@chainsafe/as-sha256": ["@chainsafe/as-sha256@0.5.0", "", {}, "sha512-dTIY6oUZNdC5yDTVP5Qc9hAlKAsn0QTQ2DnQvvsbTnKSTbYs3p5RPN0aIUqN0liXei/9h24c7V0dkV44cnWIQA=="], + "@chainsafe/benchmark": ["@chainsafe/benchmark@1.2.3", "", { "dependencies": { "@actions/cache": "^4.0.0", "@actions/github": "^6.0.0", "@vitest/runner": "^2.1.8", "ajv": "^8.17.1", "aws-sdk": "^2.932.0", "cli-table3": "^0.6.5", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", "debug": "^4.4.0", "glob": "^10.4.5", "log-symbols": "^7.0.0", "yaml": "^2.7.0", "yargs": "^17.7.2" }, "bin": { "benchmark": "bin/index.js" } }, "sha512-5rQKK2ar1k8DwqEMU5hTQlTrtrPzNdlfrMtbRgtrfYT/QpSADXGq1vBlywofY1D8HuEuv1LhRrn3p2rgibIXew=="], + "@chainsafe/blst": ["@chainsafe/blst@2.2.0", "", { "optionalDependencies": { "@chainsafe/blst-darwin-arm64": "2.2.0", "@chainsafe/blst-darwin-x64": "2.2.0", "@chainsafe/blst-linux-arm64-gnu": "2.2.0", "@chainsafe/blst-linux-arm64-musl": "2.2.0", "@chainsafe/blst-linux-x64-gnu": "2.2.0", "@chainsafe/blst-linux-x64-musl": "2.2.0", "@chainsafe/blst-win32-x64-msvc": "2.2.0" } }, "sha512-VBaQoNE2a9d9+skAjQKv3Suk0yGKqp3mZM0YWYJNPj/Ae/f6lAyeVSgKqo2LrsNQBzD/LqrJLKUY8rJT3vDKLA=="], + + "@chainsafe/blst-darwin-arm64": ["@chainsafe/blst-darwin-arm64@2.2.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BOOy2KHbV028cioPWaAMqHdLRKd6/3XyEmUEcQC2E/SpyYLdNcaKiBUYIU4pT9CrWBbJJxX68UI+3vZVg0M8/w=="], + + "@chainsafe/blst-darwin-x64": ["@chainsafe/blst-darwin-x64@2.2.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-jG64cwIdPT7u/haRrW26tWCpfMfHBQCfGY169mFQifCwO4VEwvaiVBPOh5olFis6LjpcmD+O0jpM8GqrnsmUHQ=="], + + "@chainsafe/blst-linux-arm64-gnu": ["@chainsafe/blst-linux-arm64-gnu@2.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-L8xV2uuLn8we76vdzfryS9ePdheuZrmY6yArGUFaF1Uzcwml6V1/VvyPl9/uooo/YfVRIrvF/D+lQfI2GFAnhw=="], + + "@chainsafe/blst-linux-arm64-musl": ["@chainsafe/blst-linux-arm64-musl@2.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0Vn0luxLYVgC3lvWT1MapFHSAoz99PldqjhilXTGv0AcAk/X5LXPH2RC9Dp2KJGqthyUkpbk1j47jUBfBI+BIg=="], + + "@chainsafe/blst-linux-x64-gnu": ["@chainsafe/blst-linux-x64-gnu@2.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-gEY/z2SDBA7kXtFEI9VNhWTJAIjx16jdeAyCaS2k4ACGurWZaWk+Ee4KniTsr4WieSqeuNTUr7Pdja0Sr4EKNQ=="], + + "@chainsafe/blst-linux-x64-musl": ["@chainsafe/blst-linux-x64-musl@2.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-58GKtiUmtVSuerRzPEcMNQZpICPboBKFnL7+1Wo+PSuajkvbae7tEFrFTtWeMoKIPgOEsPMnk96LF+0yNgavUg=="], + + "@chainsafe/blst-win32-x64-msvc": ["@chainsafe/blst-win32-x64-msvc@2.2.0", "", { "os": "win32", "cpu": "x64" }, "sha512-UFrZshl4dfX5Uh2zeKXAZtrkQ+otczHMON2tsrapQNICWmfHZrzE6pKuBL+9QeGAbgflwpbz7+D5nQRDpiuHxQ=="], + "@chainsafe/bun-ffi-z": ["@chainsafe/bun-ffi-z@github:ChainSafe/bun-ffi-z#81b828f", { "peerDependencies": { "typescript": "^5" }, "bin": { "bun-ffi-z": "src/cli.ts" } }, "ChainSafe-bun-ffi-z-81b828f"], + "@chainsafe/hashtree": ["@chainsafe/hashtree@1.0.1", "", { "optionalDependencies": { "@chainsafe/hashtree-darwin-arm64": "1.0.1", "@chainsafe/hashtree-linux-arm64-gnu": "1.0.1", "@chainsafe/hashtree-linux-x64-gnu": "1.0.1" } }, "sha512-bleu9FjqBeR/l6W1u2Lz+HsS0b0LLJX2eUt3hOPBN7VqOhidx8wzkVh2S7YurS+iTQtfdK4K5QU9tcTGNrGwDg=="], + + "@chainsafe/hashtree-darwin-arm64": ["@chainsafe/hashtree-darwin-arm64@1.0.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-+KmEgQMpO7FDL3klAcpXbQ4DPZvfCe0qSaBBrtT4vLF8V1JGm3sp+j7oibtxtOsLKz7nJMiK1pZExi7vjXu8og=="], + + "@chainsafe/hashtree-linux-arm64-gnu": ["@chainsafe/hashtree-linux-arm64-gnu@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-p1hnhGq2aFY+Zhdn1Q6L/6yLYNKjqXfn/Pc8jiM0e3+Lf/hB+yCdqYVu1pto26BrZjugCFZfupHaL4DjUTDttw=="], + + "@chainsafe/hashtree-linux-x64-gnu": ["@chainsafe/hashtree-linux-x64-gnu@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-uCIGuUWuWV0LiB4KLMy6JFa7Jp6NmPl3hKF5BYWu8TzUBe7vSXMZfqTzGxXPggFYN2/0KymfRdG9iDCOJfGRqg=="], + + "@chainsafe/persistent-merkle-tree": ["@chainsafe/persistent-merkle-tree@1.1.0", "", { "dependencies": { "@chainsafe/as-sha256": "1.1.0", "@chainsafe/hashtree": "1.0.1", "@noble/hashes": "^1.3.0" } }, "sha512-UIcKEGkEGghTXbFTvKqIiN2iljg2f6c2Y8GxdQEyle5UI6YIB8d3ACYTkAhrHSB4YsNlG9pc/A0NGJw/3Hf9wQ=="], + + "@chainsafe/persistent-ts": ["@chainsafe/persistent-ts@1.0.1", "", {}, "sha512-VkPaBD3GxS5vpLkZWfStDL39jG1IPLhy5c3d3FtgwyfGvEthnQJeyUMinGFRoAfAW0yVkf7ggrEzyvhXFLIU0A=="], + + "@chainsafe/pubkey-index-map": ["@chainsafe/pubkey-index-map@3.0.0", "", { "optionalDependencies": { "@chainsafe/pubkey-index-map-darwin-arm64": "3.0.0", "@chainsafe/pubkey-index-map-darwin-x64": "3.0.0", "@chainsafe/pubkey-index-map-linux-arm64-gnu": "3.0.0", "@chainsafe/pubkey-index-map-linux-arm64-musl": "3.0.0", "@chainsafe/pubkey-index-map-linux-x64-gnu": "3.0.0", "@chainsafe/pubkey-index-map-linux-x64-musl": "3.0.0", "@chainsafe/pubkey-index-map-win32-arm64-msvc": "3.0.0", "@chainsafe/pubkey-index-map-win32-x64-msvc": "3.0.0" } }, "sha512-KvWmKOG8WiVePHQDGyz+xo+RpsrmPEeipF8boqmXNYCLOGyVpkEXQk0IDVpnxngZziY6d97F9sml2vliDoyYyQ=="], + + "@chainsafe/pubkey-index-map-darwin-arm64": ["@chainsafe/pubkey-index-map-darwin-arm64@3.0.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gM/wwA6bpfeZm80aSoH2c3ddbPeZho73TUUprUFlHQNLldGzZ293yFQgj2Ontp1fMf9AI0w+F0uEN2qC6v7g9A=="], + + "@chainsafe/pubkey-index-map-darwin-x64": ["@chainsafe/pubkey-index-map-darwin-x64@3.0.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-zy4dH//kLXfQHHFVp1Pcz4HQgSh/uUKWt219hlrb5Fi+xVESVmTnLPjHmL1KtGs/R5W0XcuBrTuBHiq+zMU7lQ=="], + + "@chainsafe/pubkey-index-map-linux-arm64-gnu": ["@chainsafe/pubkey-index-map-linux-arm64-gnu@3.0.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-M/HODHZcKDuoRFlx+Ka4NgyFSQvOECyIg/2pCQcgfCozR7rRx7VuOJ0ZSgU+BEhuY+fpaRSTesOlDIIY0ornWQ=="], + + "@chainsafe/pubkey-index-map-linux-arm64-musl": ["@chainsafe/pubkey-index-map-linux-arm64-musl@3.0.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Sdm15mFsKiz5ndFfhcTjEl4i8TK0+gM1SEmYzmGUgnflrcvPc+US3qsMKyCqorDkHqYAYFFutQXz9QxjOMkIwg=="], + + "@chainsafe/pubkey-index-map-linux-x64-gnu": ["@chainsafe/pubkey-index-map-linux-x64-gnu@3.0.0", "", { "os": "linux", "cpu": "x64" }, "sha512-+4h995h2xEBmYdr9Tw05uYvFmMSELyaJagJ2KsFohkRjqiUyB76l8zR8aUKx7lwLXXHxWjHMYyWKHF3tTKRFNQ=="], + + "@chainsafe/pubkey-index-map-linux-x64-musl": ["@chainsafe/pubkey-index-map-linux-x64-musl@3.0.0", "", { "os": "linux", "cpu": "x64" }, "sha512-qwFuygeutP4o9J/8ylD+ZrqkqeyytMl9E38ucIWpbiPYXDiJxpRN148v4Ah+NWwz6PqCROVyTxEyZklzy0AxUA=="], + + "@chainsafe/pubkey-index-map-win32-arm64-msvc": ["@chainsafe/pubkey-index-map-win32-arm64-msvc@3.0.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-2t01rQAdiM5KPM7XLsZDtMhWAXz/YKY20H1N4jvaWURjaLm+S0j9X/Mt0xOjJ5SC++1g64LXjV+wnXO5j1S8Nw=="], + + "@chainsafe/pubkey-index-map-win32-x64-msvc": ["@chainsafe/pubkey-index-map-win32-x64-msvc@3.0.0", "", { "os": "win32", "cpu": "x64" }, "sha512-QemArQbgsLJ4eaM9S0Kdr3ucJUpZXTDfh3wTNp9eh7G3o1Y9O2Hp7G7BlEkF0cWU9ZsWe9YSzmeX24Uo5DNo4g=="], + + "@chainsafe/ssz": ["@chainsafe/ssz@1.2.0", "", { "dependencies": { "@chainsafe/as-sha256": "1.1.0", "@chainsafe/persistent-merkle-tree": "1.1.0" } }, "sha512-fsFFBfT5JPCypyzENDg6srd6woNMj0+x6OLR5X1di+IK5mYlxBiAVsH/bYVj/u5DE3nanAgPZOc5KSszoDBRvw=="], + + "@chainsafe/swap-or-not-shuffle": ["@chainsafe/swap-or-not-shuffle@1.2.1", "", { "optionalDependencies": { "@chainsafe/swap-or-not-shuffle-darwin-arm64": "1.2.1", "@chainsafe/swap-or-not-shuffle-darwin-x64": "1.2.1", "@chainsafe/swap-or-not-shuffle-linux-arm64-gnu": "1.2.1", "@chainsafe/swap-or-not-shuffle-linux-arm64-musl": "1.2.1", "@chainsafe/swap-or-not-shuffle-linux-x64-gnu": "1.2.1", "@chainsafe/swap-or-not-shuffle-linux-x64-musl": "1.2.1", "@chainsafe/swap-or-not-shuffle-win32-arm64-msvc": "1.2.1", "@chainsafe/swap-or-not-shuffle-win32-x64-msvc": "1.2.1" } }, "sha512-H8YdEoXXv2Hw17gDWGOJEya4LHlBbpChJP3jDQRfIk9hhwr0c/zbBemBRmjADowZhArL+ymkO+j5hGaYySjdpw=="], + + "@chainsafe/swap-or-not-shuffle-darwin-arm64": ["@chainsafe/swap-or-not-shuffle-darwin-arm64@1.2.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kTewLZe1KqMAJ1gHfagOxo0BI4kTcMOAkGJ7pRLFM5ZkL2P7sh3/4ixnjdbtMkO207vMZEZL3fxJSSs14kg9Kg=="], + + "@chainsafe/swap-or-not-shuffle-darwin-x64": ["@chainsafe/swap-or-not-shuffle-darwin-x64@1.2.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-B/f/peQqOLW5Tqib5CqanAlQgoeib75FNszzHwRBwHdRY5ThOcBbARvOtef39zU5lYjj4j3iWobpD7G70kQyUw=="], + + "@chainsafe/swap-or-not-shuffle-linux-arm64-gnu": ["@chainsafe/swap-or-not-shuffle-linux-arm64-gnu@1.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-sDpuUuo3rStvHMQgLxH1UkkUbo8rcjDI70Fq3xzbNMhfjlrP0+sJistlFJtDpWmKsFk/sgje3PzVU9G3KFXzXA=="], + + "@chainsafe/swap-or-not-shuffle-linux-arm64-musl": ["@chainsafe/swap-or-not-shuffle-linux-arm64-musl@1.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-FFmpDF2dRhhOCT3WBYOoQW9wqhJMfx7iULskBe5cjowVQ15U1TQJ6tC+hPpouUMt3/pKz9tIS9dNWTUuo7kpQg=="], + + "@chainsafe/swap-or-not-shuffle-linux-x64-gnu": ["@chainsafe/swap-or-not-shuffle-linux-x64-gnu@1.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-nGXEnFCqRmCS7ATV7QQ7b7aKHcyET9XEpJylq0sljnkuNRwoQXFUYPMYTn4TMI6g3vgZt/AVK9RdCxp68JKwGQ=="], + + "@chainsafe/swap-or-not-shuffle-linux-x64-musl": ["@chainsafe/swap-or-not-shuffle-linux-x64-musl@1.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-VMQxE/EZjco4damGrJkkCQ2Y2WYgJcTR/ardTnSctM1/xxwUD1wQr7YW2TQsECfK3UZcW2W6gG7iqWfJgMdGSw=="], + + "@chainsafe/swap-or-not-shuffle-win32-arm64-msvc": ["@chainsafe/swap-or-not-shuffle-win32-arm64-msvc@1.2.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-qV+ps6KSoR8blc3gMse1BOBUGcCtptnMYoqTMwFCIx9LGaeSo3vKu5XBQDwHIfAW73bZ+PHb5YUqkRgtWBiEUw=="], + + "@chainsafe/swap-or-not-shuffle-win32-x64-msvc": ["@chainsafe/swap-or-not-shuffle-win32-x64-msvc@1.2.1", "", { "os": "win32", "cpu": "x64" }, "sha512-hsDN4O6PPpF4rEA1tMngMJAOrWTGAu8TAqdEwgdP+U25o8UVlz8W2N9697AMGRnnArN2BgYS0zCeUR9kuZ2XEQ=="], + "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], @@ -90,6 +162,20 @@ "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + "@lodestar/config": ["@lodestar/config@1.30.0", "", { "dependencies": { "@chainsafe/ssz": "^1.2.0", "@lodestar/params": "^1.30.0", "@lodestar/types": "^1.30.0", "@lodestar/utils": "^1.30.0" } }, "sha512-Sdt54Y9VpxylFXB3fomXFFORKhiw9CZhab253qzZKkXyNmSTt/8moKGzltviFch73tlDyAoRUTl9kTiuhkK61Q=="], + + "@lodestar/params": ["@lodestar/params@1.30.0", "", {}, "sha512-mdql9B0NRDVCS+EiW3sdLhhJfdF/ncdGUgWTrvH7CG8OxHXD5Qx0hhDh0zb1vDKFsw5JGg5zt6xwMHMBDFoAfQ=="], + + "@lodestar/state-transition": ["@lodestar/state-transition@1.30.0", "", { "dependencies": { "@chainsafe/as-sha256": "^1.1.0", "@chainsafe/blst": "^2.2.0", "@chainsafe/persistent-merkle-tree": "^1.1.0", "@chainsafe/persistent-ts": "^1.0.0", "@chainsafe/pubkey-index-map": "^3.0.0", "@chainsafe/ssz": "^1.2.0", "@chainsafe/swap-or-not-shuffle": "^1.2.1", "@lodestar/config": "^1.30.0", "@lodestar/params": "^1.30.0", "@lodestar/types": "^1.30.0", "@lodestar/utils": "^1.30.0", "bigint-buffer": "^1.1.5" } }, "sha512-l3b5jOydIZ0yJGnXSZAN+mxwRKnKs7zq8hQ5CXrjXyrwhpXZ5tpRpHUz9MgR78KO8bBwroUvmP9/j8PKU3h0Dw=="], + + "@lodestar/types": ["@lodestar/types@1.30.0", "", { "dependencies": { "@chainsafe/ssz": "^1.2.0", "@lodestar/params": "^1.30.0", "ethereum-cryptography": "^2.0.0" } }, "sha512-I09HC4+4K3o0ezW4cn11mx9YPajfKhDmw45yKREZ6plGf3stJe7qNaX23umrHMoCIonNCpxBfqA+Ey1FqMhwKQ=="], + + "@lodestar/utils": ["@lodestar/utils@1.30.0", "", { "dependencies": { "@chainsafe/as-sha256": "^1.1.0", "any-signal": "^4.1.1", "bigint-buffer": "^1.1.5", "case": "^1.6.3", "js-yaml": "^4.1.0" } }, "sha512-p87FMEaLvUEQo6uYEjO8DvxHr8fFSvuNcnVkaS9dOu3lnzDf0gwotqrCcPhi+K6LNR4uo14w65Bu4sS+fJF1Ng=="], + + "@noble/curves": ["@noble/curves@1.4.2", "", { "dependencies": { "@noble/hashes": "1.4.0" } }, "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw=="], + + "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "@octokit/auth-token": ["@octokit/auth-token@4.0.0", "", {}, "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA=="], "@octokit/core": ["@octokit/core@5.2.1", "", { "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" } }, "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ=="], @@ -122,6 +208,12 @@ "@protobuf-ts/runtime-rpc": ["@protobuf-ts/runtime-rpc@2.9.6", "", { "dependencies": { "@protobuf-ts/runtime": "^2.9.6" } }, "sha512-0UeqDRzNxgsh08lY5eWzFJNfD3gZ8Xf+WG1HzbIAbVAigzigwjwsYNNhTeas5H3gco1U5owTzCg177aambKOOw=="], + "@scure/base": ["@scure/base@1.1.9", "", {}, "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="], + + "@scure/bip32": ["@scure/bip32@1.4.0", "", { "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" } }, "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg=="], + + "@scure/bip39": ["@scure/bip39@1.3.0", "", { "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" } }, "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ=="], + "@types/bun": ["@types/bun@1.2.8", "", { "dependencies": { "bun-types": "1.2.7" } }, "sha512-t8L1RvJVUghW5V+M/fL3Thbxcs0HwNsXsnTEBEfEVqGteiJToOlZ/fyOEaR1kZsNqnu+3XA4RI/qmnX4w6+S+w=="], "@types/js-yaml": ["@types/js-yaml@4.0.9", "", {}, "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="], @@ -146,6 +238,8 @@ "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "any-signal": ["any-signal@4.1.1", "", {}, "sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA=="], + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], @@ -160,6 +254,10 @@ "before-after-hook": ["before-after-hook@2.2.3", "", {}, "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="], + "bigint-buffer": ["bigint-buffer@1.1.5", "", { "dependencies": { "bindings": "^1.3.0" } }, "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA=="], + + "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], + "brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "buffer": ["buffer@4.9.2", "", { "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="], @@ -172,6 +270,8 @@ "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + "case": ["case@1.6.3", "", {}, "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ=="], + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], "cli-table3": ["cli-table3@0.6.5", "", { "dependencies": { "string-width": "^4.2.0" }, "optionalDependencies": { "@colors/colors": "1.5.0" } }, "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ=="], @@ -216,6 +316,8 @@ "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + "ethereum-cryptography": ["ethereum-cryptography@2.2.1", "", { "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", "@scure/bip32": "1.4.0", "@scure/bip39": "1.3.0" } }, "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg=="], + "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], "events": ["events@1.1.1", "", {}, "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw=="], @@ -226,6 +328,8 @@ "fast-xml-parser": ["fast-xml-parser@5.2.0", "", { "dependencies": { "strnum": "^2.0.5" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-Uw9+Mjt4SBRud1IcaYuW/O0lW8SKKdMl5g7g24HiIuyH5fQSD+AVLybSlJtqLYEbytVFjWQa5DMGcNgeksdRBg=="], + "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], @@ -434,16 +538,32 @@ "@azure/storage-blob/events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + "@chainsafe/persistent-merkle-tree/@chainsafe/as-sha256": ["@chainsafe/as-sha256@1.1.0", "", {}, "sha512-pLlxYtfYy2YW5GN+7d946UAjBOS9VOFulkfFN6Z+84ZhMP0Ey8XsCG21CZTczwq1C8J7/4z8LGzmrAtmQ37VCQ=="], + + "@chainsafe/ssz/@chainsafe/as-sha256": ["@chainsafe/as-sha256@1.1.0", "", {}, "sha512-pLlxYtfYy2YW5GN+7d946UAjBOS9VOFulkfFN6Z+84ZhMP0Ey8XsCG21CZTczwq1C8J7/4z8LGzmrAtmQ37VCQ=="], + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + "@lodestar/state-transition/@chainsafe/as-sha256": ["@chainsafe/as-sha256@1.1.0", "", {}, "sha512-pLlxYtfYy2YW5GN+7d946UAjBOS9VOFulkfFN6Z+84ZhMP0Ey8XsCG21CZTczwq1C8J7/4z8LGzmrAtmQ37VCQ=="], + + "@lodestar/utils/@chainsafe/as-sha256": ["@chainsafe/as-sha256@1.1.0", "", {}, "sha512-pLlxYtfYy2YW5GN+7d946UAjBOS9VOFulkfFN6Z+84ZhMP0Ey8XsCG21CZTczwq1C8J7/4z8LGzmrAtmQ37VCQ=="], + + "@noble/curves/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], + "@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="], "@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="], + "@scure/bip32/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], + + "@scure/bip39/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], + + "ethereum-cryptography/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], + "@actions/glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], diff --git a/bun/package.json b/bun/package.json index c03d6b7..d612ad8 100644 --- a/bun/package.json +++ b/bun/package.json @@ -9,7 +9,11 @@ "@types/bun": "latest", "@types/js-yaml": "^4.0.9", "@biomejs/biome": "^1.9.3", - "@chainsafe/benchmark": "^1.2.3", + "@chainsafe/benchmark": "^1.2.3", + "@chainsafe/as-sha256": "^0.5.0", + "@lodestar/params": "^1.27.0", + "@lodestar/state-transition": "^1.27.0", + "@lodestar/utils": "^1.27.0", "tar": "^7.4.0", "js-yaml": "^4.1.0" }, diff --git a/bun/test/perf/PublicKey.test.ts b/bun/test/perf/PublicKey.test.ts new file mode 100644 index 0000000..7175f65 --- /dev/null +++ b/bun/test/perf/PublicKey.test.ts @@ -0,0 +1,33 @@ +import {describe} from "@chainsafe/benchmark"; +import {bench} from "@chainsafe/benchmark"; +import * as blst from "../../src/index.js"; +import {arrayOfIndexes} from "../utils/helpers.js"; +import {getSerializedTestSet, getTestSet} from "../utils/testSets.js"; + +const napiTestKey = getTestSet(0).pk; + +describe("PublicKey", () => { + bench("PublicKey serialization", () => { + napiTestKey.toBytes(); + }); + + bench({ + id: "PublicKey deserialize", + beforeEach: () => napiTestKey.toBytes(), + fn: (serialized) => { + blst.PublicKey.fromBytes(serialized, false); + }, + }); + + for (const count of [1, 100, 10_000]) { + bench({ + id: `PublicKey deserialize and validate - ${count} keys`, + beforeEach: () => arrayOfIndexes(0, count - 1).map((i) => getSerializedTestSet(i % 256).pk), + fn: (publicKeys) => { + for (const publicKey of publicKeys) { + blst.PublicKey.fromBytes(publicKey, true); + } + }, + }); + } +}); diff --git a/bun/test/perf/SecretKey.test.ts b/bun/test/perf/SecretKey.test.ts new file mode 100644 index 0000000..e09ad6b --- /dev/null +++ b/bun/test/perf/SecretKey.test.ts @@ -0,0 +1,33 @@ +import {describe} from "@chainsafe/benchmark"; +import {bench} from "@chainsafe/benchmark"; +import * as blst from "../../src/index.js"; +import {commonMessage, getTestSet} from "../utils/testSets.js"; + +const napiTestKey = getTestSet(0).sk; + +describe("SecretKey", () => { + const ikm = Buffer.alloc(32, 1); + bench("SecretKey.fromKeygen", () => { + blst.SecretKey.fromKeygen(ikm); + }); + + bench("SecretKey serialization", () => { + napiTestKey.toBytes(); + }); + + bench({ + id: "SecretKey deserialization", + beforeEach: () => napiTestKey.toBytes(), + fn: (serialized) => { + blst.SecretKey.fromBytes(serialized); + }, + }); + + bench("SecretKey.toPublicKey", () => { + napiTestKey.toPublicKey(); + }); + + bench("SecretKey.sign", () => { + napiTestKey.sign(commonMessage); + }); +}); diff --git a/bun/test/perf/Signature.test.ts b/bun/test/perf/Signature.test.ts new file mode 100644 index 0000000..4f8768d --- /dev/null +++ b/bun/test/perf/Signature.test.ts @@ -0,0 +1,36 @@ +import {describe} from "@chainsafe/benchmark"; +import {bench} from "@chainsafe/benchmark"; +import * as blst from "../../src/index.js"; +import {arrayOfIndexes} from "../utils/helpers.js"; +import {getSerializedTestSet, getTestSet} from "../utils/testSets.js"; + +const napiTestSignature = getTestSet(0).sig; + +describe("Signature", () => { + bench("Signature serialization", () => { + napiTestSignature.toBytes(); + }); + + bench({ + id: "Signature deserialize", + beforeEach: () => napiTestSignature.toBytes(), + fn: (serialized) => { + blst.Signature.fromBytes(serialized); + }, + }); + + for (const count of [1, 100, 10_000]) { + bench({ + id: `Signatures deserialize and validate - ${count} sets`, + before() { + return arrayOfIndexes(0, count - 1).map((i) => getSerializedTestSet(i % 256).sig); + }, + beforeEach: (sigs) => sigs, + fn: (signatures) => { + for (const signature of signatures) { + blst.Signature.fromBytes(signature, true); + } + }, + }); + } +}); diff --git a/bun/test/perf/functions.test.ts b/bun/test/perf/functions.test.ts new file mode 100644 index 0000000..20a593e --- /dev/null +++ b/bun/test/perf/functions.test.ts @@ -0,0 +1,128 @@ +import {describe} from "@chainsafe/benchmark"; +import {bench} from "@chainsafe/benchmark"; +import * as blst from "../../src/index.js"; +import {arrayOfIndexes} from "../utils/helpers.js"; +import {getTestSet, getTestSetSameMessage, getTestSetsSameMessage} from "../utils/testSets.js"; + +describe("functions", () => { + describe("aggregatePublicKeys", () => { + for (const count of [1, 8, 32, 128, 256]) { + bench({ + id: `aggregatePublicKeys - ${count} sets`, + beforeEach: () => arrayOfIndexes(0, count - 1).map((i) => getTestSet(i).pk), + fn: (publicKeys) => { + blst.aggregatePublicKeys(publicKeys); + }, + }); + } + }); + describe("aggregateSignatures", () => { + for (const count of [1, 8, 32, 128, 256]) { + bench({ + id: `aggregateSignatures - ${count} sets`, + beforeEach: () => arrayOfIndexes(0, count - 1).map((i) => getTestSet(i).sig), + fn: (signatures) => { + blst.aggregateSignatures(signatures); + }, + }); + } + }); + describe("aggregateWithRandomness", () => { + // for (const count of [1, 16, 128, 256, 512, 1024]) { + // TODO: blst-bun supports up to 128 sets while blst-ts supports unlimited sets + // as of Feb 2025, this is enough for lodestar + for (const count of [1, 16, 128]) { + bench({ + id: `aggregateWithRandomness - ${count} sets`, + before: () => { + const {sets} = getTestSetsSameMessage(count); + return sets.map((s) => ({ + pk: s.pk, + sig: s.sig.toBytes(), + })); + }, + beforeEach: (sets) => sets, + fn: (sets) => { + blst.aggregateWithRandomness(sets); + }, + }); + } + }); + describe("aggregateVerify", () => { + // for (const count of [1, 8, 32, 128, 256]) { + // TODO: blst-bun supports up to 128 sets while blst-ts supports unlimited sets + // however lodestar is not using this api + for (const count of [1, 8, 32, 128]) { + bench({ + id: `aggregateVerify - ${count} sets`, + beforeEach: () => { + const sets = arrayOfIndexes(0, count - 1) + .map((i) => getTestSet(i)) + .reduce( + (sets, set) => ({ + messages: [...sets.messages, set.msg], + publicKeys: [...sets.publicKeys, set.pk], + signatures: [...sets.signatures, set.sig], + }), + { + messages: [] as Uint8Array[], + publicKeys: [] as blst.PublicKey[], + signatures: [] as blst.Signature[], + } + ); + return { + messages: sets.messages, + publicKeys: sets.publicKeys, + signature: blst.aggregateSignatures(sets.signatures), + }; + }, + fn: ({messages, publicKeys, signature}) => { + blst.aggregateVerify(messages, publicKeys, signature); + }, + }); + } + }); + describe("verifyMultipleAggregateSignatures", () => { + // for (const count of [1, 8, 32, 128, 256]) { + // TODO: blst-bun supports up to 128 sets while blst-ts supports unlimited sets + // however this is enough for lodestar + for (const count of [1, 8, 32, 128]) { + bench({ + id: `verifyMultipleAggregateSignatures - ${count} sets`, + beforeEach: () => arrayOfIndexes(0, count - 1).map((i) => getTestSet(i)), + fn: (sets) => { + blst.verifyMultipleAggregateSignatures(sets); + }, + }); + } + }); + describe("verifyMultipleAggregateSignatures same message", () => { + for (const count of [1, 8, 32, 128, 256]) { + bench({ + id: `Same message - ${count} sets`, + beforeEach: () => + arrayOfIndexes(0, count - 1) + .map((i) => getTestSetSameMessage(i)) + .map((set) => { + return { + message: set.msg, + secretKey: set.sk, + publicKey: set.pk, + signature: set.sig.toBytes(), + }; + }), + fn: (sets) => { + const aggregatedPubkey = blst.aggregatePublicKeys(sets.map((set) => set.publicKey)); + const aggregatedSignature = blst.aggregateSignatures( + sets.map((set) => { + const sig = blst.Signature.fromBytes(set.signature, true, true); + return sig; + }) + ); + const isValid = blst.verify(sets[0].message, aggregatedPubkey, aggregatedSignature); + if (!isValid) throw Error("Invalid"); + }, + }); + } + }); +}); From 9d11e9cd51316facdaa4f7fb1568554f2ef3cd01 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Mon, 19 May 2025 10:34:25 +0700 Subject: [PATCH 3/9] feat: add initial unified CI --- .github/workflows/CI.yml | 110 +++++++++++++++++++++++++++++++++ .github/workflows/release.yml | 113 ---------------------------------- .github/workflows/test.yml | 84 ------------------------- 3 files changed, 110 insertions(+), 197 deletions(-) create mode 100644 .github/workflows/CI.yml delete mode 100644 .github/workflows/release.yml delete mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000..5eaf343 --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,110 @@ +name: Build and Test Zig and Bun + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + zig-build-test: + strategy: + matrix: + settings: + - os: ubuntu-latest + bun-target: linux-x64-gnu + - os: ubuntu-24.04-arm + bun-target: linux-arm64-gnu + - os: ubuntu-latest + bun-target: linux-x64-musl + - os: ubuntu-24.04-arm + bun-target: linux-arm64-musl + - os: macos-13 + bun-target: darwin-x64 + - os: macos-latest + bun-target: darwin-arm64 + # - os: windows-latest # TODO: https://github.com/ChainSafe/state-transition-z/issues/10 + # bun-target: win32-x64-msvc + + runs-on: ${{ matrix.settings.os }} + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + with: + submodules: recursive # Ensures submodules are cloned + fetch-depth: 0 # Fetches the entire history for all branches + + - name: Print OS ${{ matrix.settings.os }} + run: uname -a + - name: Print Architecture ${{ matrix.settings.arch }} + run: uname -m + + - name: Verify Submodules + run: | + git submodule update --init --recursive + ls -la blst + + - name: Install Zig + uses: mlugg/setup-zig@v1 + with: + version: "0.14.0" # Set the required Zig version + + - name: Build and Test without portable + run: | + zig build test + + - name: Build and Test with portable + run: | + zig build -Dportable=true test + + - name: Install Bun + uses: oven-sh/setup-bun@v2 + with: + version: 1.2.13 + - name: Bun - Install Dependencies + run: bun install + working-directory: ./bun + - name: Build binary using bun-ffi-z + run: bun ./node_modules/.bin/bun-ffi-z build --target ${{ matrix.settings.bun-target }} --optimize ReleaseSafe + working-directory: ./bun + - name: Upload Zig Artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.settings.bun-target }} + path: 'zig-out/lib/*blst_min_pk.*' + if-no-files-found: error + + bun-benchmark: + name: run benchmark on ubuntu-latest x86_64 + needs: zig-build-upload + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Download artifacts + uses: actions/download-artifact@v4 # no need zig installation, download artifacts from previous job instead + with: + name: linux-x64-gnu + path: zig-out/lib + - name: Install Bun + uses: oven-sh/setup-bun@v2 + with: + version: 1.2.13 + - name: Bun - Install Dependencies + run: bun install + working-directory: ./bun + - name: Bun - Lint Code + run: bun lint + working-directory: ./bun + - name: Bun - Unit Tests + run: bun test:unit + working-directory: ./bun + - name: Benchmark + run: bun benchmark + working-directory: ./bun + env: + # To write to PRs and commits + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index b2e4060..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,113 +0,0 @@ -name: Release - -on: - push: - tags: - - v* - -jobs: - build-and-test: - strategy: - matrix: - settings: - - os: ubuntu-latest - platform: x86_64-linux - - os: ubuntu-24.04-arm - platform: aarch64-linux - - os: macos-13 - platform: x86_64-macos - - os: macos-latest - platform: aarch64-macos - - runs-on: ${{ matrix.settings.os }} - steps: - - name: Checkout Repository - uses: actions/checkout@v3 - with: - submodules: recursive # Ensures submodules are cloned - fetch-depth: 0 # Fetches the entire history for all branches - - - name: Verify Submodules - run: | - git submodule update --init --recursive - ls -la blst - - - name: Install Zig - uses: mlugg/setup-zig@v1 - with: - version: "0.14.0" # Set the required Zig version - - - name: Test blst-z - run: | - zig build -Dportable=true test - - - name: Build blst-z on ${{ matrix.settings.platform }} - run: | - zig build -Dportable=true -Doptimize=ReleaseSafe - - - name: Upload static library artifact for ${{ matrix.settings.platform }} - uses: actions/upload-artifact@v4 - with: - name: libblst_${{ matrix.settings.platform }}.a - path: zig-out/lib/libblst.a - compression-level: 0 # No compression - - - name: Set shared library extension - id: set_extension - run: | - case "${{ matrix.settings.platform }}" in - x86_64-linux|aarch64-linux) echo "EXT=so" >> $GITHUB_ENV ;; - *) echo "EXT=dylib" >> $GITHUB_ENV ;; - esac - - - name: Upload shared library artifact for ${{ matrix.settings.platform }} - uses: actions/upload-artifact@v4 - with: - name: libblst_min_pk_${{ matrix.settings.platform }}.${{ env.EXT }} - path: zig-out/lib/libblst_min_pk.${{ env.EXT }} - compression-level: 0 # No compression - - create-release: - needs: build-and-test - runs-on: ubuntu-latest - permissions: - contents: write - - steps: - - name: Download all artifacts - uses: actions/download-artifact@v4 - if: startsWith(github.ref, 'refs/tags/') - with: - path: release_tmp - pattern: libblst_* - - - name: List folders in release_tmp directory - run: ls -la ${{ github.workspace }}/release_tmp - - - name: Organize Release Artifacts - run: | - mkdir -p release - mv release_tmp/libblst_x86_64-linux.a/libblst.a release/libblst_x86_64-linux.a - mv release_tmp/libblst_aarch64-linux.a/libblst.a release/libblst_aarch64-linux.a - mv release_tmp/libblst_x86_64-macos.a/libblst.a release/libblst_x86_64-macos.a - mv release_tmp/libblst_aarch64-macos.a/libblst.a release/libblst_aarch64-macos.a - mv release_tmp/libblst_min_pk_x86_64-linux.so/libblst_min_pk.so release/libblst_min_pk_x86_64-linux.so - mv release_tmp/libblst_min_pk_aarch64-linux.so/libblst_min_pk.so release/libblst_min_pk_aarch64-linux.so - mv release_tmp/libblst_min_pk_x86_64-macos.dylib/libblst_min_pk.dylib release/libblst_min_pk_x86_64-macos.dylib - mv release_tmp/libblst_min_pk_aarch64-macos.dylib/libblst_min_pk.dylib release/libblst_min_pk_aarch64-macos.dylib - - - name: List files in release directory - run: ls -la ${{ github.workspace }}/release - - - name: Create Release - uses: softprops/action-gh-release@v2 - with: - files: | - ${{ github.workspace }}/release/* - tag_name: ${{ github.ref_name }} - name: Release ${{ github.ref_name }} - fail_on_unmatched_files: true - draft: false - prerelease: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index ae2864d..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: Zig Build and Test - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - zig-build-test: - strategy: - matrix: - settings: - - os: ubuntu-latest - arch: x86_64 - - os: ubuntu-24.04-arm - arch: aarch64 - - os: macos-13 - arch: x86_64 - - os: macos-latest - arch: aarch64 - - runs-on: ${{ matrix.settings.os }} - - steps: - - name: Checkout Repository - uses: actions/checkout@v4 - with: - submodules: recursive # Ensures submodules are cloned - fetch-depth: 0 # Fetches the entire history for all branches - - - name: Print OS ${{ matrix.settings.os }} - run: uname -a - - name: Print Architecture ${{ matrix.settings.arch }} - run: uname -m - - - name: Verify Submodules - run: | - git submodule update --init --recursive - ls -la blst - - - name: Install Zig - uses: mlugg/setup-zig@v1 - with: - version: "0.14.0" # Set the required Zig version - - - name: Build and Test without portable - run: | - zig build test - - - name: Build and Test with portable - run: | - zig build -Dportable=true test - - - name: Build binary - run: zig build - - - name: Check binary - run: | - ls -la zig-out/lib - - # Unit tests blst-bun - - name: Install Bun - run: | - curl -fsSL https://bun.sh/install | bash - export PATH="$HOME/.bun/bin:$PATH" - # Append Bun's bin folder to the GitHub Actions PATH. - echo "$HOME/.bun/bin" >> $GITHUB_PATH - bun --version - - # (Optional) Install dependencies if you use bun install. - - name: Bun - Install Dependencies - run: bun install - working-directory: ./test/bun - - - name: Bun - Lint Code - run: bun lint - working-directory: ./test/bun - - - name: Bun - Unit Tests - run: bun test:unit - working-directory: ./test/bun From 82cd416cd2f0e55ac487f4520a7d5b066dd63f8a Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Mon, 19 May 2025 10:43:40 +0700 Subject: [PATCH 4/9] fix: correct zig-build-upload job name --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 5eaf343..34b85be 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -9,7 +9,7 @@ on: - main jobs: - zig-build-test: + zig-build-upload: strategy: matrix: settings: From ed00f01a9953f294f89fd866457197ffa7b1f597 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Mon, 19 May 2025 10:52:12 +0700 Subject: [PATCH 5/9] feat: add CI tests on different platforms --- .github/workflows/CI.yml | 130 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 34b85be..456b292 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -107,4 +107,132 @@ jobs: working-directory: ./bun env: # To write to PRs and commits - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + bun-linux-x64-gnu: + name: Test bindings on linux-x64-gnu + needs: zig-build-upload + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Download artifacts + uses: actions/download-artifact@v4 # no need zig installation, download artifacts from previous job instead + with: + name: linux-x64-gnu + path: zig-out/lib + - name: Install Bun + uses: oven-sh/setup-bun@v2 + with: + version: 1.2.13 + - name: Bun - Install Dependencies + run: bun install + working-directory: ./bun + - name: Bun - Unit Tests + run: bun test:unit + working-directory: ./bun + + bun-linux-arm64-gnu: + name: Test bindings on linux-arm64-gnu + needs: zig-build-upload + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Download artifacts + uses: actions/download-artifact@v4 # no need zig installation, download artifacts from previous job instead + with: + name: linux-arm64-gnu + path: zig-out/lib # download to the same folder of "zig build -Doptimize=ReleaseSafe" + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm64 + - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + - name: Setup and run tests using Bun + uses: addnab/docker-run-action@v3 + with: + image: oven/bun:1.2.13 + options: '--platform linux/arm64 -v ${{ github.workspace }}:/project -w /project/bun' + run: | + bun install + bun test:unit + + bun-linux-x64-musl: + name: Test bindings on linux-x64-musl + needs: zig-build-upload + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Download artifacts + uses: actions/download-artifact@v4 # no need zig installation, download artifacts from previous job instead + with: + name: linux-x64-musl + path: zig-out/lib # download to the same folder of "zig build -Doptimize=ReleaseSafe" + - name: Setup and run tests using Bun + uses: addnab/docker-run-action@v3 + with: + image: oven/bun:1.2.13-alpine + options: '-v ${{ github.workspace }}:/project -w /project/bun' + run: | # cannot run committeeIndices.test.ts and shuffle.test.ts due to musl is not available: @chainsafe/pubkey-index-map-linux-x64-musl + bun install + bun test test/unit/pubkeyIndexMap.test.ts + + bun-linux-arm64-musl: + name: Test bindings on linux-arm64-musl + needs: zig-build-upload + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Download artifacts + uses: actions/download-artifact@v4 # no need zig installation, download artifacts from previous job instead + with: + name: linux-arm64-musl + path: zig-out/lib # download to the same folder of "zig build -Doptimize=ReleaseSafe" + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm64 + - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + - name: Setup and run tests using Bun + uses: addnab/docker-run-action@v3 + with: + image: oven/bun:1.2.13-alpine + options: '--platform linux/arm64 -v ${{ github.workspace }}:/project -w /project/bun' + run: | # cannot run committeeIndices.test.ts and shuffle.test.ts due to musl is not available: @chainsafe/pubkey-index-map-linux-x64-musl + bun install + bun test test/unit/pubkeyIndexMap.test.ts + + bun-darwin: + name: Test bindings on macos + needs: zig-build-upload + strategy: + matrix: + settings: + - os: macos-13 + bun-target: darwin-x64 + - os: macos-latest + bun-target: darwin-arm64 + # - os: windows-latest # TODO: https://github.com/ChainSafe/state-transition-z/issues/10 + # bun-target: win32-x64-msvc + runs-on: ${{ matrix.settings.os }} + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Download artifacts + uses: actions/download-artifact@v4 # no need zig installation, download artifacts from previous job instead + with: + name: ${{ matrix.settings.bun-target }} + path: zig-out/lib # download to the same folder of "zig build -Doptimize=ReleaseSafe" + - name: Install Bun + uses: oven-sh/setup-bun@v2 + with: + version: 1.2.13 + - name: Bun - Install Dependencies + run: bun install + working-directory: ./bun + - name: Bun - Unit Tests + run: bun test:unit + working-directory: ./bun \ No newline at end of file From c8f18c0ee4be12b366e69ca828da0395bc295365 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Mon, 19 May 2025 13:17:11 +0700 Subject: [PATCH 6/9] fix: add version to package and remove unused dependencies --- bun/bun.lock | 107 +-------------------------------------------- bun/package.json | 6 +-- bun/src/binding.ts | 2 +- 3 files changed, 4 insertions(+), 111 deletions(-) diff --git a/bun/bun.lock b/bun/bun.lock index 628cfe0..7320056 100644 --- a/bun/bun.lock +++ b/bun/bun.lock @@ -8,10 +8,7 @@ }, "devDependencies": { "@biomejs/biome": "^1.9.3", - "@chainsafe/as-sha256": "^0.5.0", "@chainsafe/benchmark": "^1.2.3", - "@lodestar/params": "^1.27.0", - "@lodestar/state-transition": "^1.27.0", "@lodestar/utils": "^1.27.0", "@types/bun": "latest", "@types/js-yaml": "^4.0.9", @@ -82,78 +79,12 @@ "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@1.9.4", "", { "os": "win32", "cpu": "x64" }, "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA=="], - "@chainsafe/as-sha256": ["@chainsafe/as-sha256@0.5.0", "", {}, "sha512-dTIY6oUZNdC5yDTVP5Qc9hAlKAsn0QTQ2DnQvvsbTnKSTbYs3p5RPN0aIUqN0liXei/9h24c7V0dkV44cnWIQA=="], + "@chainsafe/as-sha256": ["@chainsafe/as-sha256@1.1.0", "", {}, "sha512-pLlxYtfYy2YW5GN+7d946UAjBOS9VOFulkfFN6Z+84ZhMP0Ey8XsCG21CZTczwq1C8J7/4z8LGzmrAtmQ37VCQ=="], "@chainsafe/benchmark": ["@chainsafe/benchmark@1.2.3", "", { "dependencies": { "@actions/cache": "^4.0.0", "@actions/github": "^6.0.0", "@vitest/runner": "^2.1.8", "ajv": "^8.17.1", "aws-sdk": "^2.932.0", "cli-table3": "^0.6.5", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", "debug": "^4.4.0", "glob": "^10.4.5", "log-symbols": "^7.0.0", "yaml": "^2.7.0", "yargs": "^17.7.2" }, "bin": { "benchmark": "bin/index.js" } }, "sha512-5rQKK2ar1k8DwqEMU5hTQlTrtrPzNdlfrMtbRgtrfYT/QpSADXGq1vBlywofY1D8HuEuv1LhRrn3p2rgibIXew=="], - "@chainsafe/blst": ["@chainsafe/blst@2.2.0", "", { "optionalDependencies": { "@chainsafe/blst-darwin-arm64": "2.2.0", "@chainsafe/blst-darwin-x64": "2.2.0", "@chainsafe/blst-linux-arm64-gnu": "2.2.0", "@chainsafe/blst-linux-arm64-musl": "2.2.0", "@chainsafe/blst-linux-x64-gnu": "2.2.0", "@chainsafe/blst-linux-x64-musl": "2.2.0", "@chainsafe/blst-win32-x64-msvc": "2.2.0" } }, "sha512-VBaQoNE2a9d9+skAjQKv3Suk0yGKqp3mZM0YWYJNPj/Ae/f6lAyeVSgKqo2LrsNQBzD/LqrJLKUY8rJT3vDKLA=="], - - "@chainsafe/blst-darwin-arm64": ["@chainsafe/blst-darwin-arm64@2.2.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BOOy2KHbV028cioPWaAMqHdLRKd6/3XyEmUEcQC2E/SpyYLdNcaKiBUYIU4pT9CrWBbJJxX68UI+3vZVg0M8/w=="], - - "@chainsafe/blst-darwin-x64": ["@chainsafe/blst-darwin-x64@2.2.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-jG64cwIdPT7u/haRrW26tWCpfMfHBQCfGY169mFQifCwO4VEwvaiVBPOh5olFis6LjpcmD+O0jpM8GqrnsmUHQ=="], - - "@chainsafe/blst-linux-arm64-gnu": ["@chainsafe/blst-linux-arm64-gnu@2.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-L8xV2uuLn8we76vdzfryS9ePdheuZrmY6yArGUFaF1Uzcwml6V1/VvyPl9/uooo/YfVRIrvF/D+lQfI2GFAnhw=="], - - "@chainsafe/blst-linux-arm64-musl": ["@chainsafe/blst-linux-arm64-musl@2.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0Vn0luxLYVgC3lvWT1MapFHSAoz99PldqjhilXTGv0AcAk/X5LXPH2RC9Dp2KJGqthyUkpbk1j47jUBfBI+BIg=="], - - "@chainsafe/blst-linux-x64-gnu": ["@chainsafe/blst-linux-x64-gnu@2.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-gEY/z2SDBA7kXtFEI9VNhWTJAIjx16jdeAyCaS2k4ACGurWZaWk+Ee4KniTsr4WieSqeuNTUr7Pdja0Sr4EKNQ=="], - - "@chainsafe/blst-linux-x64-musl": ["@chainsafe/blst-linux-x64-musl@2.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-58GKtiUmtVSuerRzPEcMNQZpICPboBKFnL7+1Wo+PSuajkvbae7tEFrFTtWeMoKIPgOEsPMnk96LF+0yNgavUg=="], - - "@chainsafe/blst-win32-x64-msvc": ["@chainsafe/blst-win32-x64-msvc@2.2.0", "", { "os": "win32", "cpu": "x64" }, "sha512-UFrZshl4dfX5Uh2zeKXAZtrkQ+otczHMON2tsrapQNICWmfHZrzE6pKuBL+9QeGAbgflwpbz7+D5nQRDpiuHxQ=="], - "@chainsafe/bun-ffi-z": ["@chainsafe/bun-ffi-z@github:ChainSafe/bun-ffi-z#81b828f", { "peerDependencies": { "typescript": "^5" }, "bin": { "bun-ffi-z": "src/cli.ts" } }, "ChainSafe-bun-ffi-z-81b828f"], - "@chainsafe/hashtree": ["@chainsafe/hashtree@1.0.1", "", { "optionalDependencies": { "@chainsafe/hashtree-darwin-arm64": "1.0.1", "@chainsafe/hashtree-linux-arm64-gnu": "1.0.1", "@chainsafe/hashtree-linux-x64-gnu": "1.0.1" } }, "sha512-bleu9FjqBeR/l6W1u2Lz+HsS0b0LLJX2eUt3hOPBN7VqOhidx8wzkVh2S7YurS+iTQtfdK4K5QU9tcTGNrGwDg=="], - - "@chainsafe/hashtree-darwin-arm64": ["@chainsafe/hashtree-darwin-arm64@1.0.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-+KmEgQMpO7FDL3klAcpXbQ4DPZvfCe0qSaBBrtT4vLF8V1JGm3sp+j7oibtxtOsLKz7nJMiK1pZExi7vjXu8og=="], - - "@chainsafe/hashtree-linux-arm64-gnu": ["@chainsafe/hashtree-linux-arm64-gnu@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-p1hnhGq2aFY+Zhdn1Q6L/6yLYNKjqXfn/Pc8jiM0e3+Lf/hB+yCdqYVu1pto26BrZjugCFZfupHaL4DjUTDttw=="], - - "@chainsafe/hashtree-linux-x64-gnu": ["@chainsafe/hashtree-linux-x64-gnu@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-uCIGuUWuWV0LiB4KLMy6JFa7Jp6NmPl3hKF5BYWu8TzUBe7vSXMZfqTzGxXPggFYN2/0KymfRdG9iDCOJfGRqg=="], - - "@chainsafe/persistent-merkle-tree": ["@chainsafe/persistent-merkle-tree@1.1.0", "", { "dependencies": { "@chainsafe/as-sha256": "1.1.0", "@chainsafe/hashtree": "1.0.1", "@noble/hashes": "^1.3.0" } }, "sha512-UIcKEGkEGghTXbFTvKqIiN2iljg2f6c2Y8GxdQEyle5UI6YIB8d3ACYTkAhrHSB4YsNlG9pc/A0NGJw/3Hf9wQ=="], - - "@chainsafe/persistent-ts": ["@chainsafe/persistent-ts@1.0.1", "", {}, "sha512-VkPaBD3GxS5vpLkZWfStDL39jG1IPLhy5c3d3FtgwyfGvEthnQJeyUMinGFRoAfAW0yVkf7ggrEzyvhXFLIU0A=="], - - "@chainsafe/pubkey-index-map": ["@chainsafe/pubkey-index-map@3.0.0", "", { "optionalDependencies": { "@chainsafe/pubkey-index-map-darwin-arm64": "3.0.0", "@chainsafe/pubkey-index-map-darwin-x64": "3.0.0", "@chainsafe/pubkey-index-map-linux-arm64-gnu": "3.0.0", "@chainsafe/pubkey-index-map-linux-arm64-musl": "3.0.0", "@chainsafe/pubkey-index-map-linux-x64-gnu": "3.0.0", "@chainsafe/pubkey-index-map-linux-x64-musl": "3.0.0", "@chainsafe/pubkey-index-map-win32-arm64-msvc": "3.0.0", "@chainsafe/pubkey-index-map-win32-x64-msvc": "3.0.0" } }, "sha512-KvWmKOG8WiVePHQDGyz+xo+RpsrmPEeipF8boqmXNYCLOGyVpkEXQk0IDVpnxngZziY6d97F9sml2vliDoyYyQ=="], - - "@chainsafe/pubkey-index-map-darwin-arm64": ["@chainsafe/pubkey-index-map-darwin-arm64@3.0.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gM/wwA6bpfeZm80aSoH2c3ddbPeZho73TUUprUFlHQNLldGzZ293yFQgj2Ontp1fMf9AI0w+F0uEN2qC6v7g9A=="], - - "@chainsafe/pubkey-index-map-darwin-x64": ["@chainsafe/pubkey-index-map-darwin-x64@3.0.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-zy4dH//kLXfQHHFVp1Pcz4HQgSh/uUKWt219hlrb5Fi+xVESVmTnLPjHmL1KtGs/R5W0XcuBrTuBHiq+zMU7lQ=="], - - "@chainsafe/pubkey-index-map-linux-arm64-gnu": ["@chainsafe/pubkey-index-map-linux-arm64-gnu@3.0.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-M/HODHZcKDuoRFlx+Ka4NgyFSQvOECyIg/2pCQcgfCozR7rRx7VuOJ0ZSgU+BEhuY+fpaRSTesOlDIIY0ornWQ=="], - - "@chainsafe/pubkey-index-map-linux-arm64-musl": ["@chainsafe/pubkey-index-map-linux-arm64-musl@3.0.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Sdm15mFsKiz5ndFfhcTjEl4i8TK0+gM1SEmYzmGUgnflrcvPc+US3qsMKyCqorDkHqYAYFFutQXz9QxjOMkIwg=="], - - "@chainsafe/pubkey-index-map-linux-x64-gnu": ["@chainsafe/pubkey-index-map-linux-x64-gnu@3.0.0", "", { "os": "linux", "cpu": "x64" }, "sha512-+4h995h2xEBmYdr9Tw05uYvFmMSELyaJagJ2KsFohkRjqiUyB76l8zR8aUKx7lwLXXHxWjHMYyWKHF3tTKRFNQ=="], - - "@chainsafe/pubkey-index-map-linux-x64-musl": ["@chainsafe/pubkey-index-map-linux-x64-musl@3.0.0", "", { "os": "linux", "cpu": "x64" }, "sha512-qwFuygeutP4o9J/8ylD+ZrqkqeyytMl9E38ucIWpbiPYXDiJxpRN148v4Ah+NWwz6PqCROVyTxEyZklzy0AxUA=="], - - "@chainsafe/pubkey-index-map-win32-arm64-msvc": ["@chainsafe/pubkey-index-map-win32-arm64-msvc@3.0.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-2t01rQAdiM5KPM7XLsZDtMhWAXz/YKY20H1N4jvaWURjaLm+S0j9X/Mt0xOjJ5SC++1g64LXjV+wnXO5j1S8Nw=="], - - "@chainsafe/pubkey-index-map-win32-x64-msvc": ["@chainsafe/pubkey-index-map-win32-x64-msvc@3.0.0", "", { "os": "win32", "cpu": "x64" }, "sha512-QemArQbgsLJ4eaM9S0Kdr3ucJUpZXTDfh3wTNp9eh7G3o1Y9O2Hp7G7BlEkF0cWU9ZsWe9YSzmeX24Uo5DNo4g=="], - - "@chainsafe/ssz": ["@chainsafe/ssz@1.2.0", "", { "dependencies": { "@chainsafe/as-sha256": "1.1.0", "@chainsafe/persistent-merkle-tree": "1.1.0" } }, "sha512-fsFFBfT5JPCypyzENDg6srd6woNMj0+x6OLR5X1di+IK5mYlxBiAVsH/bYVj/u5DE3nanAgPZOc5KSszoDBRvw=="], - - "@chainsafe/swap-or-not-shuffle": ["@chainsafe/swap-or-not-shuffle@1.2.1", "", { "optionalDependencies": { "@chainsafe/swap-or-not-shuffle-darwin-arm64": "1.2.1", "@chainsafe/swap-or-not-shuffle-darwin-x64": "1.2.1", "@chainsafe/swap-or-not-shuffle-linux-arm64-gnu": "1.2.1", "@chainsafe/swap-or-not-shuffle-linux-arm64-musl": "1.2.1", "@chainsafe/swap-or-not-shuffle-linux-x64-gnu": "1.2.1", "@chainsafe/swap-or-not-shuffle-linux-x64-musl": "1.2.1", "@chainsafe/swap-or-not-shuffle-win32-arm64-msvc": "1.2.1", "@chainsafe/swap-or-not-shuffle-win32-x64-msvc": "1.2.1" } }, "sha512-H8YdEoXXv2Hw17gDWGOJEya4LHlBbpChJP3jDQRfIk9hhwr0c/zbBemBRmjADowZhArL+ymkO+j5hGaYySjdpw=="], - - "@chainsafe/swap-or-not-shuffle-darwin-arm64": ["@chainsafe/swap-or-not-shuffle-darwin-arm64@1.2.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kTewLZe1KqMAJ1gHfagOxo0BI4kTcMOAkGJ7pRLFM5ZkL2P7sh3/4ixnjdbtMkO207vMZEZL3fxJSSs14kg9Kg=="], - - "@chainsafe/swap-or-not-shuffle-darwin-x64": ["@chainsafe/swap-or-not-shuffle-darwin-x64@1.2.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-B/f/peQqOLW5Tqib5CqanAlQgoeib75FNszzHwRBwHdRY5ThOcBbARvOtef39zU5lYjj4j3iWobpD7G70kQyUw=="], - - "@chainsafe/swap-or-not-shuffle-linux-arm64-gnu": ["@chainsafe/swap-or-not-shuffle-linux-arm64-gnu@1.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-sDpuUuo3rStvHMQgLxH1UkkUbo8rcjDI70Fq3xzbNMhfjlrP0+sJistlFJtDpWmKsFk/sgje3PzVU9G3KFXzXA=="], - - "@chainsafe/swap-or-not-shuffle-linux-arm64-musl": ["@chainsafe/swap-or-not-shuffle-linux-arm64-musl@1.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-FFmpDF2dRhhOCT3WBYOoQW9wqhJMfx7iULskBe5cjowVQ15U1TQJ6tC+hPpouUMt3/pKz9tIS9dNWTUuo7kpQg=="], - - "@chainsafe/swap-or-not-shuffle-linux-x64-gnu": ["@chainsafe/swap-or-not-shuffle-linux-x64-gnu@1.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-nGXEnFCqRmCS7ATV7QQ7b7aKHcyET9XEpJylq0sljnkuNRwoQXFUYPMYTn4TMI6g3vgZt/AVK9RdCxp68JKwGQ=="], - - "@chainsafe/swap-or-not-shuffle-linux-x64-musl": ["@chainsafe/swap-or-not-shuffle-linux-x64-musl@1.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-VMQxE/EZjco4damGrJkkCQ2Y2WYgJcTR/ardTnSctM1/xxwUD1wQr7YW2TQsECfK3UZcW2W6gG7iqWfJgMdGSw=="], - - "@chainsafe/swap-or-not-shuffle-win32-arm64-msvc": ["@chainsafe/swap-or-not-shuffle-win32-arm64-msvc@1.2.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-qV+ps6KSoR8blc3gMse1BOBUGcCtptnMYoqTMwFCIx9LGaeSo3vKu5XBQDwHIfAW73bZ+PHb5YUqkRgtWBiEUw=="], - - "@chainsafe/swap-or-not-shuffle-win32-x64-msvc": ["@chainsafe/swap-or-not-shuffle-win32-x64-msvc@1.2.1", "", { "os": "win32", "cpu": "x64" }, "sha512-hsDN4O6PPpF4rEA1tMngMJAOrWTGAu8TAqdEwgdP+U25o8UVlz8W2N9697AMGRnnArN2BgYS0zCeUR9kuZ2XEQ=="], - "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], @@ -162,20 +93,8 @@ "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], - "@lodestar/config": ["@lodestar/config@1.30.0", "", { "dependencies": { "@chainsafe/ssz": "^1.2.0", "@lodestar/params": "^1.30.0", "@lodestar/types": "^1.30.0", "@lodestar/utils": "^1.30.0" } }, "sha512-Sdt54Y9VpxylFXB3fomXFFORKhiw9CZhab253qzZKkXyNmSTt/8moKGzltviFch73tlDyAoRUTl9kTiuhkK61Q=="], - - "@lodestar/params": ["@lodestar/params@1.30.0", "", {}, "sha512-mdql9B0NRDVCS+EiW3sdLhhJfdF/ncdGUgWTrvH7CG8OxHXD5Qx0hhDh0zb1vDKFsw5JGg5zt6xwMHMBDFoAfQ=="], - - "@lodestar/state-transition": ["@lodestar/state-transition@1.30.0", "", { "dependencies": { "@chainsafe/as-sha256": "^1.1.0", "@chainsafe/blst": "^2.2.0", "@chainsafe/persistent-merkle-tree": "^1.1.0", "@chainsafe/persistent-ts": "^1.0.0", "@chainsafe/pubkey-index-map": "^3.0.0", "@chainsafe/ssz": "^1.2.0", "@chainsafe/swap-or-not-shuffle": "^1.2.1", "@lodestar/config": "^1.30.0", "@lodestar/params": "^1.30.0", "@lodestar/types": "^1.30.0", "@lodestar/utils": "^1.30.0", "bigint-buffer": "^1.1.5" } }, "sha512-l3b5jOydIZ0yJGnXSZAN+mxwRKnKs7zq8hQ5CXrjXyrwhpXZ5tpRpHUz9MgR78KO8bBwroUvmP9/j8PKU3h0Dw=="], - - "@lodestar/types": ["@lodestar/types@1.30.0", "", { "dependencies": { "@chainsafe/ssz": "^1.2.0", "@lodestar/params": "^1.30.0", "ethereum-cryptography": "^2.0.0" } }, "sha512-I09HC4+4K3o0ezW4cn11mx9YPajfKhDmw45yKREZ6plGf3stJe7qNaX23umrHMoCIonNCpxBfqA+Ey1FqMhwKQ=="], - "@lodestar/utils": ["@lodestar/utils@1.30.0", "", { "dependencies": { "@chainsafe/as-sha256": "^1.1.0", "any-signal": "^4.1.1", "bigint-buffer": "^1.1.5", "case": "^1.6.3", "js-yaml": "^4.1.0" } }, "sha512-p87FMEaLvUEQo6uYEjO8DvxHr8fFSvuNcnVkaS9dOu3lnzDf0gwotqrCcPhi+K6LNR4uo14w65Bu4sS+fJF1Ng=="], - "@noble/curves": ["@noble/curves@1.4.2", "", { "dependencies": { "@noble/hashes": "1.4.0" } }, "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw=="], - - "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "@octokit/auth-token": ["@octokit/auth-token@4.0.0", "", {}, "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA=="], "@octokit/core": ["@octokit/core@5.2.1", "", { "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" } }, "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ=="], @@ -208,12 +127,6 @@ "@protobuf-ts/runtime-rpc": ["@protobuf-ts/runtime-rpc@2.9.6", "", { "dependencies": { "@protobuf-ts/runtime": "^2.9.6" } }, "sha512-0UeqDRzNxgsh08lY5eWzFJNfD3gZ8Xf+WG1HzbIAbVAigzigwjwsYNNhTeas5H3gco1U5owTzCg177aambKOOw=="], - "@scure/base": ["@scure/base@1.1.9", "", {}, "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="], - - "@scure/bip32": ["@scure/bip32@1.4.0", "", { "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" } }, "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg=="], - - "@scure/bip39": ["@scure/bip39@1.3.0", "", { "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" } }, "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ=="], - "@types/bun": ["@types/bun@1.2.8", "", { "dependencies": { "bun-types": "1.2.7" } }, "sha512-t8L1RvJVUghW5V+M/fL3Thbxcs0HwNsXsnTEBEfEVqGteiJToOlZ/fyOEaR1kZsNqnu+3XA4RI/qmnX4w6+S+w=="], "@types/js-yaml": ["@types/js-yaml@4.0.9", "", {}, "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="], @@ -316,8 +229,6 @@ "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - "ethereum-cryptography": ["ethereum-cryptography@2.2.1", "", { "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", "@scure/bip32": "1.4.0", "@scure/bip39": "1.3.0" } }, "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg=="], - "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], "events": ["events@1.1.1", "", {}, "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw=="], @@ -538,32 +449,16 @@ "@azure/storage-blob/events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "@chainsafe/persistent-merkle-tree/@chainsafe/as-sha256": ["@chainsafe/as-sha256@1.1.0", "", {}, "sha512-pLlxYtfYy2YW5GN+7d946UAjBOS9VOFulkfFN6Z+84ZhMP0Ey8XsCG21CZTczwq1C8J7/4z8LGzmrAtmQ37VCQ=="], - - "@chainsafe/ssz/@chainsafe/as-sha256": ["@chainsafe/as-sha256@1.1.0", "", {}, "sha512-pLlxYtfYy2YW5GN+7d946UAjBOS9VOFulkfFN6Z+84ZhMP0Ey8XsCG21CZTczwq1C8J7/4z8LGzmrAtmQ37VCQ=="], - "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - "@lodestar/state-transition/@chainsafe/as-sha256": ["@chainsafe/as-sha256@1.1.0", "", {}, "sha512-pLlxYtfYy2YW5GN+7d946UAjBOS9VOFulkfFN6Z+84ZhMP0Ey8XsCG21CZTczwq1C8J7/4z8LGzmrAtmQ37VCQ=="], - - "@lodestar/utils/@chainsafe/as-sha256": ["@chainsafe/as-sha256@1.1.0", "", {}, "sha512-pLlxYtfYy2YW5GN+7d946UAjBOS9VOFulkfFN6Z+84ZhMP0Ey8XsCG21CZTczwq1C8J7/4z8LGzmrAtmQ37VCQ=="], - - "@noble/curves/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], - "@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="], "@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="], - "@scure/bip32/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], - - "@scure/bip39/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], - - "ethereum-cryptography/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], - "@actions/glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], diff --git a/bun/package.json b/bun/package.json index d612ad8..6f21265 100644 --- a/bun/package.json +++ b/bun/package.json @@ -1,5 +1,6 @@ { - "name": "blst-bun", + "name": "@chainsafe/blst-bun", + "version": "0.0.0", "module": "src/index.ts", "type": "module", "dependencies": { @@ -10,9 +11,6 @@ "@types/js-yaml": "^4.0.9", "@biomejs/biome": "^1.9.3", "@chainsafe/benchmark": "^1.2.3", - "@chainsafe/as-sha256": "^0.5.0", - "@lodestar/params": "^1.27.0", - "@lodestar/state-transition": "^1.27.0", "@lodestar/utils": "^1.27.0", "tar": "^7.4.0", "js-yaml": "^4.1.0" diff --git a/bun/src/binding.ts b/bun/src/binding.ts index fc716f1..2dc580f 100644 --- a/bun/src/binding.ts +++ b/bun/src/binding.ts @@ -148,7 +148,7 @@ const fns = { // Load the compiled Zig shared library // the first param is bun's cwd // - on dev env it's the cwd which is `./bun` -// - on prod env it does not matter because bun-ffi-z will load platfrom-specific package like @chainsafe/state-transition-bun-linux-x64-gnu/libstate-transition-utils.so instead +// - on prod env it does not matter because bun-ffi-z will load platfrom-specific package like @chainsafe/blst-bun-linux-x64-gnu/libblst_min_pk.so instead const lib = await openLibrary(path.join(import.meta.dirname, ".."), fns); export const binding = lib.symbols; From 667b87db402544bdc7b4f59b94856c4599e90278 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Mon, 19 May 2025 14:17:53 +0700 Subject: [PATCH 7/9] feat: add publish workflow --- .github/workflows/CI.yml | 49 +++++++++++++++++++++++++++++++++++ .release-please-manifest.json | 3 +++ bun/CHANGELOG.md | 0 release-please-config.json | 15 +++++++++++ 4 files changed, 67 insertions(+) create mode 100644 .release-please-manifest.json create mode 100644 bun/CHANGELOG.md create mode 100644 release-please-config.json diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 456b292..e53c61a 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -235,4 +235,53 @@ jobs: working-directory: ./bun - name: Bun - Unit Tests run: bun test:unit + working-directory: ./bun + + publish: + name: Publish + runs-on: ubuntu-latest + needs: + - bun-linux-x64-gnu + - bun-linux-arm64-gnu + - bun-linux-x64-musl + - bun-linux-arm64-musl + - bun-darwin + steps: + - name: Opening Release PR + if: github.ref == 'refs/heads/main' + uses: googleapis/release-please-action@v4 + id: release + with: + config-file: release-please-config.json + manifest-file: .release-please-manifest.json + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Install Bun + uses: oven-sh/setup-bun@v2 + with: + version: 1.2.13 + - name: Bun - Install Dependencies + if: ${{ steps.release.outputs.release_created }} + run: bun install + working-directory: ./bun + - name: Download all artifacts + if: ${{ steps.release.outputs.release_created }} + uses: actions/download-artifact@v4 + with: + path: bun/artifacts + - name: List artifacts + if: ${{ steps.release.outputs.release_created }} + run: ls -R ./bun/artifacts + shell: bash + - name: Create targetPackages + if: ${{ steps.release.outputs.release_created }} + run: bun run prepublishOnly + working-directory: ./bun + - name: List targetPackages + if: ${{ steps.release.outputs.release_created }} + run: ls -R ./bun/targetPackages + shell: bash + - name: Publish + if: ${{ steps.release.outputs.release_created }} + run: bun run publish working-directory: ./bun \ No newline at end of file diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..aeea9d4 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + "bun": "0.0.0" +} \ No newline at end of file diff --git a/bun/CHANGELOG.md b/bun/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..627c5d2 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,15 @@ +{ + "release-type": "none", + "packages": { + "bun": { + "changelog-path": "CHANGELOG.md", + "release-type": "node", + "package-name": "@chainsafe/blst-bun", + "bump-minor-pre-major": false, + "bump-patch-for-minor-pre-major": false, + "draft": false, + "prerelease": false + } + }, + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json" +} \ No newline at end of file From 97e6d1c166e9d4abff1e02bc32dcd1a20e72c8fc Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Wed, 21 May 2025 20:04:15 +0700 Subject: [PATCH 8/9] fix: freeze bun-ffi-z --- bun/bun.lock | 4 ++-- bun/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bun/bun.lock b/bun/bun.lock index 7320056..a3a50cb 100644 --- a/bun/bun.lock +++ b/bun/bun.lock @@ -4,7 +4,7 @@ "": { "name": "blst-bun", "dependencies": { - "@chainsafe/bun-ffi-z": "https://github.com/ChainSafe/bun-ffi-z.git", + "@chainsafe/bun-ffi-z": "^v1.0.0", }, "devDependencies": { "@biomejs/biome": "^1.9.3", @@ -83,7 +83,7 @@ "@chainsafe/benchmark": ["@chainsafe/benchmark@1.2.3", "", { "dependencies": { "@actions/cache": "^4.0.0", "@actions/github": "^6.0.0", "@vitest/runner": "^2.1.8", "ajv": "^8.17.1", "aws-sdk": "^2.932.0", "cli-table3": "^0.6.5", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", "debug": "^4.4.0", "glob": "^10.4.5", "log-symbols": "^7.0.0", "yaml": "^2.7.0", "yargs": "^17.7.2" }, "bin": { "benchmark": "bin/index.js" } }, "sha512-5rQKK2ar1k8DwqEMU5hTQlTrtrPzNdlfrMtbRgtrfYT/QpSADXGq1vBlywofY1D8HuEuv1LhRrn3p2rgibIXew=="], - "@chainsafe/bun-ffi-z": ["@chainsafe/bun-ffi-z@github:ChainSafe/bun-ffi-z#81b828f", { "peerDependencies": { "typescript": "^5" }, "bin": { "bun-ffi-z": "src/cli.ts" } }, "ChainSafe-bun-ffi-z-81b828f"], + "@chainsafe/bun-ffi-z": ["@chainsafe/bun-ffi-z@1.0.0", "", { "peerDependencies": { "typescript": "^5" }, "bin": { "bun-ffi-z": "src/cli.ts" } }, "sha512-IRQrGWvDVSWQOcNYPZqPeqMN8qRotad/84RHSxQ8xzIuhVhkpUp2lx4VeD92Tnkcwbp5Gr+tUT4Lb47nbIe1Xg=="], "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], diff --git a/bun/package.json b/bun/package.json index 6f21265..e711418 100644 --- a/bun/package.json +++ b/bun/package.json @@ -4,7 +4,7 @@ "module": "src/index.ts", "type": "module", "dependencies": { - "@chainsafe/bun-ffi-z": "https://github.com/ChainSafe/bun-ffi-z.git" + "@chainsafe/bun-ffi-z": "^v1.0.0" }, "devDependencies": { "@types/bun": "latest", From 57c9de721fcaf0a0dc7b3a24b079795d6170c2e3 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Wed, 21 May 2025 20:04:46 +0700 Subject: [PATCH 9/9] fix: use secrets.NPM_TOKEN for publish flow --- .github/workflows/CI.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index e53c61a..9721f31 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -284,4 +284,6 @@ jobs: - name: Publish if: ${{ steps.release.outputs.release_created }} run: bun run publish - working-directory: ./bun \ No newline at end of file + working-directory: ./bun + env: + NPM_CONFIG_TOKEN: ${{ secrets.NPM_TOKEN }} \ No newline at end of file