























@@ -436,6 +436,8 @@ jobs:
436436OPENCLAW_GEMINI_SETTINGS_JSON: ${{ secrets.OPENCLAW_GEMINI_SETTINGS_JSON }}
437437FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }}
438438OPENCLAW_DOCKER_E2E_IMAGE: ${{ needs.prepare_docker_e2e_image.outputs.image }}
439+OPENCLAW_DOCKER_E2E_BARE_IMAGE: ${{ needs.prepare_docker_e2e_image.outputs.bare_image }}
440+OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE: ${{ needs.prepare_docker_e2e_image.outputs.functional_image }}
439441OPENCLAW_SKIP_DOCKER_BUILD: "1"
440442INCLUDE_OPENWEBUI: ${{ inputs.include_openwebui }}
441443DOCKER_E2E_CHUNK: ${{ matrix.chunk_id }}
@@ -467,7 +469,21 @@ jobs:
467469shell: bash
468470run: |
469471 set -euo pipefail
470- docker pull "${OPENCLAW_DOCKER_E2E_IMAGE}"
472+ case "${DOCKER_E2E_CHUNK}" in
473+ core)
474+ docker pull "${OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE}"
475+ ;;
476+ package-update)
477+ docker pull "${OPENCLAW_DOCKER_E2E_BARE_IMAGE}"
478+ ;;
479+ plugins-integrations)
480+ docker pull "${OPENCLAW_DOCKER_E2E_BARE_IMAGE}"
481+ docker pull "${OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE}"
482+ ;;
483+ *)
484+ docker pull "${OPENCLAW_DOCKER_E2E_IMAGE}"
485+ ;;
486+ esac
471487472488 - name: Validate chunk credentials
473489shell: bash
@@ -534,6 +550,15 @@ jobs:
534550 const rerun = String(lane.rerunCommand ?? "").replaceAll("`", "\\`");
535551 console.log(`| \`${lane.name}\` | ${status} | ${lane.elapsedSeconds ?? ""} | ${lane.timedOut ? "yes" : "no"} | \`${rerun}\` |`);
536552 }
553+ const phases = Array.isArray(summary.phases) ? summary.phases : [];
554+ if (phases.length > 0) {
555+ console.log("");
556+ console.log("| Phase | Seconds | Status | Image kind |");
557+ console.log("| --- | ---: | --- | --- |");
558+ for (const phase of phases) {
559+ console.log(`| \`${phase.name}\` | ${phase.elapsedSeconds ?? ""} | ${phase.status ?? ""} | ${phase.imageKind ?? ""} |`);
560+ }
561+ }
537562 NODE
538563539564 - name: Upload Docker E2E chunk artifacts
@@ -596,6 +621,8 @@ jobs:
596621OPENCLAW_GEMINI_SETTINGS_JSON: ${{ secrets.OPENCLAW_GEMINI_SETTINGS_JSON }}
597622FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }}
598623OPENCLAW_DOCKER_E2E_IMAGE: ${{ needs.prepare_docker_e2e_image.outputs.image }}
624+OPENCLAW_DOCKER_E2E_BARE_IMAGE: ${{ needs.prepare_docker_e2e_image.outputs.bare_image }}
625+OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE: ${{ needs.prepare_docker_e2e_image.outputs.functional_image }}
599626OPENCLAW_SKIP_DOCKER_BUILD: "1"
600627INCLUDE_OPENWEBUI: ${{ inputs.include_openwebui }}
601628DOCKER_E2E_LANES: ${{ inputs.docker_lanes }}
@@ -623,11 +650,12 @@ jobs:
623650 - name: Hydrate live auth/profile inputs
624651run: bash scripts/ci-hydrate-live-auth.sh
625652626- - name: Pull shared Docker E2E image
653+ - name: Pull shared Docker E2E images
627654shell: bash
628655run: |
629656 set -euo pipefail
630- docker pull "${OPENCLAW_DOCKER_E2E_IMAGE}"
657+ docker pull "${OPENCLAW_DOCKER_E2E_BARE_IMAGE}"
658+ docker pull "${OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE}"
631659632660 - name: Validate targeted lane credentials
633661shell: bash
@@ -695,6 +723,15 @@ jobs:
695723 const rerun = String(lane.rerunCommand ?? "").replaceAll("`", "\\`");
696724 console.log(`| \`${lane.name}\` | ${status} | ${lane.elapsedSeconds ?? ""} | ${lane.timedOut ? "yes" : "no"} | \`${rerun}\` |`);
697725 }
726+ const phases = Array.isArray(summary.phases) ? summary.phases : [];
727+ if (phases.length > 0) {
728+ console.log("");
729+ console.log("| Phase | Seconds | Status | Image kind |");
730+ console.log("| --- | ---: | --- | --- |");
731+ for (const phase of phases) {
732+ console.log(`| \`${phase.name}\` | ${phase.elapsedSeconds ?? ""} | ${phase.status ?? ""} | ${phase.imageKind ?? ""} |`);
733+ }
734+ }
698735 NODE
699736700737 - name: Upload targeted Docker E2E artifacts
@@ -714,6 +751,7 @@ jobs:
714751OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
715752OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
716753OPENCLAW_DOCKER_E2E_IMAGE: ${{ needs.prepare_docker_e2e_image.outputs.image }}
754+OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE: ${{ needs.prepare_docker_e2e_image.outputs.functional_image }}
717755OPENCLAW_SKIP_DOCKER_BUILD: "1"
718756steps:
719757 - name: Checkout selected ref
@@ -758,6 +796,8 @@ jobs:
758796packages: write
759797outputs:
760798image: ${{ steps.image.outputs.image }}
799+bare_image: ${{ steps.image.outputs.bare_image }}
800+functional_image: ${{ steps.image.outputs.functional_image }}
761801env:
762802DOCKER_BUILD_SUMMARY: "false"
763803DOCKER_BUILD_RECORD_UPLOAD: "false"
@@ -768,17 +808,22 @@ jobs:
768808ref: ${{ needs.validate_selected_ref.outputs.selected_sha }}
769809fetch-depth: 1
770810771- - name: Resolve shared Docker E2E image tag
811+ - name: Resolve shared Docker E2E image tags
772812id: image
773813shell: bash
774814env:
775815SELECTED_SHA: ${{ needs.validate_selected_ref.outputs.selected_sha }}
776816run: |
777817 set -euo pipefail
778818 repository="${GITHUB_REPOSITORY,,}"
779- image="ghcr.io/${repository}-docker-e2e:${SELECTED_SHA}"
819+ bare_image="ghcr.io/${repository}-docker-e2e-bare:${SELECTED_SHA}"
820+ functional_image="ghcr.io/${repository}-docker-e2e-functional:${SELECTED_SHA}"
821+ image="$functional_image"
780822 echo "image=$image" >> "$GITHUB_OUTPUT"
781- echo "Shared Docker E2E image: \`$image\`" >> "$GITHUB_STEP_SUMMARY"
823+ echo "bare_image=$bare_image" >> "$GITHUB_OUTPUT"
824+ echo "functional_image=$functional_image" >> "$GITHUB_OUTPUT"
825+ echo "Shared Docker E2E bare image: \`$bare_image\`" >> "$GITHUB_STEP_SUMMARY"
826+ echo "Shared Docker E2E functional image: \`$functional_image\`" >> "$GITHUB_STEP_SUMMARY"
782827783828 - name: Log in to GHCR
784829uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
@@ -790,16 +835,33 @@ jobs:
790835 - name: Setup Docker builder
791836uses: useblacksmith/setup-docker-builder@ac083cc84672d01c60d5e8561d0a939b697de542 # v1
792837793- - name: Build and push shared Docker E2E image
838+ - name: Build and push bare Docker E2E image
839+if: inputs.include_release_path_suites || inputs.docker_lanes != ''
794840uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
795841with:
796842context: .
797843file: ./scripts/e2e/Dockerfile
798844target: build
799845platforms: linux/amd64
800-cache-from: type=gha,scope=docker-e2e
801-cache-to: type=gha,mode=max,scope=docker-e2e
802-tags: ${{ steps.image.outputs.image }}
846+cache-from: type=gha,scope=docker-e2e-bare
847+cache-to: type=gha,mode=max,scope=docker-e2e-bare
848+tags: ${{ steps.image.outputs.bare_image }}
849+sbom: true
850+provenance: mode=max
851+push: true
852+853+ - name: Build and push functional Docker E2E image
854+uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
855+with:
856+context: .
857+file: ./scripts/e2e/Dockerfile
858+target: functional
859+platforms: linux/amd64
860+cache-from: |
861+ type=gha,scope=docker-e2e-bare
862+ type=gha,scope=docker-e2e-functional
863+ cache-to: type=gha,mode=max,scope=docker-e2e-functional
864+tags: ${{ steps.image.outputs.functional_image }}
803865sbom: true
804866provenance: mode=max
805867push: true
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。