Files
maka/scripts/apply-dependency-patches.mjs
agent-radar 7be535059e
Dependency audit / audit (push) Canceled after 0s
CI / plan (push) Canceled after 0s
Gitoxide helper admission / macos-latest (push) Canceled after 0s
Gitoxide helper admission / ubuntu-latest (push) Canceled after 0s
Gitoxide helper admission / windows-latest (push) Canceled after 0s
Runtime Host peer admission / quality (push) Canceled after 0s
Windows recovery / windows_recovery (push) Canceled after 0s
CI / heavy (push) Canceled after 0s
CI / test (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 19:05:14 +08:00

63 lines
2.4 KiB
JavaScript

#!/usr/bin/env node
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// Applies patches/ during the root postinstall.
//
// patch-package is a root devDependency, so `npm ci --workspace <name>` and
// `npm ci --omit=dev` install a tree without it while still running the root
// postinstall. Failing there would break install modes that work on main, so a
// missing patch-package is reported and skipped; a patch that exists but no
// longer applies still fails the install via --error-on-fail.
//
// Skipping is safe because those trees are not what ships: every release and CI
// lane runs a plain root `npm ci`, and an unpatched tree turns
// packages/runtime/src/__tests__/model-factory-tool-call-index.test.ts red.
import { spawnSync } from 'node:child_process';
import { existsSync, readdirSync } from 'node:fs';
import { createRequire } from 'node:module';
import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
const repoRoot = dirname(dirname(fileURLToPath(import.meta.url)));
const patchesDirectory = join(repoRoot, 'patches');
if (
!existsSync(patchesDirectory) ||
!readdirSync(patchesDirectory).some((entry) => entry.endsWith('.patch'))
) {
process.exit(0);
}
let patchPackageEntry;
try {
patchPackageEntry = createRequire(import.meta.url).resolve('patch-package/index.js');
} catch {
console.warn(
'patch-package is not installed; skipping patches/. Run a plain `npm ci` from the repo root before building or packaging.',
);
process.exit(0);
}
const result = spawnSync(process.execPath, [patchPackageEntry, '--error-on-fail'], {
cwd: repoRoot,
stdio: 'inherit',
});
process.exit(result.status ?? 1);