diff --git a/.agents/skills/release-openclaw-ci/SKILL.md b/.agents/skills/release-openclaw-ci/SKILL.md index 1e15c19ee841..5f93e8d5988d 100644 --- a/.agents/skills/release-openclaw-ci/SKILL.md +++ b/.agents/skills/release-openclaw-ci/SKILL.md @@ -129,13 +129,13 @@ publish workflow reads the effective profile from the full-validation manifest. Use the transition-only summary watcher instead of repeated raw polling: ```bash -node .agents/skills/release-openclaw-ci/scripts/release-ci-summary.mjs --watch +node scripts/release-ci-summary.mjs --watch ``` For a one-shot snapshot: ```bash -node .agents/skills/release-openclaw-ci/scripts/release-ci-summary.mjs +node scripts/release-ci-summary.mjs ``` Stop watchers before ending the turn or switching strategy. diff --git a/scripts/github/find-reusable-release-validation.sh b/scripts/github/find-reusable-release-validation.sh index e4ea54b4283e..543b43142458 100755 --- a/scripts/github/find-reusable-release-validation.sh +++ b/scripts/github/find-reusable-release-validation.sh @@ -19,7 +19,7 @@ GITHUB_OUTPUT_FILE="${GITHUB_OUTPUT:-}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PREFLIGHT="${SCRIPT_DIR}/../release-preflight.mjs" REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" -VALIDATOR="${OPENCLAW_RELEASE_CI_SUMMARY_VALIDATOR:-${REPO_ROOT}/.agents/skills/release-openclaw-ci/scripts/release-ci-summary.mjs}" +VALIDATOR="${OPENCLAW_RELEASE_CI_SUMMARY_VALIDATOR:-${REPO_ROOT}/scripts/release-ci-summary.mjs}" usage() { cat >&2 <<'EOF' diff --git a/.agents/skills/release-openclaw-ci/scripts/release-ci-summary.mjs b/scripts/release-ci-summary.mjs old mode 100755 new mode 100644 similarity index 99% rename from .agents/skills/release-openclaw-ci/scripts/release-ci-summary.mjs rename to scripts/release-ci-summary.mjs index 7a43f0f047b0..d10ad54545c9 --- a/.agents/skills/release-openclaw-ci/scripts/release-ci-summary.mjs +++ b/scripts/release-ci-summary.mjs @@ -10,14 +10,14 @@ import { tmpdir } from "node:os"; import { dirname, join, resolve } from "node:path"; import process from "node:process"; import { fileURLToPath } from "node:url"; -import { plainGhEnv, resolvePlainGhBin } from "../../../../scripts/lib/plain-gh.mjs"; +import { plainGhEnv, resolvePlainGhBin } from "./lib/plain-gh.mjs"; const DEFAULT_REPO = process.env.OPENCLAW_RELEASE_REPO || "openclaw/openclaw"; const RELEASE_EVIDENCE_SCHEMA = "openclaw.release-validation-evidence/v3"; const SHA_PINNED_BRANCH_PATTERN = /^release-ci\/[a-f0-9]{12}-[1-9][0-9]*$/u; -const RELEASE_EVIDENCE_SCRIPT = ".agents/skills/release-openclaw-ci/scripts/release-ci-summary.mjs"; +const RELEASE_EVIDENCE_SCRIPT = "scripts/release-ci-summary.mjs"; const RELEASE_EVIDENCE_FILE = fileURLToPath(import.meta.url); -const RELEASE_EVIDENCE_REPO_ROOT = resolve(dirname(RELEASE_EVIDENCE_FILE), "../../../.."); +const RELEASE_EVIDENCE_REPO_ROOT = resolve(dirname(RELEASE_EVIDENCE_FILE), ".."); const MANIFEST_ARTIFACT_ENTRY = "full-release-validation-manifest.json"; const MAX_MANIFEST_ARTIFACT_ZIP_BYTES = 256 * 1024; const MAX_MANIFEST_JSON_BYTES = 128 * 1024; diff --git a/test/scripts/find-reusable-release-validation.test.ts b/test/scripts/find-reusable-release-validation.test.ts index 24c8da630e36..d72777c62c44 100644 --- a/test/scripts/find-reusable-release-validation.test.ts +++ b/test/scripts/find-reusable-release-validation.test.ts @@ -310,7 +310,7 @@ function normalizedEvidence(options: { validationInputs, verifier: { schemaVersion: 3, - script: ".agents/skills/release-openclaw-ci/scripts/release-ci-summary.mjs", + script: "scripts/release-ci-summary.mjs", scriptSha256: "b".repeat(64), sourceSha: options.verifierSha === undefined ? VERIFIER_SHA : options.verifierSha, }, diff --git a/test/scripts/release-ci-summary.test.ts b/test/scripts/release-ci-summary.test.ts index fe43678318dd..d6378931a49f 100644 --- a/test/scripts/release-ci-summary.test.ts +++ b/test/scripts/release-ci-summary.test.ts @@ -2,7 +2,7 @@ import { execFileSync } from "node:child_process"; import { createHash } from "node:crypto"; import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; -import { join, resolve } from "node:path"; +import { dirname, join, resolve } from "node:path"; import { pathToFileURL } from "node:url"; import { describe, expect, it } from "vitest"; import { @@ -29,9 +29,9 @@ import { validateReleaseRunEvidence, validateTrustedProducerIdentity, watchReleaseCiRun, -} from "../../.agents/skills/release-openclaw-ci/scripts/release-ci-summary.mjs"; +} from "../../scripts/release-ci-summary.mjs"; -const SCRIPT = ".agents/skills/release-openclaw-ci/scripts/release-ci-summary.mjs"; +const SCRIPT = "scripts/release-ci-summary.mjs"; const MANIFEST_ARTIFACT_ENTRY = "full-release-validation-manifest.json"; function crc32(input: Buffer): number { @@ -896,9 +896,7 @@ describe("release CI summary child correlation", () => { const outsideCwd = mkdtempSync(join(tmpdir(), "release-verifier-cwd-")); try { const scriptPath = join(repositoryRoot, SCRIPT); - mkdirSync(join(repositoryRoot, ".agents/skills/release-openclaw-ci/scripts"), { - recursive: true, - }); + mkdirSync(dirname(scriptPath), { recursive: true }); writeFileSync(scriptPath, readFileSync(SCRIPT)); execFileSync("git", ["init", "-q"], { cwd: repositoryRoot }); execFileSync("git", ["add", SCRIPT], { cwd: repositoryRoot });