

















@@ -223,18 +223,86 @@ describe("scripts/lib/plugin-prerelease-test-plan.mjs", () => {
223223expect(workflow.jobs["checks-node-extensions-shard"]).toBeUndefined();
224224expect(preflight.outputs).not.toHaveProperty("run_plugin_prerelease_suite");
225225expect(preflight.outputs).not.toHaveProperty("run_checks_node_extensions");
226-expect(staticShard).toMatchObject({
226+expect(staticShard).toEqual({
227+if: "needs.preflight.outputs.run_plugin_prerelease_static == 'true'",
227228name: "${{ matrix.check_name }}",
229+needs: ["preflight"],
230+permissions: {
231+contents: "read",
232+},
228233"runs-on": "blacksmith-8vcpu-ubuntu-2404",
234+steps: [
235+{
236+name: "Checkout",
237+uses: "actions/checkout@v6",
238+with: {
239+"fetch-depth": 1,
240+"fetch-tags": false,
241+"persist-credentials": false,
242+ref: "${{ needs.preflight.outputs.checkout_revision }}",
243+submodules: false,
244+},
245+},
246+{
247+name: "Setup Node environment",
248+uses: "./.github/actions/setup-node-env",
249+with: {
250+"install-bun": "false",
251+},
252+},
253+{
254+env: {
255+PLUGIN_PRERELEASE_COMMAND: "${{ matrix.command }}",
256+PLUGIN_PRERELEASE_TASK: "${{ matrix.task }}",
257+},
258+name: "Run plugin prerelease static shard",
259+run: [
260+"set -euo pipefail",
261+'echo "Running ${PLUGIN_PRERELEASE_TASK}: ${PLUGIN_PRERELEASE_COMMAND}"',
262+'bash -c "$PLUGIN_PRERELEASE_COMMAND"',
263+"",
264+].join("\n"),
265+shell: "bash",
266+},
267+],
268+strategy: {
269+"fail-fast": false,
270+matrix: "${{ fromJson(needs.preflight.outputs.plugin_prerelease_static_matrix) }}",
271+},
272+"timeout-minutes": 45,
229273});
230274expect(workflow.on.workflow_dispatch.inputs.full_release_validation).toBeUndefined();
231-expect(workflow.on.workflow_dispatch.inputs.include_android).toMatchObject({
275+expect(workflow.on.workflow_dispatch.inputs.include_android).toEqual({
232276default: false,
277+description: "Run Android lanes for this manual CI dispatch.",
278+required: false,
233279type: "boolean",
234280});
235-expect(manifestEnv).toMatchObject({
281+expect(manifestEnv).toEqual({
282+OPENCLAW_CI_CHECKOUT_REVISION: "${{ steps.checkout_ref.outputs.sha }}",
283+OPENCLAW_CI_DOCS_CHANGED:
284+"${{ github.event_name == 'workflow_dispatch' && 'true' || steps.docs_scope.outputs.docs_changed }}",
285+OPENCLAW_CI_DOCS_ONLY:
286+"${{ github.event_name == 'workflow_dispatch' && 'false' || steps.docs_scope.outputs.docs_only }}",
287+OPENCLAW_CI_REPOSITORY: "${{ github.repository }}",
236288OPENCLAW_CI_RUN_ANDROID:
237289"${{ github.event_name == 'workflow_dispatch' && inputs.include_android && 'true' || steps.changed_scope.outputs.run_android || 'false' }}",
290+OPENCLAW_CI_RUN_CONTROL_UI_I18N:
291+"${{ github.event_name == 'workflow_dispatch' && 'true' || steps.changed_scope.outputs.run_control_ui_i18n || 'false' }}",
292+OPENCLAW_CI_RUN_MACOS:
293+"${{ github.event_name == 'workflow_dispatch' && 'true' || steps.changed_scope.outputs.run_macos || 'false' }}",
294+OPENCLAW_CI_RUN_NODE:
295+"${{ github.event_name == 'workflow_dispatch' && 'true' || steps.changed_scope.outputs.run_node || 'false' }}",
296+OPENCLAW_CI_RUN_NODE_FAST_CI_ROUTING:
297+"${{ github.event_name == 'workflow_dispatch' && 'false' || steps.changed_scope.outputs.run_node_fast_ci_routing || 'false' }}",
298+OPENCLAW_CI_RUN_NODE_FAST_ONLY:
299+"${{ github.event_name == 'workflow_dispatch' && 'false' || steps.changed_scope.outputs.run_node_fast_only || 'false' }}",
300+OPENCLAW_CI_RUN_NODE_FAST_PLUGIN_CONTRACTS:
301+"${{ github.event_name == 'workflow_dispatch' && 'false' || steps.changed_scope.outputs.run_node_fast_plugin_contracts || 'false' }}",
302+OPENCLAW_CI_RUN_SKILLS_PYTHON:
303+"${{ github.event_name == 'workflow_dispatch' && 'true' || steps.changed_scope.outputs.run_skills_python || 'false' }}",
304+OPENCLAW_CI_RUN_WINDOWS:
305+"${{ github.event_name == 'workflow_dispatch' && 'true' || steps.changed_scope.outputs.run_windows || 'false' }}",
238306});
239307expect(manifestEnv).not.toHaveProperty("OPENCLAW_CI_FULL_RELEASE_VALIDATION");
240308expect(manifestScript).toContain("includeReleaseOnlyPluginShards: false");
@@ -262,15 +330,20 @@ describe("scripts/lib/plugin-prerelease-test-plan.mjs", () => {
262330expect(pluginManifestScript).toContain(
263331"Plugin prerelease plan unavailable in target ref; skipping static and Docker plugin prerelease lanes.",
264332);
265-expect(pluginWorkflow.on.workflow_dispatch.inputs.target_ref).toMatchObject({
333+expect(pluginWorkflow.on.workflow_dispatch.inputs.target_ref).toEqual({
266334default: "main",
335+description: "Branch, tag, or full commit SHA to validate",
336+required: false,
267337type: "string",
268338});
269-expect(pluginWorkflow.on.workflow_dispatch.inputs.full_release_validation).toMatchObject({
339+expect(pluginWorkflow.on.workflow_dispatch.inputs.full_release_validation).toEqual({
270340default: false,
341+description: "Enable release-only Docker prerelease lanes from Full Release Validation",
342+required: false,
271343type: "boolean",
272344});
273-expect(pluginManifestEnv).toMatchObject({
345+expect(pluginManifestEnv).toEqual({
346+EXPECTED_SHA: "${{ inputs.expected_sha }}",
274347FULL_RELEASE_VALIDATION: "${{ inputs.full_release_validation && 'true' || 'false' }}",
275348});
276349expect(pluginManifestScript).toContain(
@@ -279,7 +352,7 @@ describe("scripts/lib/plugin-prerelease-test-plan.mjs", () => {
279352expect(pluginManifestScript).toContain(
280353"const runDocker = fullReleaseValidation && dockerLanes.length > 0;",
281354);
282-expect(pluginPreflight.outputs).toMatchObject({
355+expect(pluginPreflight.outputs).toEqual({
283356checkout_revision: "${{ steps.manifest.outputs.checkout_revision }}",
284357plugin_prerelease_docker_lanes:
285358"${{ steps.manifest.outputs.plugin_prerelease_docker_lanes }}",
@@ -310,9 +383,16 @@ describe("scripts/lib/plugin-prerelease-test-plan.mjs", () => {
310383expect(
311384staticShard.steps.find((step) => step.name === "Run plugin prerelease static shard").run,
312385).toContain('bash -c "$PLUGIN_PRERELEASE_COMMAND"');
313-expect(dockerSuite).toMatchObject({
386+expect(dockerSuite).toEqual({
314387if: "${{ inputs.full_release_validation && needs.preflight.outputs.run_plugin_prerelease_docker == 'true' }}",
388+name: "plugin-prerelease-docker-suite",
315389needs: ["preflight"],
390+permissions: {
391+actions: "read",
392+contents: "read",
393+packages: "write",
394+"pull-requests": "read",
395+},
316396uses: "./.github/workflows/openclaw-live-and-e2e-checks-reusable.yml",
317397with: {
318398docker_lanes: "${{ needs.preflight.outputs.plugin_prerelease_docker_lanes }}",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。