Vendor OpenClaw source as Adolf fork baseline
Some checks failed
ClawSweeper Dispatch / dispatch (push) Has been cancelled
CodeQL / Security High (actions) (push) Has been cancelled
CodeQL / Security High (channel-runtime-boundary) (push) Has been cancelled
CodeQL / Security High (core-auth-secrets) (push) Has been cancelled
CodeQL / Security High (mcp-process-tool-boundary) (push) Has been cancelled
CodeQL / Security High (network-ssrf-boundary) (push) Has been cancelled
CodeQL / Security High (plugin-trust-boundary) (push) Has been cancelled
CodeQL / Security High (process-exec-boundary) (push) Has been cancelled
Docs Sync Publish Repo / sync-publish-repo (push) Has been cancelled
Docs / docs (push) Has been cancelled
OpenClaw Stable Main Closeout / Resolve stable release closeout inputs (push) Has been cancelled
OpenClaw Stable Main Closeout / Verify stable main closeout (push) Has been cancelled
Workflow Sanity / no-tabs (push) Has been cancelled
Workflow Sanity / actionlint (push) Has been cancelled
Workflow Sanity / generated-doc-baselines (push) Has been cancelled
CI / runner-admission (push) Has been cancelled
CI / preflight (push) Has been cancelled
CI / security-fast (push) Has been cancelled
CI / pnpm-store-warmup (push) Has been cancelled
CI / build-artifacts (push) Has been cancelled
CI / native-i18n (push) Has been cancelled
CI / ${{ matrix.check_name }} (push) Has been cancelled
CI / ${{ matrix.checkName }} (push) Has been cancelled
CI / checks-node-compat-node22 (push) Has been cancelled
CI / check-bundled-channel-config-metadata (push) Has been cancelled
CI / check-dependencies (push) Has been cancelled
CI / check-guards (push) Has been cancelled
CI / check-lint (push) Has been cancelled
CI / check-prod-types (push) Has been cancelled
CI / check-shrinkwrap (push) Has been cancelled
CI / check-test-types (push) Has been cancelled
CI / check-additional-boundaries-a (push) Has been cancelled
CI / check-additional-boundaries-bcd (push) Has been cancelled
CI / check-additional-extension-bundled (push) Has been cancelled
CI / check-additional-extension-channels (push) Has been cancelled
CI / check-additional-extension-package-boundary (push) Has been cancelled
CI / check-additional-runtime-topology-architecture (push) Has been cancelled
CI / check-session-accessor-boundary (push) Has been cancelled
CI / check-session-transcript-reader-boundary (push) Has been cancelled
CI / check-docs (push) Has been cancelled
CI / skills-python (push) Has been cancelled
CI / macos-swift (push) Has been cancelled
CI / ios-build (push) Has been cancelled
CI / ci-timings-summary (push) Has been cancelled
Native App Locale Refresh / Refresh native fa (push) Has been cancelled
Native App Locale Refresh / Refresh native fr (push) Has been cancelled
Native App Locale Refresh / Refresh native hi (push) Has been cancelled
Native App Locale Refresh / Refresh native id (push) Has been cancelled
Native App Locale Refresh / Refresh native it (push) Has been cancelled
Native App Locale Refresh / Refresh native ja-JP (push) Has been cancelled
Control UI Locale Refresh / plan (push) Has been cancelled
Control UI Locale Refresh / Refresh ${{ matrix.locale }} (push) Has been cancelled
Control UI Locale Refresh / Commit control UI locale refresh (push) Has been cancelled
Live Media Runner Image / Build live media runner image (push) Has been cancelled
Native App Locale Refresh / Refresh native ar (push) Has been cancelled
Native App Locale Refresh / Refresh native de (push) Has been cancelled
Native App Locale Refresh / Refresh native es (push) Has been cancelled
Native App Locale Refresh / Refresh native ko (push) Has been cancelled
Native App Locale Refresh / Refresh native nl (push) Has been cancelled
Native App Locale Refresh / Refresh native pl (push) Has been cancelled
Native App Locale Refresh / Refresh native pt-BR (push) Has been cancelled
Native App Locale Refresh / Refresh native ru (push) Has been cancelled
Native App Locale Refresh / Refresh native sv (push) Has been cancelled
Native App Locale Refresh / Refresh native th (push) Has been cancelled
Native App Locale Refresh / Refresh native tr (push) Has been cancelled
Native App Locale Refresh / Refresh native uk (push) Has been cancelled
Native App Locale Refresh / Refresh native vi (push) Has been cancelled
Native App Locale Refresh / Refresh native zh-CN (push) Has been cancelled
Native App Locale Refresh / Refresh native zh-TW (push) Has been cancelled
Native App Locale Refresh / Commit native locale refresh (push) Has been cancelled
Plugin Init Scaffold Validation / Validate provider scaffold (push) Has been cancelled
Plugin NPM Release / preview_plugins_npm (push) Has been cancelled
Plugin NPM Release / Validate release publish approval (push) Has been cancelled
Plugin NPM Release / preview_plugin_pack (push) Has been cancelled
Plugin NPM Release / publish_plugins_npm (push) Has been cancelled
Sandbox Common Smoke / sandbox-common-smoke (push) Has been cancelled
Website Installer Sync / static (push) Has been cancelled
Website Installer Sync / linux-docker (push) Has been cancelled
Website Installer Sync / macos-installer (push) Has been cancelled
Website Installer Sync / windows-installer (push) Has been cancelled
Website Installer Sync / sync-website (push) Has been cancelled
Some checks failed
ClawSweeper Dispatch / dispatch (push) Has been cancelled
CodeQL / Security High (actions) (push) Has been cancelled
CodeQL / Security High (channel-runtime-boundary) (push) Has been cancelled
CodeQL / Security High (core-auth-secrets) (push) Has been cancelled
CodeQL / Security High (mcp-process-tool-boundary) (push) Has been cancelled
CodeQL / Security High (network-ssrf-boundary) (push) Has been cancelled
CodeQL / Security High (plugin-trust-boundary) (push) Has been cancelled
CodeQL / Security High (process-exec-boundary) (push) Has been cancelled
Docs Sync Publish Repo / sync-publish-repo (push) Has been cancelled
Docs / docs (push) Has been cancelled
OpenClaw Stable Main Closeout / Resolve stable release closeout inputs (push) Has been cancelled
OpenClaw Stable Main Closeout / Verify stable main closeout (push) Has been cancelled
Workflow Sanity / no-tabs (push) Has been cancelled
Workflow Sanity / actionlint (push) Has been cancelled
Workflow Sanity / generated-doc-baselines (push) Has been cancelled
CI / runner-admission (push) Has been cancelled
CI / preflight (push) Has been cancelled
CI / security-fast (push) Has been cancelled
CI / pnpm-store-warmup (push) Has been cancelled
CI / build-artifacts (push) Has been cancelled
CI / native-i18n (push) Has been cancelled
CI / ${{ matrix.check_name }} (push) Has been cancelled
CI / ${{ matrix.checkName }} (push) Has been cancelled
CI / checks-node-compat-node22 (push) Has been cancelled
CI / check-bundled-channel-config-metadata (push) Has been cancelled
CI / check-dependencies (push) Has been cancelled
CI / check-guards (push) Has been cancelled
CI / check-lint (push) Has been cancelled
CI / check-prod-types (push) Has been cancelled
CI / check-shrinkwrap (push) Has been cancelled
CI / check-test-types (push) Has been cancelled
CI / check-additional-boundaries-a (push) Has been cancelled
CI / check-additional-boundaries-bcd (push) Has been cancelled
CI / check-additional-extension-bundled (push) Has been cancelled
CI / check-additional-extension-channels (push) Has been cancelled
CI / check-additional-extension-package-boundary (push) Has been cancelled
CI / check-additional-runtime-topology-architecture (push) Has been cancelled
CI / check-session-accessor-boundary (push) Has been cancelled
CI / check-session-transcript-reader-boundary (push) Has been cancelled
CI / check-docs (push) Has been cancelled
CI / skills-python (push) Has been cancelled
CI / macos-swift (push) Has been cancelled
CI / ios-build (push) Has been cancelled
CI / ci-timings-summary (push) Has been cancelled
Native App Locale Refresh / Refresh native fa (push) Has been cancelled
Native App Locale Refresh / Refresh native fr (push) Has been cancelled
Native App Locale Refresh / Refresh native hi (push) Has been cancelled
Native App Locale Refresh / Refresh native id (push) Has been cancelled
Native App Locale Refresh / Refresh native it (push) Has been cancelled
Native App Locale Refresh / Refresh native ja-JP (push) Has been cancelled
Control UI Locale Refresh / plan (push) Has been cancelled
Control UI Locale Refresh / Refresh ${{ matrix.locale }} (push) Has been cancelled
Control UI Locale Refresh / Commit control UI locale refresh (push) Has been cancelled
Live Media Runner Image / Build live media runner image (push) Has been cancelled
Native App Locale Refresh / Refresh native ar (push) Has been cancelled
Native App Locale Refresh / Refresh native de (push) Has been cancelled
Native App Locale Refresh / Refresh native es (push) Has been cancelled
Native App Locale Refresh / Refresh native ko (push) Has been cancelled
Native App Locale Refresh / Refresh native nl (push) Has been cancelled
Native App Locale Refresh / Refresh native pl (push) Has been cancelled
Native App Locale Refresh / Refresh native pt-BR (push) Has been cancelled
Native App Locale Refresh / Refresh native ru (push) Has been cancelled
Native App Locale Refresh / Refresh native sv (push) Has been cancelled
Native App Locale Refresh / Refresh native th (push) Has been cancelled
Native App Locale Refresh / Refresh native tr (push) Has been cancelled
Native App Locale Refresh / Refresh native uk (push) Has been cancelled
Native App Locale Refresh / Refresh native vi (push) Has been cancelled
Native App Locale Refresh / Refresh native zh-CN (push) Has been cancelled
Native App Locale Refresh / Refresh native zh-TW (push) Has been cancelled
Native App Locale Refresh / Commit native locale refresh (push) Has been cancelled
Plugin Init Scaffold Validation / Validate provider scaffold (push) Has been cancelled
Plugin NPM Release / preview_plugins_npm (push) Has been cancelled
Plugin NPM Release / Validate release publish approval (push) Has been cancelled
Plugin NPM Release / preview_plugin_pack (push) Has been cancelled
Plugin NPM Release / publish_plugins_npm (push) Has been cancelled
Sandbox Common Smoke / sandbox-common-smoke (push) Has been cancelled
Website Installer Sync / static (push) Has been cancelled
Website Installer Sync / linux-docker (push) Has been cancelled
Website Installer Sync / macos-installer (push) Has been cancelled
Website Installer Sync / windows-installer (push) Has been cancelled
Website Installer Sync / sync-website (push) Has been cancelled
Adolf is a fork/vendored clone of github.com/openclaw/openclaw (v2026.6.11), free to diverge. Tree copied sans upstream .git; upstream remote added for future syncs. Node pinned to 24 (.nvmrc); engines already require >=22.19. Preserves docs/ARCHITECTURE.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LeqyaxJF2nbRXJtae2kNB2
This commit is contained in:
314
scripts/lib/openclaw-release-clawhub-plan.ts
Normal file
314
scripts/lib/openclaw-release-clawhub-plan.ts
Normal file
@@ -0,0 +1,314 @@
|
||||
// OpenClaw release ClawHub plan script supports release workflow routing.
|
||||
import { resolve } from "node:path";
|
||||
import {
|
||||
collectPluginClawHubReleasePlan,
|
||||
type PublishablePluginPackage,
|
||||
} from "./plugin-clawhub-release.ts";
|
||||
import {
|
||||
parsePluginReleaseSelection,
|
||||
parsePluginReleaseSelectionMode,
|
||||
type PluginReleaseSelectionMode,
|
||||
} from "./plugin-npm-release.ts";
|
||||
|
||||
type ClawHubPlanPackage = Pick<PublishablePluginPackage, "packageName">;
|
||||
|
||||
type ClawHubDispatchInputs = Record<string, string>;
|
||||
|
||||
type ClawHubDispatchTarget = {
|
||||
workflow: "plugin-clawhub-release.yml" | "plugin-clawhub-new.yml";
|
||||
ref: string;
|
||||
shouldDispatch: boolean;
|
||||
packages: string[];
|
||||
inputs: ClawHubDispatchInputs;
|
||||
};
|
||||
|
||||
export type OpenClawReleaseClawHubPlanArgs = {
|
||||
releaseTag: string;
|
||||
releasePublishBranch: string;
|
||||
releasePublishRunId: string;
|
||||
pluginPublishScope: PluginReleaseSelectionMode;
|
||||
plugins: string[];
|
||||
};
|
||||
|
||||
export type OpenClawReleaseClawHubPlan = {
|
||||
clawHubWorkflowRef: string;
|
||||
releasePublishBranch: string;
|
||||
normal: ClawHubDispatchTarget;
|
||||
bootstrap: ClawHubDispatchTarget;
|
||||
summary: {
|
||||
normalCount: number;
|
||||
bootstrapCount: number;
|
||||
missingTrustedPublisherCount: number;
|
||||
normalPlugins: string;
|
||||
bootstrapPlugins: string;
|
||||
missingTrustedPlugins: string;
|
||||
};
|
||||
verifier: {
|
||||
clawHubWorkflowRef: string;
|
||||
};
|
||||
};
|
||||
|
||||
export type OpenClawReleaseClawHubRuntimeStateArgs = {
|
||||
repository: string;
|
||||
waitForClawHub: boolean;
|
||||
forceSkipClawHub: boolean;
|
||||
normalRunId?: string;
|
||||
bootstrapRunId?: string;
|
||||
bootstrapCompleted: boolean;
|
||||
};
|
||||
|
||||
export type OpenClawReleaseClawHubRuntimeState = {
|
||||
verifierArgs: string[];
|
||||
proofLines: {
|
||||
normal: string;
|
||||
bootstrap: string;
|
||||
};
|
||||
};
|
||||
|
||||
function requireArg(value: string | undefined, label: string): string {
|
||||
const trimmed = value?.trim();
|
||||
if (!trimmed) {
|
||||
throw new Error(`${label} is required.`);
|
||||
}
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
function packageNames(packages: readonly ClawHubPlanPackage[]): string[] {
|
||||
return packages.map((plugin) => plugin.packageName);
|
||||
}
|
||||
|
||||
function joinPackageNames(packages: readonly string[]): string {
|
||||
return packages.join(",");
|
||||
}
|
||||
|
||||
function optionalArg(value: string | undefined): string | undefined {
|
||||
const trimmed = value?.trim();
|
||||
return trimmed ? trimmed : undefined;
|
||||
}
|
||||
|
||||
function runUrl(repository: string, runId: string): string {
|
||||
return `https://github.com/${repository}/actions/runs/${runId}`;
|
||||
}
|
||||
|
||||
function assertNoPackageOverlap(
|
||||
normalPackages: readonly string[],
|
||||
bootstrapPackages: readonly string[],
|
||||
) {
|
||||
const normalPackageSet = new Set(normalPackages);
|
||||
const overlap = bootstrapPackages.filter((packageName) => normalPackageSet.has(packageName));
|
||||
if (overlap.length > 0) {
|
||||
throw new Error(
|
||||
`ClawHub release plan routed package(s) to both normal and bootstrap workflows: ${overlap.join(", ")}.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function createDispatchTarget(params: {
|
||||
workflow: ClawHubDispatchTarget["workflow"];
|
||||
ref: string;
|
||||
packages: readonly string[];
|
||||
releasePublishRunId: string;
|
||||
releasePublishBranch: string;
|
||||
includePublishScope: boolean;
|
||||
}): ClawHubDispatchTarget {
|
||||
if (params.packages.length === 0) {
|
||||
return {
|
||||
workflow: params.workflow,
|
||||
ref: params.ref,
|
||||
shouldDispatch: false,
|
||||
packages: [],
|
||||
inputs: {},
|
||||
};
|
||||
}
|
||||
|
||||
const plugins = joinPackageNames(params.packages);
|
||||
return {
|
||||
workflow: params.workflow,
|
||||
ref: params.ref,
|
||||
shouldDispatch: true,
|
||||
packages: [...params.packages],
|
||||
inputs: {
|
||||
...(params.includePublishScope ? { publish_scope: "selected" } : {}),
|
||||
plugins,
|
||||
release_publish_run_id: params.releasePublishRunId,
|
||||
release_publish_branch: params.releasePublishBranch,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function buildOpenClawReleaseClawHubRuntimeState(
|
||||
args: OpenClawReleaseClawHubRuntimeStateArgs,
|
||||
): OpenClawReleaseClawHubRuntimeState {
|
||||
const repository = requireArg(args.repository, "repository");
|
||||
const normalRunId = optionalArg(args.normalRunId);
|
||||
const bootstrapRunId = optionalArg(args.bootstrapRunId);
|
||||
|
||||
const shouldIncludeNormalRun =
|
||||
!args.forceSkipClawHub && normalRunId !== undefined && args.waitForClawHub;
|
||||
const shouldIncludeBootstrapRun =
|
||||
!args.forceSkipClawHub && bootstrapRunId !== undefined && args.bootstrapCompleted;
|
||||
const shouldVerifyClawHubPackages =
|
||||
bootstrapRunId !== undefined &&
|
||||
args.bootstrapCompleted &&
|
||||
(normalRunId === undefined || args.waitForClawHub);
|
||||
const shouldSkipClawHubPackages =
|
||||
args.forceSkipClawHub || !(shouldIncludeNormalRun || shouldVerifyClawHubPackages);
|
||||
|
||||
const verifierArgs = shouldSkipClawHubPackages ? ["--skip-clawhub"] : [];
|
||||
if (shouldIncludeNormalRun) {
|
||||
verifierArgs.push("--plugin-clawhub-run", normalRunId);
|
||||
}
|
||||
if (shouldIncludeBootstrapRun) {
|
||||
verifierArgs.push("--plugin-clawhub-bootstrap-run", bootstrapRunId);
|
||||
}
|
||||
|
||||
let normalProofLine = "- plugin ClawHub publish: no normal OIDC candidates";
|
||||
if (normalRunId !== undefined && args.waitForClawHub) {
|
||||
normalProofLine = `- plugin ClawHub publish: ${runUrl(repository, normalRunId)}`;
|
||||
} else if (normalRunId !== undefined) {
|
||||
normalProofLine = `- plugin ClawHub publish: dispatched separately, not awaited by this proof: ${runUrl(repository, normalRunId)}`;
|
||||
}
|
||||
|
||||
let bootstrapProofLine = "- plugin ClawHub bootstrap: not needed";
|
||||
if (bootstrapRunId !== undefined && (args.bootstrapCompleted || args.waitForClawHub)) {
|
||||
bootstrapProofLine = `- plugin ClawHub bootstrap: ${runUrl(repository, bootstrapRunId)}`;
|
||||
} else if (bootstrapRunId !== undefined) {
|
||||
bootstrapProofLine = `- plugin ClawHub bootstrap: dispatched separately, not awaited by this proof: ${runUrl(repository, bootstrapRunId)}`;
|
||||
}
|
||||
|
||||
return {
|
||||
verifierArgs,
|
||||
proofLines: {
|
||||
normal: normalProofLine,
|
||||
bootstrap: bootstrapProofLine,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function parseOpenClawReleaseClawHubPlanArgs(
|
||||
argv: string[],
|
||||
): OpenClawReleaseClawHubPlanArgs {
|
||||
const values = [...argv];
|
||||
if (values[0] === "--") {
|
||||
values.shift();
|
||||
}
|
||||
|
||||
let releaseTag: string | undefined;
|
||||
let releasePublishBranch: string | undefined;
|
||||
let releasePublishRunId: string | undefined;
|
||||
let pluginPublishScope: PluginReleaseSelectionMode | undefined;
|
||||
let plugins: string[] = [];
|
||||
let pluginsFlagProvided = false;
|
||||
|
||||
for (let index = 0; index < values.length; index += 1) {
|
||||
const arg = values[index];
|
||||
const next = () => {
|
||||
const value = values[index + 1];
|
||||
if (value === undefined || value.startsWith("-")) {
|
||||
throw new Error(`${arg} requires a value.`);
|
||||
}
|
||||
index += 1;
|
||||
return value;
|
||||
};
|
||||
|
||||
switch (arg) {
|
||||
case "--release-tag":
|
||||
releaseTag = next();
|
||||
break;
|
||||
case "--release-publish-branch":
|
||||
releasePublishBranch = next();
|
||||
break;
|
||||
case "--release-publish-run-id":
|
||||
releasePublishRunId = next();
|
||||
break;
|
||||
case "--plugin-publish-scope":
|
||||
pluginPublishScope = parsePluginReleaseSelectionMode(next());
|
||||
break;
|
||||
case "--plugins":
|
||||
plugins = parsePluginReleaseSelection(next());
|
||||
pluginsFlagProvided = true;
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unknown argument: ${arg}`);
|
||||
}
|
||||
}
|
||||
|
||||
const resolvedPluginPublishScope = pluginPublishScope ?? "all-publishable";
|
||||
if (pluginsFlagProvided && plugins.length === 0) {
|
||||
throw new Error("--plugins must include at least one package name.");
|
||||
}
|
||||
if (resolvedPluginPublishScope === "selected" && !pluginsFlagProvided) {
|
||||
throw new Error("plugin-publish-scope=selected requires --plugins.");
|
||||
}
|
||||
if (resolvedPluginPublishScope === "all-publishable" && pluginsFlagProvided) {
|
||||
throw new Error("plugin-publish-scope=all-publishable must not be combined with --plugins.");
|
||||
}
|
||||
|
||||
return {
|
||||
releaseTag: requireArg(releaseTag, "--release-tag"),
|
||||
releasePublishBranch: requireArg(releasePublishBranch, "--release-publish-branch"),
|
||||
releasePublishRunId: requireArg(releasePublishRunId, "--release-publish-run-id"),
|
||||
pluginPublishScope: resolvedPluginPublishScope,
|
||||
plugins,
|
||||
};
|
||||
}
|
||||
|
||||
export async function buildOpenClawReleaseClawHubPlan(
|
||||
args: OpenClawReleaseClawHubPlanArgs,
|
||||
options: {
|
||||
rootDir?: string;
|
||||
fetchImpl?: typeof fetch;
|
||||
registryBaseUrl?: string;
|
||||
} = {},
|
||||
): Promise<OpenClawReleaseClawHubPlan> {
|
||||
const releaseTag = requireArg(args.releaseTag, "releaseTag");
|
||||
const releasePublishBranch = requireArg(args.releasePublishBranch, "releasePublishBranch");
|
||||
const releasePublishRunId = requireArg(args.releasePublishRunId, "releasePublishRunId");
|
||||
const plan = await collectPluginClawHubReleasePlan({
|
||||
rootDir: options.rootDir ?? resolve("."),
|
||||
selection: args.plugins,
|
||||
selectionMode: args.pluginPublishScope,
|
||||
fetchImpl: options.fetchImpl,
|
||||
registryBaseUrl: options.registryBaseUrl,
|
||||
});
|
||||
|
||||
const normalPackages = packageNames(plan.candidates);
|
||||
const bootstrapPackages = [
|
||||
...packageNames(plan.bootstrapCandidates),
|
||||
...packageNames(plan.missingTrustedPublisher),
|
||||
];
|
||||
const missingTrustedPlugins = packageNames(plan.missingTrustedPublisher);
|
||||
assertNoPackageOverlap(normalPackages, bootstrapPackages);
|
||||
|
||||
return {
|
||||
clawHubWorkflowRef: releaseTag,
|
||||
releasePublishBranch,
|
||||
normal: createDispatchTarget({
|
||||
workflow: "plugin-clawhub-release.yml",
|
||||
ref: releaseTag,
|
||||
packages: normalPackages,
|
||||
releasePublishRunId,
|
||||
releasePublishBranch,
|
||||
includePublishScope: true,
|
||||
}),
|
||||
bootstrap: createDispatchTarget({
|
||||
workflow: "plugin-clawhub-new.yml",
|
||||
ref: releaseTag,
|
||||
packages: bootstrapPackages,
|
||||
releasePublishRunId,
|
||||
releasePublishBranch,
|
||||
includePublishScope: false,
|
||||
}),
|
||||
summary: {
|
||||
normalCount: normalPackages.length,
|
||||
bootstrapCount: bootstrapPackages.length,
|
||||
missingTrustedPublisherCount: missingTrustedPlugins.length,
|
||||
normalPlugins: joinPackageNames(normalPackages),
|
||||
bootstrapPlugins: joinPackageNames(bootstrapPackages),
|
||||
missingTrustedPlugins: joinPackageNames(missingTrustedPlugins),
|
||||
},
|
||||
verifier: {
|
||||
clawHubWorkflowRef: releaseTag,
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user