


























@@ -144,6 +144,7 @@ on:
144144145145permissions:
146146contents: read
147+packages: write
147148pull-requests: read
148149149150env:
@@ -349,8 +350,8 @@ jobs:
349350 run: ${{ matrix.command }}
350351351352validate_docker_e2e:
352-needs: validate_selected_ref
353-if: inputs.include_release_path_suites || inputs.include_openwebui
353+needs: [validate_selected_ref, prepare_docker_e2e_image]
354+if: inputs.include_release_path_suites
354355runs-on: blacksmith-32vcpu-ubuntu-2404
355356timeout-minutes: ${{ matrix.timeout_minutes }}
356357strategy:
@@ -362,55 +363,66 @@ jobs:
362363command: pnpm test:docker:onboard
363364timeout_minutes: 60
364365release_path: true
365-openwebui_only: false
366+ - suite_id: docker-npm-onboard-channel-agent
367+label: Npm Onboard Channel Agent Docker E2E
368+command: pnpm test:docker:npm-onboard-channel-agent
369+timeout_minutes: 90
370+release_path: true
366371 - suite_id: docker-gateway-network
367372label: Gateway Network Docker E2E
368373command: pnpm test:docker:gateway-network
369374timeout_minutes: 60
370375release_path: true
371-openwebui_only: false
372376 - suite_id: docker-mcp-channels
373377label: MCP Channels Docker E2E
374378command: pnpm test:docker:mcp-channels
375379timeout_minutes: 60
376380release_path: true
377-openwebui_only: false
381+ - suite_id: docker-pi-bundle-mcp-tools
382+label: Pi Bundle MCP Tools Docker E2E
383+command: pnpm test:docker:pi-bundle-mcp-tools
384+timeout_minutes: 60
385+release_path: true
386+ - suite_id: docker-cron-mcp-cleanup
387+label: Cron MCP Cleanup Docker E2E
388+command: pnpm test:docker:cron-mcp-cleanup
389+timeout_minutes: 60
390+release_path: true
378391 - suite_id: docker-plugins
379392label: Plugins Docker E2E
380393command: pnpm test:docker:plugins
381394timeout_minutes: 75
382395release_path: true
383-openwebui_only: false
396+ - suite_id: docker-plugin-update
397+label: Plugin Update Docker E2E
398+command: pnpm test:docker:plugin-update
399+timeout_minutes: 60
400+release_path: true
401+ - suite_id: docker-config-reload
402+label: Config Reload Docker E2E
403+command: pnpm test:docker:config-reload
404+timeout_minutes: 60
405+release_path: true
384406 - suite_id: docker-bundled-channel-deps
385407label: Bundled Channel Runtime Deps Docker E2E
386408command: pnpm test:docker:bundled-channel-deps
387409timeout_minutes: 75
388410release_path: true
389-openwebui_only: false
390411 - suite_id: docker-doctor-switch
391412label: Doctor Install Switch Docker E2E
392413command: pnpm test:docker:doctor-switch
393414timeout_minutes: 60
394415release_path: true
395-openwebui_only: false
396416 - suite_id: docker-qr
397417label: QR Import Docker E2E
398418command: pnpm test:docker:qr
399419timeout_minutes: 60
400420release_path: true
401-openwebui_only: false
402421 - suite_id: docker-install-e2e
403422label: Installer Docker E2E
404423command: pnpm test:install:e2e
405424timeout_minutes: 120
406425release_path: true
407-openwebui_only: false
408- - suite_id: docker-openwebui
409-label: Open WebUI Docker E2E
410-command: pnpm test:docker:openwebui
411-timeout_minutes: 75
412-release_path: false
413-openwebui_only: true
414426env:
415427OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
416428OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
@@ -455,13 +467,22 @@ jobs:
455467OPENCLAW_CLAUDE_SETTINGS_JSON: ${{ secrets.OPENCLAW_CLAUDE_SETTINGS_JSON }}
456468OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON: ${{ secrets.OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON }}
457469OPENCLAW_GEMINI_SETTINGS_JSON: ${{ secrets.OPENCLAW_GEMINI_SETTINGS_JSON }}
470+OPENCLAW_DOCKER_E2E_IMAGE: ${{ needs.prepare_docker_e2e_image.outputs.image }}
471+OPENCLAW_SKIP_DOCKER_BUILD: "1"
458472steps:
459473 - name: Checkout selected ref
460474uses: actions/checkout@v6
461475with:
462476ref: ${{ needs.validate_selected_ref.outputs.selected_sha }}
463477fetch-depth: 1
464478479+ - name: Log in to GHCR for shared Docker E2E image
480+uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
481+with:
482+registry: ghcr.io
483+username: ${{ github.actor }}
484+password: ${{ github.token }}
485+465486 - name: Setup Node environment
466487uses: ./.github/actions/setup-node-env
467488with:
@@ -497,20 +518,106 @@ jobs:
497518 exit 1
498519 fi
499520 ;;
500- docker-openwebui)
501- [[ -n "${OPENAI_API_KEY:-}" ]] || {
502- echo "OPENAI_API_KEY is required for the Open WebUI Docker smoke." >&2
503- exit 1
504- }
505- ;;
506521 esac
507522508523 - name: Run ${{ matrix.label }}
509-if: |
510- (inputs.include_release_path_suites && matrix.release_path) ||
511- (inputs.include_openwebui && matrix.openwebui_only)
512524run: ${{ matrix.command }}
513525526+validate_docker_openwebui:
527+needs: [validate_selected_ref, prepare_docker_e2e_image]
528+if: inputs.include_openwebui
529+runs-on: blacksmith-32vcpu-ubuntu-2404
530+timeout-minutes: 75
531+env:
532+OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
533+OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
534+OPENCLAW_DOCKER_E2E_IMAGE: ${{ needs.prepare_docker_e2e_image.outputs.image }}
535+OPENCLAW_SKIP_DOCKER_BUILD: "1"
536+steps:
537+ - name: Checkout selected ref
538+uses: actions/checkout@v6
539+with:
540+ref: ${{ needs.validate_selected_ref.outputs.selected_sha }}
541+fetch-depth: 1
542+543+ - name: Log in to GHCR for shared Docker E2E image
544+uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
545+with:
546+registry: ghcr.io
547+username: ${{ github.actor }}
548+password: ${{ github.token }}
549+550+ - name: Setup Node environment
551+uses: ./.github/actions/setup-node-env
552+with:
553+node-version: ${{ env.NODE_VERSION }}
554+pnpm-version: ${{ env.PNPM_VERSION }}
555+install-bun: "true"
556+557+ - name: Validate Open WebUI credentials
558+shell: bash
559+run: |
560+ set -euo pipefail
561+ [[ -n "${OPENAI_API_KEY:-}" ]] || {
562+ echo "OPENAI_API_KEY is required for the Open WebUI Docker smoke." >&2
563+ exit 1
564+ }
565+566+ - name: Run Open WebUI Docker E2E
567+run: pnpm test:docker:openwebui
568+569+prepare_docker_e2e_image:
570+needs: validate_selected_ref
571+if: inputs.include_release_path_suites || inputs.include_openwebui
572+runs-on: blacksmith-32vcpu-ubuntu-2404
573+timeout-minutes: 90
574+permissions:
575+contents: read
576+packages: write
577+outputs:
578+image: ${{ steps.image.outputs.image }}
579+env:
580+DOCKER_BUILD_SUMMARY: "false"
581+DOCKER_BUILD_RECORD_UPLOAD: "false"
582+steps:
583+ - name: Checkout selected ref
584+uses: actions/checkout@v6
585+with:
586+ref: ${{ needs.validate_selected_ref.outputs.selected_sha }}
587+fetch-depth: 1
588+589+ - name: Resolve shared Docker E2E image tag
590+id: image
591+shell: bash
592+env:
593+SELECTED_SHA: ${{ needs.validate_selected_ref.outputs.selected_sha }}
594+run: |
595+ set -euo pipefail
596+ repository="${GITHUB_REPOSITORY,,}"
597+ image="ghcr.io/${repository}-docker-e2e:${SELECTED_SHA}"
598+ echo "image=$image" >> "$GITHUB_OUTPUT"
599+ echo "Shared Docker E2E image: \`$image\`" >> "$GITHUB_STEP_SUMMARY"
600+601+ - name: Log in to GHCR
602+uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
603+with:
604+registry: ghcr.io
605+username: ${{ github.actor }}
606+password: ${{ github.token }}
607+608+ - name: Build and push shared Docker E2E image
609+uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
610+with:
611+context: .
612+file: ./scripts/e2e/Dockerfile
613+target: build
614+platforms: linux/amd64
615+cache-from: type=gha,scope=docker-e2e
616+cache-to: type=gha,mode=max,scope=docker-e2e
617+tags: ${{ steps.image.outputs.image }}
618+provenance: false
619+push: true
620+514621validate_live_provider_suites:
515622needs: validate_selected_ref
516623if: inputs.include_live_suites
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。