diff --git a/scripts/plugin-clawhub-publish.sh b/scripts/plugin-clawhub-publish.sh index e7c6202ba884..7961e60ec840 100644 --- a/scripts/plugin-clawhub-publish.sh +++ b/scripts/plugin-clawhub-publish.sh @@ -4,6 +4,9 @@ set -euo pipefail mode="${1:-}" package_dir="${2:-}" +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +repo_root="$(cd "${script_dir}/.." && pwd)" +invocation_root="$(pwd)" if [[ "${mode}" != "--dry-run" && "${mode}" != "--publish" ]]; then echo "usage: bash scripts/plugin-clawhub-publish.sh [--dry-run|--publish] " >&2 @@ -20,7 +23,9 @@ if [[ ! "${package_dir}" =~ ^extensions/[a-z0-9][a-z0-9._-]*$ ]]; then exit 2 fi -if [[ ! -f "${package_dir}/package.json" ]]; then +package_source="${invocation_root}/${package_dir}" + +if [[ ! -f "${package_source}/package.json" ]]; then echo "package.json not found under ${package_dir}" >&2 exit 2 fi @@ -30,20 +35,13 @@ if ! command -v clawhub >/dev/null 2>&1; then exit 1 fi -script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -repo_root="$(cd "${script_dir}/.." && pwd)" -package_name="$(node -e 'const pkg = require(require("node:path").resolve(process.argv[1], "package.json")); console.log(pkg.name)' "${package_dir}")" -package_version="$(node -e 'const pkg = require(require("node:path").resolve(process.argv[1], "package.json")); console.log(pkg.version)' "${package_dir}")" +package_name="$(node -e 'const pkg = require(require("node:path").resolve(process.argv[1], "package.json")); console.log(pkg.name)' "${package_source}")" +package_version="$(node -e 'const pkg = require(require("node:path").resolve(process.argv[1], "package.json")); console.log(pkg.version)' "${package_source}")" publish_tag="${PACKAGE_TAG:-latest}" source_repo="${SOURCE_REPO:-${GITHUB_REPOSITORY:-openclaw/openclaw}}" -source_commit="${SOURCE_COMMIT:-$(git rev-parse HEAD)}" -source_ref="${SOURCE_REF:-$(git symbolic-ref -q HEAD || true)}" -clawhub_workdir="${CLAWDHUB_WORKDIR:-${CLAWHUB_WORKDIR:-$(pwd)}}" -package_source="${package_dir}" - -if [[ "${package_source}" != /* && "${package_source}" != ./* ]]; then - package_source="./${package_source}" -fi +source_commit="${SOURCE_COMMIT:-$(git -C "${invocation_root}" rev-parse HEAD)}" +source_ref="${SOURCE_REF:-$(git -C "${invocation_root}" symbolic-ref -q HEAD || true)}" +clawhub_workdir="${CLAWDHUB_WORKDIR:-${CLAWHUB_WORKDIR:-${invocation_root}}}" pack_dir="$(mktemp -d "${RUNNER_TEMP:-/tmp}/openclaw-clawhub-pack.XXXXXX")" cleanup() { @@ -53,6 +51,8 @@ trap cleanup EXIT pack_cmd=( clawhub + --workdir + "${clawhub_workdir}" package pack "${package_source}" @@ -121,6 +121,8 @@ fi publish_cmd=( clawhub + --workdir + "${clawhub_workdir}" package publish "${pack_path}" diff --git a/test/plugin-clawhub-release.test.ts b/test/plugin-clawhub-release.test.ts index 78517839a6d4..009c081bf54f 100644 --- a/test/plugin-clawhub-release.test.ts +++ b/test/plugin-clawhub-release.test.ts @@ -1,5 +1,5 @@ import { execFileSync } from "node:child_process"; -import { chmodSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; +import { chmodSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from "node:fs"; import { delimiter, join } from "node:path"; import { afterEach, describe, expect, it } from "vitest"; import { @@ -425,6 +425,9 @@ describe("plugin-clawhub-publish.sh", () => { `#!/usr/bin/env bash set -euo pipefail printf '%s\\n' "$*" >> ${JSON.stringify(markerPath)} +if [[ "\${1:-}" == "--workdir" ]]; then + shift 2 +fi if [[ "\${1:-}" == "package" && "\${2:-}" == "pack" ]]; then pack_destination="" while [[ "$#" -gt 0 ]]; do @@ -469,7 +472,11 @@ exit 0 expect(output).toContain("Publish command: CLAWHUB_WORKDIR="); expect(output).toContain("Resolved ClawPack:"); const invocations = readFileSync(markerPath, "utf8"); - expect(invocations).toContain("package pack ./extensions/demo-plugin"); + const resolvedRepoDir = realpathSync(repoDir); + expect(invocations).toContain(`--workdir ${resolvedRepoDir}`); + expect(invocations).toContain( + `package pack ${join(resolvedRepoDir, "extensions/demo-plugin")}`, + ); expect(invocations).toContain("package publish "); expect(invocations).toContain(".tgz --tags latest"); expect(invocations).toContain("--dry-run");