fix: add OpenClaw dogfood gateway build
What:\n- expose temporary dogfood package outputs pinned to an upstream OpenClaw commit with the Nix-mode fixes merged\n- let source pins disable downstream patches that are already upstream\n- build current upstream plugin assets through upstream asset hooks, while keeping the 2026.5.7 path working\n- supply the fs-safe Git dependency as an immutable Nix source for the dogfood build\n\nWhy:\n- private deployments need to dogfood upstream fixes before the next OpenClaw release without making the published stable package depend on runtime npm work\n\nTests:\n- remote Mac mini: nix build --accept-flake-config .#openclaw-gateway-dogfood --no-link\n- remote Mac mini: nix build --accept-flake-config .#openclaw-dogfood --no-link\n- remote Mac mini: nix build --accept-flake-config .#checks.aarch64-darwin.default-instance --no-link\n- remote Mac mini: nix build --accept-flake-config .#checks.aarch64-darwin.package-contents --no-link\n\nCo-authored-by: Codex <noreply@openai.com>
This commit is contained in:
parent
11d69d8a1c
commit
26c58273e7
@ -45,6 +45,7 @@
|
|||||||
qmdPkgs = qmdPkgsFor prev.stdenv.hostPlatform.system;
|
qmdPkgs = qmdPkgsFor prev.stdenv.hostPlatform.system;
|
||||||
} final prev;
|
} final prev;
|
||||||
sourceInfoStable = import ./nix/sources/openclaw-source.nix;
|
sourceInfoStable = import ./nix/sources/openclaw-source.nix;
|
||||||
|
sourceInfoDogfood = import ./nix/sources/openclaw-dogfood-source.nix;
|
||||||
systems = [
|
systems = [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
"aarch64-darwin"
|
"aarch64-darwin"
|
||||||
@ -70,6 +71,12 @@
|
|||||||
openclawToolPkgs = openclawToolPkgs;
|
openclawToolPkgs = openclawToolPkgs;
|
||||||
inherit qmdPackage;
|
inherit qmdPackage;
|
||||||
};
|
};
|
||||||
|
packageSetDogfood = import ./nix/packages {
|
||||||
|
pkgs = pkgs;
|
||||||
|
sourceInfo = sourceInfoDogfood;
|
||||||
|
openclawToolPkgs = openclawToolPkgs;
|
||||||
|
inherit qmdPackage;
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
formatter = pkgs.nixfmt-tree.override {
|
formatter = pkgs.nixfmt-tree.override {
|
||||||
@ -80,6 +87,8 @@
|
|||||||
|
|
||||||
packages = packageSetStable // {
|
packages = packageSetStable // {
|
||||||
default = packageSetStable.openclaw;
|
default = packageSetStable.openclaw;
|
||||||
|
openclaw-dogfood = packageSetDogfood.openclaw;
|
||||||
|
openclaw-gateway-dogfood = packageSetDogfood.openclaw-gateway;
|
||||||
};
|
};
|
||||||
|
|
||||||
apps = {
|
apps = {
|
||||||
|
|||||||
@ -6,6 +6,10 @@ builds:
|
|||||||
# User-facing/component packages must also be top-level Garnix artifacts,
|
# User-facing/component packages must also be top-level Garnix artifacts,
|
||||||
# otherwise downstream machines can see green CI but miss the binary cache.
|
# otherwise downstream machines can see green CI but miss the binary cache.
|
||||||
- "packages.aarch64-darwin.openclaw"
|
- "packages.aarch64-darwin.openclaw"
|
||||||
|
- "packages.aarch64-darwin.openclaw-dogfood"
|
||||||
- "packages.aarch64-darwin.openclaw-gateway"
|
- "packages.aarch64-darwin.openclaw-gateway"
|
||||||
|
- "packages.aarch64-darwin.openclaw-gateway-dogfood"
|
||||||
- "packages.x86_64-linux.openclaw"
|
- "packages.x86_64-linux.openclaw"
|
||||||
|
- "packages.x86_64-linux.openclaw-dogfood"
|
||||||
- "packages.x86_64-linux.openclaw-gateway"
|
- "packages.x86_64-linux.openclaw-gateway"
|
||||||
|
- "packages.x86_64-linux.openclaw-gateway-dogfood"
|
||||||
|
|||||||
@ -8,6 +8,9 @@ This repo ships a working Nix package for OpenClaw users, not just a pin mirror.
|
|||||||
- `openclaw-gateway` is the source-built runnable gateway for Linux and macOS.
|
- `openclaw-gateway` is the source-built runnable gateway for Linux and macOS.
|
||||||
- `openclaw-app` is the Darwin-only desktop app from upstream's public app artifact.
|
- `openclaw-app` is the Darwin-only desktop app from upstream's public app artifact.
|
||||||
- Component outputs exist for modules, checks, and debugging. They are not separate product tracks.
|
- Component outputs exist for modules, checks, and debugging. They are not separate product tracks.
|
||||||
|
- `openclaw-dogfood` and `openclaw-gateway-dogfood` are temporary maintainer
|
||||||
|
artifacts for testing a specific upstream commit before the next stable
|
||||||
|
release. They must not become the documented consumer default.
|
||||||
- Do not split the repo into separate desktop and server tracks.
|
- Do not split the repo into separate desktop and server tracks.
|
||||||
|
|
||||||
## Nix Ownership
|
## Nix Ownership
|
||||||
|
|||||||
@ -38,6 +38,9 @@ let
|
|||||||
"pnpmDepsHash"
|
"pnpmDepsHash"
|
||||||
"releaseTag"
|
"releaseTag"
|
||||||
"releaseVersion"
|
"releaseVersion"
|
||||||
|
"applyPublicSurfaceHardlinksPatch"
|
||||||
|
"applySkipPluginAutoEnableNixModePatch"
|
||||||
|
"fsSafeSource"
|
||||||
];
|
];
|
||||||
|
|
||||||
# Prefer nixpkgs' platform mapping instead of hand-rolled arch/platform.
|
# Prefer nixpkgs' platform mapping instead of hand-rolled arch/platform.
|
||||||
@ -55,6 +58,8 @@ let
|
|||||||
else
|
else
|
||||||
fetchFromGitHub sourceFetch;
|
fetchFromGitHub sourceFetch;
|
||||||
|
|
||||||
|
fsSafeSource = if sourceInfo ? fsSafeSource then fetchFromGitHub sourceInfo.fsSafeSource else null;
|
||||||
|
|
||||||
nodeAddonApi = import ../packages/node-addon-api.nix { inherit stdenv fetchurl; };
|
nodeAddonApi = import ../packages/node-addon-api.nix { inherit stdenv fetchurl; };
|
||||||
|
|
||||||
pnpmDeps = fetchPnpmDeps {
|
pnpmDeps = fetchPnpmDeps {
|
||||||
@ -81,11 +86,22 @@ let
|
|||||||
NODE_GYP_WRAPPER_SH = "${../scripts/node-gyp-wrapper.sh}";
|
NODE_GYP_WRAPPER_SH = "${../scripts/node-gyp-wrapper.sh}";
|
||||||
GATEWAY_PREBUILD_SH = "${../scripts/gateway-prebuild.sh}";
|
GATEWAY_PREBUILD_SH = "${../scripts/gateway-prebuild.sh}";
|
||||||
PATCH_BUNDLED_RUNTIME_DEPS_SCRIPT = "${../patches/stage-bundled-plugin-runtime-deps.mjs}";
|
PATCH_BUNDLED_RUNTIME_DEPS_SCRIPT = "${../patches/stage-bundled-plugin-runtime-deps.mjs}";
|
||||||
PATCH_PUBLIC_SURFACE_HARDLINKS = "${../patches/allow-package-public-surface-hardlinks.patch}";
|
PATCH_PUBLIC_SURFACE_HARDLINKS =
|
||||||
PATCH_SKIP_PLUGIN_AUTO_ENABLE_NIX_MODE = "${../patches/skip-plugin-auto-enable-persist-in-nix-mode.patch}";
|
if sourceInfo.applyPublicSurfaceHardlinksPatch or true then
|
||||||
|
"${../patches/allow-package-public-surface-hardlinks.patch}"
|
||||||
|
else
|
||||||
|
"";
|
||||||
|
PATCH_SKIP_PLUGIN_AUTO_ENABLE_NIX_MODE =
|
||||||
|
if sourceInfo.applySkipPluginAutoEnableNixModePatch or true then
|
||||||
|
"${../patches/skip-plugin-auto-enable-persist-in-nix-mode.patch}"
|
||||||
|
else
|
||||||
|
"";
|
||||||
PROMOTE_PNPM_INTEGRITY_SH = "${../scripts/promote-pnpm-integrity.sh}";
|
PROMOTE_PNPM_INTEGRITY_SH = "${../scripts/promote-pnpm-integrity.sh}";
|
||||||
REMOVE_PACKAGE_MANAGER_FIELD_SH = "${../scripts/remove-package-manager-field.sh}";
|
REMOVE_PACKAGE_MANAGER_FIELD_SH = "${../scripts/remove-package-manager-field.sh}";
|
||||||
STDENV_SETUP = "${stdenv}/setup";
|
STDENV_SETUP = "${stdenv}/setup";
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (fsSafeSource != null) {
|
||||||
|
OPENCLAW_FS_SAFE_SOURCE = fsSafeSource;
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|||||||
@ -72,16 +72,29 @@ fi
|
|||||||
|
|
||||||
log_step "patchShebangs node_modules/.bin" bash -e -c ". \"$STDENV_SETUP\"; patchShebangs node_modules/.bin"
|
log_step "patchShebangs node_modules/.bin" bash -e -c ". \"$STDENV_SETUP\"; patchShebangs node_modules/.bin"
|
||||||
|
|
||||||
|
# Git tarball dependencies do not get their npm prepack output in offline Nix
|
||||||
|
# builds. OpenClaw currently depends on @openclaw/fs-safe this way.
|
||||||
|
if [ -n "${OPENCLAW_FS_SAFE_SOURCE:-}" ] && [ ! -d "node_modules/@openclaw/fs-safe/dist" ]; then
|
||||||
|
rm -rf node_modules/@openclaw/fs-safe
|
||||||
|
mkdir -p node_modules/@openclaw
|
||||||
|
cp -R "$OPENCLAW_FS_SAFE_SOURCE" node_modules/@openclaw/fs-safe
|
||||||
|
chmod -R u+w node_modules/@openclaw/fs-safe
|
||||||
|
log_step "build dependency: @openclaw/fs-safe" pnpm exec tsc -p node_modules/@openclaw/fs-safe/tsconfig.json
|
||||||
|
fi
|
||||||
|
|
||||||
# Ensure rolldown is found from workspace bins in offline/sandbox builds.
|
# Ensure rolldown is found from workspace bins in offline/sandbox builds.
|
||||||
if [ -d "node_modules/.pnpm/node_modules/.bin" ]; then
|
if [ -d "node_modules/.pnpm/node_modules/.bin" ]; then
|
||||||
export PATH="$PWD/node_modules/.pnpm/node_modules/.bin:$PATH"
|
export PATH="$PWD/node_modules/.pnpm/node_modules/.bin:$PATH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Break down `pnpm build` (upstream package.json) so we can profile it.
|
# Break down `pnpm build` (upstream package.json) so we can profile it while
|
||||||
# Upstream's bundle-a2ui script shells back out through pnpm-runner.
|
# still using upstream's asset hooks. v2026.5.7 has the older canvas-only helper;
|
||||||
# In Nix builds that nested spawn can fail silently, so run the same steps directly.
|
# newer OpenClaw has the generic bundled-plugin asset runner.
|
||||||
log_step "build: canvas:a2ui:tsc" pnpm exec tsc -p vendor/a2ui/renderers/lit/tsconfig.json
|
if [ -f "scripts/bundled-plugin-assets.mjs" ]; then
|
||||||
log_step "build: canvas:a2ui:rolldown" node node_modules/rolldown/bin/cli.mjs -c apps/shared/OpenClawKit/Tools/CanvasA2UI/rolldown.config.mjs
|
log_step "build: plugins:assets:build" node scripts/bundled-plugin-assets.mjs --phase build
|
||||||
|
else
|
||||||
|
log_step "build: canvas:a2ui:bundle" node scripts/bundle-a2ui.mjs
|
||||||
|
fi
|
||||||
log_step "build: tsdown" pnpm exec tsdown
|
log_step "build: tsdown" pnpm exec tsdown
|
||||||
log_step "build: runtime-postbuild" node scripts/runtime-postbuild.mjs
|
log_step "build: runtime-postbuild" node scripts/runtime-postbuild.mjs
|
||||||
if [ -f "scripts/stage-bundled-plugin-runtime.mjs" ]; then
|
if [ -f "scripts/stage-bundled-plugin-runtime.mjs" ]; then
|
||||||
@ -95,7 +108,11 @@ fi
|
|||||||
if [ -f "scripts/copy-bundled-plugin-metadata.mjs" ]; then
|
if [ -f "scripts/copy-bundled-plugin-metadata.mjs" ]; then
|
||||||
log_step "build: copy-bundled-plugin-metadata" node scripts/copy-bundled-plugin-metadata.mjs
|
log_step "build: copy-bundled-plugin-metadata" node scripts/copy-bundled-plugin-metadata.mjs
|
||||||
fi
|
fi
|
||||||
log_step "build: canvas-a2ui-copy" node --import tsx scripts/canvas-a2ui-copy.ts
|
if [ -f "scripts/bundled-plugin-assets.mjs" ]; then
|
||||||
|
log_step "build: plugins:assets:copy" node scripts/bundled-plugin-assets.mjs --phase copy
|
||||||
|
else
|
||||||
|
log_step "build: canvas-a2ui-copy" node --import tsx scripts/canvas-a2ui-copy.ts
|
||||||
|
fi
|
||||||
log_step "build: copy-hook-metadata" node --import tsx scripts/copy-hook-metadata.ts
|
log_step "build: copy-hook-metadata" node --import tsx scripts/copy-hook-metadata.ts
|
||||||
log_step "build: write-build-info" node --import tsx scripts/write-build-info.ts
|
log_step "build: write-build-info" node --import tsx scripts/write-build-info.ts
|
||||||
log_step "build: write-cli-compat" node --import tsx scripts/write-cli-compat.ts
|
log_step "build: write-cli-compat" node --import tsx scripts/write-cli-compat.ts
|
||||||
|
|||||||
17
nix/sources/openclaw-dogfood-source.nix
Normal file
17
nix/sources/openclaw-dogfood-source.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
owner = "openclaw";
|
||||||
|
repo = "openclaw";
|
||||||
|
releaseVersion = "2026.5.7-dogfood.20260508";
|
||||||
|
rev = "954d20ece2de0fba3688f7800613183fbeb9685c";
|
||||||
|
hash = "sha256-6CZWsH8dV6XZ4JeG5ItKLqGAOFqbzWosyCmMXVc+c/g=";
|
||||||
|
pnpmDepsHash = "sha256-hNZA1OEuJgtoLz2hWLPk8Hm+7heLvhiZpDdBBQ1UXpc=";
|
||||||
|
fsSafeSource = {
|
||||||
|
owner = "openclaw";
|
||||||
|
repo = "fs-safe";
|
||||||
|
rev = "c7ccb99d3058f2acf2ad2758ad2470c7e113a53c";
|
||||||
|
hash = "sha256-jndOOSSFROyrK4RiwAsJfUuCJTj7qbmmm4Qz8BqtJ/c=";
|
||||||
|
};
|
||||||
|
|
||||||
|
applyPublicSurfaceHardlinksPatch = false;
|
||||||
|
applySkipPluginAutoEnableNixModePatch = false;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user