diff --git a/.github/workflows/diffusion-ci-gt-gen-npu.yml b/.github/workflows/diffusion-ci-gt-gen-npu.yml index b4561b9ba..3dd4b323a 100644 --- a/.github/workflows/diffusion-ci-gt-gen-npu.yml +++ b/.github/workflows/diffusion-ci-gt-gen-npu.yml @@ -19,7 +19,7 @@ on: default: '' type: string publish_target_dir: - description: 'Remote target directory in sgl-project/ci-data. Leave empty to use diffusion-ci/consistency_gt/sglang_generated/ascend.' + description: 'Remote target directory in sgl-project/ci-data-diffusion. Leave empty to use diffusion-ci/consistency_gt/sglang_generated/ascend.' required: false default: '' type: string @@ -61,6 +61,16 @@ jobs: with: python-version: '3.10' + - name: Verify write access to sgl-project/ci-data-diffusion + env: + GH_TOKEN: ${{ secrets.GH_PAT_FOR_NIGHTLY_CI_DATA }} + run: | + if [ "$(gh api repos/sgl-project/ci-data-diffusion --jq .permissions.push)" != "true" ]; then + echo "::error::GH_PAT_FOR_NIGHTLY_CI_DATA lacks write (push) access to sgl-project/ci-data-diffusion. Grant it before running GT generation." + exit 1 + fi + echo "OK: write access to sgl-project/ci-data-diffusion confirmed" + - name: Compute partitions env: USE_NPU_CONFIGS: true @@ -135,7 +145,7 @@ jobs: path: python/${{ env.OUTPUT_NAME }} retention-days: 7 - - name: Publish GT images to sgl-project/ci-data + - name: Publish GT images to sgl-project/ci-data-diffusion env: GITHUB_TOKEN: ${{ secrets.GH_PAT_FOR_NIGHTLY_CI_DATA }} run: | @@ -205,7 +215,7 @@ jobs: path: python/${{ env.OUTPUT_NAME }} retention-days: 7 - - name: Publish GT images to sgl-project/ci-data + - name: Publish GT images to sgl-project/ci-data-diffusion env: GITHUB_TOKEN: ${{ secrets.GH_PAT_FOR_NIGHTLY_CI_DATA }} run: | diff --git a/.github/workflows/diffusion-ci-gt-gen.yml b/.github/workflows/diffusion-ci-gt-gen.yml index 2c935f0a1..953b91e24 100644 --- a/.github/workflows/diffusion-ci-gt-gen.yml +++ b/.github/workflows/diffusion-ci-gt-gen.yml @@ -19,7 +19,7 @@ on: default: '' type: string publish_target_dir: - description: 'Remote target directory in sgl-project/ci-data. Leave empty to use sglang_generated, or official_generated when run_official_cases is true.' + description: 'Remote target directory in sgl-project/ci-data-diffusion. Leave empty to use sglang_generated, or official_generated when run_official_cases is true.' required: false default: '' type: string @@ -44,7 +44,7 @@ on: default: '' type: string ci_data_ref: - description: 'ci-data ref to use for repro scripts when running official GT cases.' + description: 'ci-data-diffusion ref to use for repro scripts when running official GT cases.' required: false default: 'main' type: string @@ -71,6 +71,16 @@ jobs: matrix: ${{ steps.compute.outputs.matrix }} case-count: ${{ steps.compute.outputs.case-count }} steps: + - name: Verify write access to sgl-project/ci-data-diffusion + env: + GH_TOKEN: ${{ secrets.GH_PAT_FOR_NIGHTLY_CI_DATA }} + run: | + if [ "$(gh api repos/sgl-project/ci-data-diffusion --jq .permissions.push)" != "true" ]; then + echo "::error::GH_PAT_FOR_NIGHTLY_CI_DATA lacks write (push) access to sgl-project/ci-data-diffusion. Grant it before running GT generation." + exit 1 + fi + echo "OK: write access to sgl-project/ci-data-diffusion confirmed" + - name: Compute official case matrix id: compute env: @@ -163,10 +173,10 @@ jobs: with: ref: ${{ inputs.ref || github.ref }} - - name: Checkout ci-data repro scripts + - name: Checkout ci-data-diffusion repro scripts uses: actions/checkout@v4 with: - repository: sgl-project/ci-data + repository: sgl-project/ci-data-diffusion ref: ${{ inputs.ci_data_ref || 'main' }} path: ci-data token: ${{ secrets.GH_PAT_FOR_NIGHTLY_CI_DATA }} @@ -303,7 +313,7 @@ jobs: --target-dir "${{ env.PUBLISH_TARGET_DIR }}" \ --check-only - - name: Publish official GT images to sgl-project/ci-data + - name: Publish official GT images to sgl-project/ci-data-diffusion env: GITHUB_TOKEN: ${{ secrets.GH_PAT_FOR_NIGHTLY_CI_DATA }} run: | @@ -335,6 +345,16 @@ jobs: with: python-version: '3.10' + - name: Verify write access to sgl-project/ci-data-diffusion + env: + GH_TOKEN: ${{ secrets.GH_PAT_FOR_NIGHTLY_CI_DATA }} + run: | + if [ "$(gh api repos/sgl-project/ci-data-diffusion --jq .permissions.push)" != "true" ]; then + echo "::error::GH_PAT_FOR_NIGHTLY_CI_DATA lacks write (push) access to sgl-project/ci-data-diffusion. Grant it before running GT generation." + exit 1 + fi + echo "OK: write access to sgl-project/ci-data-diffusion confirmed" + - name: Compute partitions id: compute run: | @@ -412,7 +432,7 @@ jobs: --target-dir "${{ env.PUBLISH_TARGET_DIR }}" \ --check-only - - name: Publish GT images to sgl-project/ci-data + - name: Publish GT images to sgl-project/ci-data-diffusion env: GITHUB_TOKEN: ${{ secrets.GH_PAT_FOR_NIGHTLY_CI_DATA }} run: | @@ -487,7 +507,7 @@ jobs: --target-dir "${{ env.PUBLISH_TARGET_DIR }}" \ --check-only - - name: Publish GT images to sgl-project/ci-data + - name: Publish GT images to sgl-project/ci-data-diffusion env: GITHUB_TOKEN: ${{ secrets.GH_PAT_FOR_NIGHTLY_CI_DATA }} run: | @@ -562,7 +582,7 @@ jobs: --target-dir "${{ env.PUBLISH_TARGET_DIR }}" \ --check-only - - name: Publish GT images to sgl-project/ci-data + - name: Publish GT images to sgl-project/ci-data-diffusion env: GITHUB_TOKEN: ${{ secrets.GH_PAT_FOR_NIGHTLY_CI_DATA }} run: | diff --git a/python/sglang/multimodal_gen/test/server/test_server_common.py b/python/sglang/multimodal_gen/test/server/test_server_common.py index c2b609403..67aeef975 100644 --- a/python/sglang/multimodal_gen/test/server/test_server_common.py +++ b/python/sglang/multimodal_gen/test/server/test_server_common.py @@ -626,13 +626,13 @@ class DiffusionServerBase: --- MISSING GROUND TRUTH DETECTED --- GT image(s) not found for '{case.id}'. -Add the expected file(s) to sgl-project/ci-data in diffusion-ci/consistency_gt/sglang_generated/ with naming (n=num_gpus). +Add the expected file(s) to sgl-project/ci-data-diffusion in diffusion-ci/consistency_gt/sglang_generated/ with naming (n=num_gpus). Image: {case.id}_{{n}}gpu. (ext from output_format: png, jpg, webp) Video: {case.id}_{{n}}gpu_frame_0.png, {case.id}_{{n}}gpu_frame_mid.png, {case.id}_{{n}}gpu_frame_last.png For this case, expected file(s): {names} -Repository: https://github.com/sgl-project/ci-data (path: diffusion-ci/consistency_gt/sglang_generated/, with optional platform subdirectories such as 5090/) +Repository: https://github.com/sgl-project/ci-data-diffusion (path: diffusion-ci/consistency_gt/sglang_generated/, with optional platform subdirectories such as 5090/) Pinned revision used by this check: {SGL_TEST_FILES_CI_DATA_REVISION} (Optional) Per-case override in {get_consistency_threshold_path()}: @@ -768,12 +768,12 @@ Pinned revision used by this check: {SGL_TEST_FILES_CI_DATA_REVISION} --- MISSING ACTION GROUND TRUTH DETECTED --- GT action JSON not found for '{case.id}'. -Add the expected file to sgl-project/ci-data in diffusion-ci/consistency_gt/sglang_generated/ with naming: +Add the expected file to sgl-project/ci-data-diffusion in diffusion-ci/consistency_gt/sglang_generated/ with naming: Action: {case.id}_{{n}}gpu.json For this case, expected file(s): {names} -Repository: https://github.com/sgl-project/ci-data (path: diffusion-ci/consistency_gt/sglang_generated/, with optional platform subdirectories such as 5090/) +Repository: https://github.com/sgl-project/ci-data-diffusion (path: diffusion-ci/consistency_gt/sglang_generated/, with optional platform subdirectories such as 5090/) Pinned revision used by this check: {SGL_TEST_FILES_CI_DATA_REVISION} """) pytest.fail( diff --git a/python/sglang/multimodal_gen/test/server/test_server_utils.py b/python/sglang/multimodal_gen/test/server/test_server_utils.py index 4b1b65dc4..d25091496 100644 --- a/python/sglang/multimodal_gen/test/server/test_server_utils.py +++ b/python/sglang/multimodal_gen/test/server/test_server_utils.py @@ -734,7 +734,9 @@ class MeshValidator(PerformanceValidator): # Pinned to a ci-data commit (not main): invalidates the per-URL download cache # whenever the reference is regenerated, and keeps the mesh GT reproducible. -# Bump this SHA when pushing a new hunyuan3d.glb to ci-data. +# New GT now publishes to sgl-project/ci-data-diffusion, so when you push a new +# hunyuan3d.glb, switch the repo in the URL below to it and bump the SHA together +# (this frozen SHA stays readable on sgl-project/ci-data). HUNYUAN3D_REFERENCE_URL = ( "https://raw.githubusercontent.com/sgl-project/ci-data/" "395f6e49c37d22a57d79fbcd3653d43984099ae2" diff --git a/python/sglang/multimodal_gen/test/test_utils.py b/python/sglang/multimodal_gen/test/test_utils.py index 4e83f2716..2c9d3093e 100644 --- a/python/sglang/multimodal_gen/test/test_utils.py +++ b/python/sglang/multimodal_gen/test/test_utils.py @@ -34,6 +34,14 @@ if TYPE_CHECKING: logger = init_logger(__name__) +# GT is read from @. A given SHA only exists in the repo it was +# committed to, so REPO and REVISION must be bumped together. New GT now +# publishes to sgl-project/ci-data-diffusion; the pins below still resolve +# against sgl-project/ci-data (readable but frozen). When you bump REVISION to a +# freshly generated commit, switch REPO to sgl-project/ci-data-diffusion too +# (and update the URL assertion in the consistency-metrics unit test). +SGL_TEST_FILES_CI_DATA_REPO = "sgl-project/ci-data" + SGL_TEST_FILES_CI_DATA_REVISION = "320949ecc2587474a2f535229ffc8f47ed16ee51" if current_platform.is_npu(): @@ -41,7 +49,7 @@ if current_platform.is_npu(): SGL_TEST_FILES_CONSISTENCY_GT_ROOT = ( "https://raw.githubusercontent.com/" - f"sgl-project/ci-data/{SGL_TEST_FILES_CI_DATA_REVISION}/" + f"{SGL_TEST_FILES_CI_DATA_REPO}/{SGL_TEST_FILES_CI_DATA_REVISION}/" "diffusion-ci/consistency_gt" ) SGL_TEST_FILES_OFFICIAL_CONSISTENCY_GT_BASE = ( diff --git a/scripts/ci/utils/diffusion/generate_diffusion_dashboard.py b/scripts/ci/utils/diffusion/generate_diffusion_dashboard.py index 0c2240f2a..a069b2463 100644 --- a/scripts/ci/utils/diffusion/generate_diffusion_dashboard.py +++ b/scripts/ci/utils/diffusion/generate_diffusion_dashboard.py @@ -1,6 +1,6 @@ """Generate a Markdown dashboard for SGLang-Diffusion nightly benchmarks. -Reads current comparison results + historical data from sgl-project/ci-data repo +Reads current comparison results + historical data from sgl-project/ci-data-diffusion repo and produces a Markdown report with tables and trend charts saved as PNG files. Usage: @@ -18,16 +18,16 @@ import os from datetime import datetime, timezone # --------------------------------------------------------------------------- -# History fetching (from sgl-project/ci-data repo via GitHub API) +# History fetching (from sgl-project/ci-data-diffusion repo via GitHub API) # --------------------------------------------------------------------------- CI_DATA_REPO_OWNER = "sgl-project" -CI_DATA_REPO_NAME = "ci-data" +CI_DATA_REPO_NAME = "ci-data-diffusion" CI_DATA_BRANCH = "main" HISTORY_PREFIX = "diffusion-comparisons" MAX_HISTORY_RUNS = 29 -# Base URL for chart images pushed to sgl-project/ci-data +# Base URL for chart images pushed to sgl-project/ci-data-diffusion CHARTS_RAW_BASE_URL = ( f"https://raw.githubusercontent.com/{CI_DATA_REPO_OWNER}/{CI_DATA_REPO_NAME}" f"/{CI_DATA_BRANCH}/{HISTORY_PREFIX}/charts" @@ -57,7 +57,7 @@ def _github_get(url: str, token: str) -> dict | list | None: def fetch_history_from_github(token: str) -> list[dict]: - """Fetch recent comparison result JSONs from sgl-project/ci-data repo.""" + """Fetch recent comparison result JSONs from sgl-project/ci-data-diffusion repo.""" print("Fetching historical comparison data from GitHub...") url = ( f"https://api.github.com/repos/{CI_DATA_REPO_OWNER}/{CI_DATA_REPO_NAME}" @@ -774,7 +774,7 @@ def main(): parser.add_argument( "--fetch-history", action="store_true", - help="Fetch history from ci-data GitHub repo", + help="Fetch history from ci-data-diffusion GitHub repo", ) parser.add_argument( "--step-summary", diff --git a/scripts/ci/utils/diffusion/publish_comparison_results.py b/scripts/ci/utils/diffusion/publish_comparison_results.py index a56a45876..7a5bae557 100644 --- a/scripts/ci/utils/diffusion/publish_comparison_results.py +++ b/scripts/ci/utils/diffusion/publish_comparison_results.py @@ -1,7 +1,7 @@ -"""Publish SGLang-Diffusion nightly benchmark results to sgl-project/ci-data repo. +"""Publish SGLang-Diffusion nightly benchmark results to sgl-project/ci-data-diffusion repo. Pushes comparison-results.json, dashboard.md, and chart PNG files to the -ci-data repository for historical tracking. Chart PNGs are stored under +ci-data-diffusion repository for historical tracking. Chart PNGs are stored under diffusion-comparisons/charts/ so they can be referenced via raw.githubusercontent URLs in the dashboard markdown (GitHub Step Summary blocks data: URIs). @@ -50,7 +50,7 @@ else: # Repository configuration REPO_OWNER = "sgl-project" -REPO_NAME = "ci-data" +REPO_NAME = "ci-data-diffusion" BRANCH = "main" STORAGE_PREFIX = "diffusion-comparisons" @@ -81,7 +81,7 @@ def publish_comparison( dashboard_path: str | None = None, charts_dir: str | None = None, ) -> None: - """Publish comparison results, dashboard, and charts to ci-data repo.""" + """Publish comparison results, dashboard, and charts to ci-data-diffusion repo.""" token = os.environ.get("GH_PAT_FOR_NIGHTLY_CI_DATA") or os.environ.get( "GITHUB_TOKEN" ) @@ -196,7 +196,7 @@ def publish_comparison( def main(): parser = argparse.ArgumentParser( - description="Publish SGLang-Diffusion nightly benchmark results to ci-data" + description="Publish SGLang-Diffusion nightly benchmark results to ci-data-diffusion" ) parser.add_argument( "--results", diff --git a/scripts/ci/utils/diffusion/publish_diffusion_gt.py b/scripts/ci/utils/diffusion/publish_diffusion_gt.py index b2b3745b1..e6f2604dd 100644 --- a/scripts/ci/utils/diffusion/publish_diffusion_gt.py +++ b/scripts/ci/utils/diffusion/publish_diffusion_gt.py @@ -1,5 +1,5 @@ """ -Publish diffusion CI ground-truth images to sgl-project/ci-data +Publish diffusion CI ground-truth images to sgl-project/ci-data-diffusion via the GitHub API (same pattern as publish_traces.py). """ @@ -48,7 +48,7 @@ else: ) REPO_OWNER = "sgl-project" -REPO_NAME = "ci-data" +REPO_NAME = "ci-data-diffusion" BRANCH = "main" DEFAULT_TARGET_DIR = "diffusion-ci/consistency_gt/sglang_generated"