Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions .buildchain/kfd-1/libnode-contract-world.witness.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
"contractWorld": {
"id": "libnode-release-contract",
"schemaId": "https://kfd.libkungfu.dev/schemas/kfd-1/contract-world.schema.json",
"digest": "sha256:30ba96a39aba6cd56222a785b4e9c0e9864ecf414d51a74ddfefee9c3ae8b1bc"
"digest": "sha256:3501d41477306ffca52f58991423e7aeb69bf759d5e35904f19864b1b37cb54a"
},
"standardContract": {
"id": "libnode-release-contract",
"path": "libnode.release.json",
"sha256": "30ba96a39aba6cd56222a785b4e9c0e9864ecf414d51a74ddfefee9c3ae8b1bc"
"sha256": "3501d41477306ffca52f58991423e7aeb69bf759d5e35904f19864b1b37cb54a"
},
"selfHostingBoundary": {
"mode": "self-hosted-standard-contract",
Expand All @@ -33,33 +33,33 @@
{
"name": "package-manifest",
"sourcePath": "package.json",
"sourceSha256": "de626755c62f2b3b252e0680b86e5dcddab7fdf8207ed76627e8c780d3210f56",
"sourceSha256": "c3eb6715a4926521a8e7d9e049ea6380daed81a605ac6d4d9a9903854a9e235a",
"artifactPath": "package.json",
"expectedSha256": "de626755c62f2b3b252e0680b86e5dcddab7fdf8207ed76627e8c780d3210f56",
"expectedSha256": "c3eb6715a4926521a8e7d9e049ea6380daed81a605ac6d4d9a9903854a9e235a",
"byteForByte": true
},
{
"name": "release-manifest",
"sourcePath": "libnode.release.json",
"sourceSha256": "30ba96a39aba6cd56222a785b4e9c0e9864ecf414d51a74ddfefee9c3ae8b1bc",
"sourceSha256": "3501d41477306ffca52f58991423e7aeb69bf759d5e35904f19864b1b37cb54a",
"artifactPath": "libnode.release.json",
"expectedSha256": "30ba96a39aba6cd56222a785b4e9c0e9864ecf414d51a74ddfefee9c3ae8b1bc",
"expectedSha256": "3501d41477306ffca52f58991423e7aeb69bf759d5e35904f19864b1b37cb54a",
"byteForByte": true
},
{
"name": "buildchain-config",
"sourcePath": "buildchain.toml",
"sourceSha256": "3e9634b497b36eb78d3ea5eb0063fc49a98a32d6d34d34047aa5fe72e4de2f58",
"sourceSha256": "fbc596052c556a59812070ad5d5be093e51ba995cffa6e7b809eb60bbc8f54ae",
"artifactPath": "buildchain.toml",
"expectedSha256": "3e9634b497b36eb78d3ea5eb0063fc49a98a32d6d34d34047aa5fe72e4de2f58",
"expectedSha256": "fbc596052c556a59812070ad5d5be093e51ba995cffa6e7b809eb60bbc8f54ae",
"byteForByte": true
},
{
"name": "package-builder",
"sourcePath": ".gyp/node-platform-package.js",
"sourceSha256": "e457328484352bb48404872dad0a6747bfdfb78c67dbb1d8f0cd5d93ae5fecd4",
"sourceSha256": "d64eabf976d0544cde1725a3dc1c0fa053207514332868b488c9cfdb5b454297",
"artifactPath": ".gyp/node-platform-package.js",
"expectedSha256": "e457328484352bb48404872dad0a6747bfdfb78c67dbb1d8f0cd5d93ae5fecd4",
"expectedSha256": "d64eabf976d0544cde1725a3dc1c0fa053207514332868b488c9cfdb5b454297",
"byteForByte": true
},
{
Expand All @@ -73,33 +73,33 @@
{
"name": "kfd3-artifact-verifier",
"sourcePath": ".gyp/libnode-kfd3-artifact-verify.js",
"sourceSha256": "783b329aeaa4b2196db5c754ff2c8ac247467af8655d8caba52755e5e88677ba",
"sourceSha256": "6f39a0a7ae08ec48745cd8110d8a28b620e73a4623e48cb064b047715d89878f",
"artifactPath": ".gyp/libnode-kfd3-artifact-verify.js",
"expectedSha256": "783b329aeaa4b2196db5c754ff2c8ac247467af8655d8caba52755e5e88677ba",
"expectedSha256": "6f39a0a7ae08ec48745cd8110d8a28b620e73a4623e48cb064b047715d89878f",
"byteForByte": true
},
{
"name": "release-workflow",
"sourcePath": ".github/workflows/release-new-version.yml",
"sourceSha256": "4034d36e9820d152eee70d4f7e34d08ce597893042206bde88443e2256d12212",
"sourceSha256": "d843d99c40ac0772129bfb2d983964b72604d478a8d05a7d4767284317888607",
"artifactPath": ".github/workflows/release-new-version.yml",
"expectedSha256": "4034d36e9820d152eee70d4f7e34d08ce597893042206bde88443e2256d12212",
"expectedSha256": "d843d99c40ac0772129bfb2d983964b72604d478a8d05a7d4767284317888607",
"byteForByte": true
},
{
"name": "kfd3-collaboration-interface",
"sourcePath": ".buildchain/kfd-3/collaboration-interface.json",
"sourceSha256": "bbdfc87c532fe50fca92ca8415fc624af95c79fa7c9a4825efcee233701bd8c8",
"sourceSha256": "7479a8efa55109007aa414870c754169df64a0d0b5e37f16579acbd5a423e499",
"artifactPath": ".buildchain/kfd-3/collaboration-interface.json",
"expectedSha256": "bbdfc87c532fe50fca92ca8415fc624af95c79fa7c9a4825efcee233701bd8c8",
"expectedSha256": "7479a8efa55109007aa414870c754169df64a0d0b5e37f16579acbd5a423e499",
"byteForByte": true
},
{
"name": "kfd3-prebuild-witness",
"sourcePath": ".buildchain/kfd-3/collaboration-interface.prebuild.json",
"sourceSha256": "d9577384ae3690fadb3739635f88c209e456ca5eed69c2c2fe1fb3c76a47d0b5",
"sourceSha256": "3f7e7dece8211423531c3b3ebde2dd1f560ff3992f4c3583bdaaba32c51b0bc1",
"artifactPath": ".buildchain/kfd-3/collaboration-interface.prebuild.json",
"expectedSha256": "d9577384ae3690fadb3739635f88c209e456ca5eed69c2c2fe1fb3c76a47d0b5",
"expectedSha256": "3f7e7dece8211423531c3b3ebde2dd1f560ff3992f4c3583bdaaba32c51b0bc1",
"byteForByte": true
}
]
Expand Down
6 changes: 5 additions & 1 deletion .buildchain/kfd-2/public-release-trust.claim.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "claim:libnode-public-release-trust",
"public": true,
"claim": "Libnode npm releases are anchored to libnode.release.json, built as a four-platform package set, verified by product-owned package gates, and published through Buildchain trusted publishing.",
"claim": "Libnode npm releases are anchored to libnode.release.json, built as a five-platform package set, verified by product-owned package gates, and published through Buildchain trusted publishing.",
"sourceBindings": [
{
"id": "release-manifest",
Expand Down Expand Up @@ -54,6 +54,10 @@
"name": "@kungfu-tech/libnode-darwin-arm64",
"kind": "npm-platform-package"
},
{
"name": "@kungfu-tech/libnode-darwin-x64",
"kind": "npm-platform-package"
},
{
"name": "@kungfu-tech/libnode-linux-x64",
"kind": "npm-platform-package"
Expand Down
12 changes: 11 additions & 1 deletion .buildchain/kfd-3/collaboration-interface.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@
"public": true,
"sourcePath": ".gyp/node-platform-package.js"
},
{
"id": "npm:platform-darwin-x64",
"name": "@kungfu-tech/libnode-darwin-x64 package",
"kind": "platform-package",
"availability": "shipped",
"visibility": "public",
"participantFacing": true,
"public": true,
"sourcePath": ".gyp/node-platform-package.js"
},
{
"id": "npm:platform-linux-x64",
"name": "@kungfu-tech/libnode-linux-x64 package",
Expand Down Expand Up @@ -145,7 +155,7 @@
"The npm version is anchored to libnode.release.json npmVersion.",
"The upstream Node version is anchored to libnode.release.json nodeTag and nodeCommit.",
"The release package set is published platforms-first and main-last.",
"macOS arm64, Linux x64, Linux arm64, and Windows x64 platform packages are public release surfaces.",
"macOS arm64, macOS x64, Linux x64, Linux arm64, and Windows x64 platform packages are public release surfaces.",
"macOS and Linux link aliases are materialized by package postinstall policy instead of npm tarball symlinks.",
"Windows packages must include both DLL and import library outputs."
],
Expand Down
16 changes: 13 additions & 3 deletions .buildchain/kfd-3/collaboration-interface.prebuild.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@
"sourceRegistry": {
"id": "libnode-release-contract",
"path": "libnode.release.json",
"version": "22.22.3-kf.5-alpha.3"
"version": "22.22.3-kf.5-alpha.4"
},
"collaborationInterfaceDigest": "sha256:bbdfc87c532fe50fca92ca8415fc624af95c79fa7c9a4825efcee233701bd8c8",
"collaborationInterfaceDigest": "sha256:7479a8efa55109007aa414870c754169df64a0d0b5e37f16579acbd5a423e499",
"collaborationInterface": {
"schemaVersion": 1,
"contract": "kfd-3-collaboration-interface",
"digest": "sha256:bbdfc87c532fe50fca92ca8415fc624af95c79fa7c9a4825efcee233701bd8c8",
"digest": "sha256:7479a8efa55109007aa414870c754169df64a0d0b5e37f16579acbd5a423e499",
"product": {
"name": "Libnode",
"package": "@kungfu-tech/libnode",
Expand Down Expand Up @@ -62,6 +62,16 @@
"public": true,
"sourcePath": ".gyp/node-platform-package.js"
},
{
"id": "npm:platform-darwin-x64",
"name": "@kungfu-tech/libnode-darwin-x64 package",
"kind": "platform-package",
"availability": "shipped",
"visibility": "public",
"participantFacing": true,
"public": true,
"sourcePath": ".gyp/node-platform-package.js"
},
{
"id": "npm:platform-linux-x64",
"name": "@kungfu-tech/libnode-linux-x64 package",
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
with:
runner-preset: custom
platforms-json: >-
[{"id":"linux-x64","name":"Linux x64","platform":"linux","runner":"[\"self-hosted\",\"Linux\",\"X64\",\"kungfu-build-v4-linux-x64\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"linux-arm64","name":"Linux ARM64","platform":"linux","runner":"[\"ubuntu-24.04-arm\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"macos-arm64","name":"macOS ARM64","platform":"macos","runner":"[\"self-hosted\",\"macOS\",\"ARM64\",\"kungfu-build-v4-macos-arm64\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"windows-x64","name":"Windows x64","platform":"windows","runner":"[\"self-hosted\",\"Windows\",\"X64\",\"kungfu-build-v4-windows-x64\"]","capabilities":["node","native-toolchain","product-artifacts"]}]
[{"id":"linux-x64","name":"Linux x64","platform":"linux","runner":"[\"self-hosted\",\"Linux\",\"X64\",\"kungfu-build-v4-linux-x64\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"linux-arm64","name":"Linux ARM64","platform":"linux","runner":"[\"ubuntu-24.04-arm\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"macos-arm64","name":"macOS ARM64","platform":"macos","runner":"[\"self-hosted\",\"macOS\",\"ARM64\",\"kungfu-build-v4-macos-arm64\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"macos-x64","name":"macOS x64","platform":"macos","runner":"[\"macos-15-intel\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"windows-x64","name":"Windows x64","platform":"windows","runner":"[\"self-hosted\",\"Windows\",\"X64\",\"kungfu-build-v4-windows-x64\"]","capabilities":["node","native-toolchain","product-artifacts"]}]
buildchain-alpha-contract-lock-path: buildchain.alpha-contract-lock.json
buildchain-stable-contract-lock-path: buildchain.contract-lock.json
buildchain-contract-drift-issue-mode: compatible-and-breaking
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/release-new-version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,12 @@ jobs:
release-candidate-workflow-name: ${{ startsWith(github.ref_name, 'release/') && 'Release - Verify' || 'Build' }}
artifact-patterns: |
libnode-macos-arm64-*
libnode-macos-x64-*
libnode-linux-x64-*
libnode-linux-arm64-*
libnode-windows-x64-*
required-status-check: build
required-artifact-count: 4
required-artifact-count: 5
publish-mode: publish-final-version
publish-dist-tag: ${{ startsWith(github.ref_name, 'alpha/') && 'alpha' || 'latest' }}
publish-package-set-order: platforms-first-main-last
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-verify.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
with:
runner-preset: custom
platforms-json: >-
[{"id":"linux-x64","name":"Linux x64","platform":"linux","runner":"[\"self-hosted\",\"Linux\",\"X64\",\"kungfu-build-v4-linux-x64\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"linux-arm64","name":"Linux ARM64","platform":"linux","runner":"[\"ubuntu-24.04-arm\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"macos-arm64","name":"macOS ARM64","platform":"macos","runner":"[\"self-hosted\",\"macOS\",\"ARM64\",\"kungfu-build-v4-macos-arm64\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"windows-x64","name":"Windows x64","platform":"windows","runner":"[\"self-hosted\",\"Windows\",\"X64\",\"kungfu-build-v4-windows-x64\"]","capabilities":["node","native-toolchain","product-artifacts"]}]
[{"id":"linux-x64","name":"Linux x64","platform":"linux","runner":"[\"self-hosted\",\"Linux\",\"X64\",\"kungfu-build-v4-linux-x64\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"linux-arm64","name":"Linux ARM64","platform":"linux","runner":"[\"ubuntu-24.04-arm\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"macos-arm64","name":"macOS ARM64","platform":"macos","runner":"[\"self-hosted\",\"macOS\",\"ARM64\",\"kungfu-build-v4-macos-arm64\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"macos-x64","name":"macOS x64","platform":"macos","runner":"[\"macos-15-intel\"]","capabilities":["node","native-toolchain","product-artifacts"]},{"id":"windows-x64","name":"Windows x64","platform":"windows","runner":"[\"self-hosted\",\"Windows\",\"X64\",\"kungfu-build-v4-windows-x64\"]","capabilities":["node","native-toolchain","product-artifacts"]}]
buildchain-alpha-contract-lock-path: buildchain.alpha-contract-lock.json
buildchain-stable-contract-lock-path: buildchain.contract-lock.json
buildchain-contract-drift-issue-mode: compatible-and-breaking
Expand Down
8 changes: 8 additions & 0 deletions .gyp/libnode-entrypoint.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,11 @@ test('Linux ARM64 resolves the published platform package', () => {
assert.equal(loaded.exports.platform, 'linux-arm64');
assert.equal(loaded.exports.platformPackageName, '@kungfu-tech/libnode-linux-arm64');
});

test('macOS x64 resolves the published platform package', () => {
const loaded = loadEntrypoint('darwin', 'x64');

assert.deepEqual(loaded.loadedPackages, ['@kungfu-tech/libnode-darwin-x64']);
assert.equal(loaded.exports.platform, 'darwin-x64');
assert.equal(loaded.exports.platformPackageName, '@kungfu-tech/libnode-darwin-x64');
});
16 changes: 14 additions & 2 deletions .gyp/libnode-kfd-release-evidence.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,25 @@ test('KFD-3 prebuild witness mirrors every authoritative public surface', () =>

assert.deepEqual(witnessedSurfaceIds, authoritativeSurfaceIds);
assert.ok(witnessedSurfaceIds.includes('npm:platform-linux-arm64'));
assert.ok(witnessedSurfaceIds.includes('npm:platform-darwin-x64'));
assert.equal(prebuild.collaborationInterface.digest, prebuild.collaborationInterfaceDigest);
});

test('KFD-2 public release claim covers the four-platform package set', () => {
test('KFD-2 public release claim covers the five-platform package set', () => {
const trustClaim = readJson('.buildchain/kfd-2/public-release-trust.claim.json');
const artifactNames = trustClaim.artifacts.map(({ name }) => name);

assert.match(trustClaim.claim, /four-platform package set/);
assert.match(trustClaim.claim, /five-platform package set/);
assert.ok(artifactNames.includes('@kungfu-tech/libnode-linux-arm64'));
assert.ok(artifactNames.includes('@kungfu-tech/libnode-darwin-x64'));
});

test('Build and promotion workflows require the native macOS x64 artifact', () => {
const buildWorkflow = fs.readFileSync(path.join(repoRoot, '.github/workflows/build.yml'), 'utf8');
const releaseWorkflow = fs.readFileSync(path.join(repoRoot, '.github/workflows/release-new-version.yml'), 'utf8');

assert.match(buildWorkflow, /"id":"macos-x64"/);
assert.match(buildWorkflow, /"runner":"\[\\"macos-15-intel\\"\]"/);
assert.match(releaseWorkflow, /libnode-macos-x64-\*/);
assert.match(releaseWorkflow, /required-artifact-count: 5/);
});
15 changes: 12 additions & 3 deletions .gyp/libnode-kfd3-artifact-verify.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ const payloadRoot = path.resolve(

const packageNames = {
main: '@kungfu-tech/libnode',
darwin: '@kungfu-tech/libnode-darwin-arm64',
darwinArm64: '@kungfu-tech/libnode-darwin-arm64',
darwinX64: '@kungfu-tech/libnode-darwin-x64',
linuxX64: '@kungfu-tech/libnode-linux-x64',
linuxArm64: '@kungfu-tech/libnode-linux-arm64',
windows: '@kungfu-tech/libnode-win32-x64',
Expand Down Expand Up @@ -135,14 +136,16 @@ function main() {

const files = {
main: findPackageTarball(packageNames.main),
darwin: findPackageTarball(packageNames.darwin),
darwinArm64: findPackageTarball(packageNames.darwinArm64),
darwinX64: findPackageTarball(packageNames.darwinX64),
linuxX64: findPackageTarball(packageNames.linuxX64),
linuxArm64: findPackageTarball(packageNames.linuxArm64),
windows: findPackageTarball(packageNames.windows),
};

verifyMainPackage(files.main);
verifyDarwinPackage(files.darwin);
verifyDarwinPackage(files.darwinArm64);
verifyDarwinPackage(files.darwinX64);
verifyLinuxPackage(files.linuxX64);
verifyLinuxPackage(files.linuxArm64);
verifyWindowsPackage(files.windows);
Expand Down Expand Up @@ -188,6 +191,12 @@ function main() {
'platform-package',
'.gyp/node-platform-package.js',
),
surface(
'npm:platform-darwin-x64',
'@kungfu-tech/libnode-darwin-x64 package',
'platform-package',
'.gyp/node-platform-package.js',
),
surface(
'npm:platform-linux-x64',
'@kungfu-tech/libnode-linux-x64 package',
Expand Down
8 changes: 8 additions & 0 deletions .gyp/node-platform-package.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ const platformPackages = [
binaries: ['libnode*.dylib'],
aliases: [{ source: 'libnode.*.dylib', match: '^libnode\\.\\d+\\.dylib$', target: 'libnode.dylib' }],
},
{
key: 'darwin-x64',
name: '@kungfu-tech/libnode-darwin-x64',
os: ['darwin'],
cpu: ['x64'],
binaries: ['libnode*.dylib'],
aliases: [{ source: 'libnode.*.dylib', match: '^libnode\\.\\d+\\.dylib$', target: 'libnode.dylib' }],
},
{
key: 'linux-x64',
name: '@kungfu-tech/libnode-linux-x64',
Expand Down
4 changes: 4 additions & 0 deletions .gyp/npm-publish-tarballs.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ const platformPackageRequirements = {
binaries: [/^package\/dist\/node\/libnode\.\d+\.dylib$/],
aliases: [{ target: 'package/dist/node/libnode.dylib', helper: 'package/ensure-libnode-aliases.js' }],
},
'@kungfu-tech/libnode-darwin-x64': {
binaries: [/^package\/dist\/node\/libnode\.\d+\.dylib$/],
aliases: [{ target: 'package/dist/node/libnode.dylib', helper: 'package/ensure-libnode-aliases.js' }],
},
'@kungfu-tech/libnode-linux-x64': {
binaries: [/^package\/dist\/node\/libnode\.so\.\d+$/],
aliases: [{ target: 'package/dist/node/libnode.so', helper: 'package/ensure-libnode-aliases.js' }],
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ npm install @kungfu-tech/libnode

The main package resolves the matching platform package installed through npm
optional dependencies, such as `@kungfu-tech/libnode-darwin-arm64`,
`@kungfu-tech/libnode-linux-x64`, `@kungfu-tech/libnode-linux-arm64`, or
`@kungfu-tech/libnode-win32-x64`.
`@kungfu-tech/libnode-darwin-x64`, `@kungfu-tech/libnode-linux-x64`,
`@kungfu-tech/libnode-linux-arm64`, or `@kungfu-tech/libnode-win32-x64`.

### Compile and Link

Expand All @@ -35,6 +35,8 @@ The `Build` workflow runs through Kungfu Buildchain and builds the Node.js versi
Linux ARM64 is built on the native GitHub-hosted `ubuntu-24.04-arm` runner and
participates in the same source lock, artifact summary, and release passport as
the other supported platforms.
macOS x64 is built natively on GitHub-hosted `macos-15-intel`; Rosetta
observation is not accepted as x64 package evidence.

Npm publication is handled by Buildchain release-candidate promotion. Reviewed
channel PRs build the release candidate once and upload the platform package
Expand Down
Loading
Loading