From 6c0b055914484524ae23a16ae505c5cc5e3b288b Mon Sep 17 00:00:00 2001 From: Prathik Rao Date: Wed, 9 Sep 2026 11:41:52 -0700 Subject: [PATCH 1/5] refactor --- .../{v2 => }/docker/manylinux/Dockerfile | 0 .../{v2 => docs}/sdk_v2-js-pipeline-plan.md | 18 +- .../{v2 => docs}/sdk_v2-pipeline-plan.md | 66 +- .pipelines/foundry-local-packaging.yml | 132 +- .pipelines/templates/checkout-steps.yml | 74 - .../templates/stages-build-native.yml | 0 .pipelines/{v2 => }/templates/stages-cs.yml | 15 +- .pipelines/{v2 => }/templates/stages-js.yml | 27 +- .../{v2 => }/templates/stages-python.yml | 28 +- .pipelines/{v2 => }/templates/stages-rust.yml | 39 +- .../{v2 => }/templates/stages-sdk-v2.yml | 0 .../{v2 => }/templates/steps-build-cs.yml | 1 - .../{v2 => }/templates/steps-build-js.yml | 9 + .../{v2 => }/templates/steps-build-linux.yml | 18 +- .../{v2 => }/templates/steps-build-macos.yml | 2 +- .../{v2 => }/templates/steps-build-python.yml | 17 +- .../{v2 => }/templates/steps-build-rust.yml | 38 +- .../templates/steps-build-windows.yml | 2 +- .../{v2 => }/templates/steps-pack-cpp-sdk.yml | 0 .../{v2 => }/templates/steps-pack-js.yml | 9 + .../{v2 => }/templates/steps-pack-nuget.yml | 0 .../templates/steps-prefetch-nuget.yml | 0 .../{v2 => }/templates/steps-test-cs.yml | 8 +- .../{v2 => }/templates/steps-test-js.yml | 24 +- .../{v2 => }/templates/steps-test-python.yml | 20 +- .pipelines/v1/templates/build-core-steps.yml | 177 -- .pipelines/v1/templates/build-cs-steps.yml | 199 --- .../v1/templates/build-js-addon-steps.yml | 45 - .pipelines/v1/templates/build-js-steps.yml | 221 --- .../v1/templates/build-python-steps.yml | 227 --- .pipelines/v1/templates/build-rust-steps.yml | 221 --- .../v1/templates/package-core-steps.yml | 345 ---- .pipelines/v1/templates/stages-sdk-v1.yml | 1523 ----------------- .pipelines/v1/templates/test-cs-steps.yml | 149 -- .pipelines/v1/templates/test-js-steps.yml | 156 -- .pipelines/v1/templates/test-python-steps.yml | 180 -- .pipelines/v1/templates/test-rust-steps.yml | 136 -- .../templates/update-deps-versions-steps.yml | 44 - sdk_v2/cpp/CMakeLists.txt | 2 +- sdk_v2/cpp/cmake/FindOnnxRuntime.cmake | 22 +- sdk_v2/cpp/cmake/FindOnnxRuntimeGenAI.cmake | 18 +- sdk_v2/cpp/cmake/FindWinMLEpCatalog.cmake | 4 +- sdk_v2/cs/NuGet.config | 4 +- sdk_v2/js/package-lock.json | 248 +-- sdk_v2/js/script/install-native.cjs | 3 +- sdk_v2/rust/build.rs | 2 +- sdk_v2/rust/build_support.rs | 3 +- 47 files changed, 375 insertions(+), 4101 deletions(-) rename .pipelines/{v2 => }/docker/manylinux/Dockerfile (100%) rename .pipelines/{v2 => docs}/sdk_v2-js-pipeline-plan.md (94%) rename .pipelines/{v2 => docs}/sdk_v2-pipeline-plan.md (89%) delete mode 100644 .pipelines/templates/checkout-steps.yml rename .pipelines/{v2 => }/templates/stages-build-native.yml (100%) rename .pipelines/{v2 => }/templates/stages-cs.yml (92%) rename .pipelines/{v2 => }/templates/stages-js.yml (92%) rename .pipelines/{v2 => }/templates/stages-python.yml (94%) rename .pipelines/{v2 => }/templates/stages-rust.yml (86%) rename .pipelines/{v2 => }/templates/stages-sdk-v2.yml (100%) rename .pipelines/{v2 => }/templates/steps-build-cs.yml (98%) rename .pipelines/{v2 => }/templates/steps-build-js.yml (97%) rename .pipelines/{v2 => }/templates/steps-build-linux.yml (88%) rename .pipelines/{v2 => }/templates/steps-build-macos.yml (98%) rename .pipelines/{v2 => }/templates/steps-build-python.yml (95%) rename .pipelines/{v2 => }/templates/steps-build-rust.yml (87%) rename .pipelines/{v2 => }/templates/steps-build-windows.yml (98%) rename .pipelines/{v2 => }/templates/steps-pack-cpp-sdk.yml (100%) rename .pipelines/{v2 => }/templates/steps-pack-js.yml (88%) rename .pipelines/{v2 => }/templates/steps-pack-nuget.yml (100%) rename .pipelines/{v2 => }/templates/steps-prefetch-nuget.yml (100%) rename .pipelines/{v2 => }/templates/steps-test-cs.yml (96%) rename .pipelines/{v2 => }/templates/steps-test-js.yml (85%) rename .pipelines/{v2 => }/templates/steps-test-python.yml (90%) delete mode 100644 .pipelines/v1/templates/build-core-steps.yml delete mode 100644 .pipelines/v1/templates/build-cs-steps.yml delete mode 100644 .pipelines/v1/templates/build-js-addon-steps.yml delete mode 100644 .pipelines/v1/templates/build-js-steps.yml delete mode 100644 .pipelines/v1/templates/build-python-steps.yml delete mode 100644 .pipelines/v1/templates/build-rust-steps.yml delete mode 100644 .pipelines/v1/templates/package-core-steps.yml delete mode 100644 .pipelines/v1/templates/stages-sdk-v1.yml delete mode 100644 .pipelines/v1/templates/test-cs-steps.yml delete mode 100644 .pipelines/v1/templates/test-js-steps.yml delete mode 100644 .pipelines/v1/templates/test-python-steps.yml delete mode 100644 .pipelines/v1/templates/test-rust-steps.yml delete mode 100644 .pipelines/v1/templates/update-deps-versions-steps.yml diff --git a/.pipelines/v2/docker/manylinux/Dockerfile b/.pipelines/docker/manylinux/Dockerfile similarity index 100% rename from .pipelines/v2/docker/manylinux/Dockerfile rename to .pipelines/docker/manylinux/Dockerfile diff --git a/.pipelines/v2/sdk_v2-js-pipeline-plan.md b/.pipelines/docs/sdk_v2-js-pipeline-plan.md similarity index 94% rename from .pipelines/v2/sdk_v2-js-pipeline-plan.md rename to .pipelines/docs/sdk_v2-js-pipeline-plan.md index 1e3a04903..ba417bd66 100644 --- a/.pipelines/v2/sdk_v2-js-pipeline-plan.md +++ b/.pipelines/docs/sdk_v2-js-pipeline-plan.md @@ -99,13 +99,13 @@ Build and test on the `onnxruntime-linux-ARM64-CPU-2019` pool - `NodeTool@0` for Node 20. - Drop `js-prebuild-` contents into `sdk_v2/js/prebuilds/`. -- Check out `test-data-shared` via `checkout-steps.yml`. -- On macOS, `brew install git-lfs` before checkout (same as Python). +- Fetch the model cache via `fetch-models-from-artifacts-feed.yml`. +- On macOS, ensure the test data directory is present and writable before the run. - `npm ci --no-audit --no-fund` (no `--ignore-scripts` — install-native is allowed to run on the test side; it's a no-op when the prebuild is already in place). - `npm run build:ts`, then `npx vitest run --reporter=verbose` with - `FOUNDRY_TEST_DATA_DIR=$(testDataSharedDir)`. + `FOUNDRY_TEST_DATA_DIR=$(Build.SourcesDirectory)/test-data-shared`. ## Pack stage @@ -140,7 +140,7 @@ signing. | `js_pack` | none | n/a | `.tgz` not signed by npm convention | Windows signing block is a near-copy of the SDK DLL signing step in -[`steps-build-cs.yml`](templates/steps-build-cs.yml) — same +[`steps-build-cs.yml`](../templates/steps-build-cs.yml) — same `ConnectedServiceName`, ESRP variable group (`FoundryLocal-ESRP-Signing`), and `signConfigType: inlineSignParams` shape. @@ -148,13 +148,13 @@ shape. ## Files added / modified **New:** -- [`.pipelines/v2/templates/stages-js.yml`](templates/stages-js.yml) -- [`.pipelines/v2/templates/steps-build-js.yml`](templates/steps-build-js.yml) -- [`.pipelines/v2/templates/steps-test-js.yml`](templates/steps-test-js.yml) -- [`.pipelines/v2/templates/steps-pack-js.yml`](templates/steps-pack-js.yml) +- [`.pipelines/templates/stages-js.yml`](../templates/stages-js.yml) +- [`.pipelines/templates/steps-build-js.yml`](../templates/steps-build-js.yml) +- [`.pipelines/templates/steps-test-js.yml`](../templates/steps-test-js.yml) +- [`.pipelines/templates/steps-pack-js.yml`](../templates/steps-pack-js.yml) **Modified:** -- [`.pipelines/v2/templates/stages-sdk-v2.yml`](templates/stages-sdk-v2.yml) +- [`.pipelines/templates/stages-sdk-v2.yml`](../templates/stages-sdk-v2.yml) — appends `stages-js.yml`. - [`sdk_v2/js/script/gyp/print-import-lib-dir.mjs`](../../sdk_v2/js/script/gyp/print-import-lib-dir.mjs) — honors `FOUNDRY_LOCAL_LIB_DIR`. diff --git a/.pipelines/v2/sdk_v2-pipeline-plan.md b/.pipelines/docs/sdk_v2-pipeline-plan.md similarity index 89% rename from .pipelines/v2/sdk_v2-pipeline-plan.md rename to .pipelines/docs/sdk_v2-pipeline-plan.md index 44fc170f6..3c3a020a5 100644 --- a/.pipelines/v2/sdk_v2-pipeline-plan.md +++ b/.pipelines/docs/sdk_v2-pipeline-plan.md @@ -21,10 +21,9 @@ JS is documented separately in `sdk_v2-js-pipeline-plan.md`. A standalone There is **no dedicated sdk_v2 top-level pipeline**. The sdk_v2 stage graph is emitted by a single coordinator template, -`.pipelines/v2/templates/stages-sdk-v2.yml`, which is included by the +`.pipelines/templates/stages-sdk-v2.yml`, which is included by the existing `.pipelines/foundry-local-packaging.yml`. sdk_v2 is built -unconditionally on every run (there is no v2 gate); the v1 legacy stages -are gated separately via `.pipelines/v1/templates/stages-sdk-v1.yml`. +unconditionally on every run. ## Supported platforms @@ -54,10 +53,10 @@ are gated separately via `.pipelines/v1/templates/stages-sdk-v1.yml`. ORT and GenAI native libraries are **not** bundled in the wheel; they are resolved at install time from public PyPI (see decision 9). The wheel only contains `foundry_local` plus its non-ORT runtime closure. -4. **Test stages set `FOUNDRY_TEST_DATA_DIR`** to the checked-out - `test-data-shared` path for all three languages. C++ stages set it - directly; Python's `conftest.py` reads it; C# `Utils.cs` prefers it - over `appsettings.Test.json`. +4. **Test stages set `FOUNDRY_TEST_DATA_DIR`** to the local model-cache path + for all three languages. C++ stages set it directly; Python's + `conftest.py` reads it; C# `Utils.cs` prefers it over + `appsettings.Test.json`. 5. **Parameter naming.** sdk_v2 templates use `flNugetDir` (not `flcNugetDir`). `flc` was Foundry Local Core, which we are replacing. 6. **Shared `compute_version` stage.** Defined inline in @@ -129,7 +128,9 @@ are gated separately via `.pipelines/v1/templates/stages-sdk-v1.yml`. ## Template layout ``` -.pipelines/v2/ +.pipelines/ +├── docker/ +├── docs/ └── templates/ ├── stages-sdk-v2.yml # Coordinator: native + C# + Python + JS + Rust ├── stages-build-native.yml # 5 native build stages + C++/NuGet pack stages @@ -149,9 +150,10 @@ are gated separately via `.pipelines/v1/templates/stages-sdk-v1.yml`. └── steps-pack-nuget.yml # Runs sdk_v2/cpp/nuget/pack.py ``` -The repo-shared `.pipelines/templates/checkout-steps.yml` is reused for -`test-data-shared` (LFS) checkout via the `FoundryLocalCore-SP` Azure CLI -service connection. +The repo-shared `.pipelines/templates/fetch-models-from-artifacts-feed.yml` +pre-populates the local model cache from the AIFoundryLocal public artifacts +feed, so every test stage can point `FOUNDRY_TEST_DATA_DIR` at the same +staged cache without a Git checkout dependency. ## Stage dependency graph @@ -231,8 +233,8 @@ hand off, so: matrices. * Integration tests run with `--test-threads=1`: the native core enforces a single `FoundryLocalManager` per process, so tests that each create one must - not run concurrently. They consume the same `test-data-shared` models as the - C# / Python suites (`FOUNDRY_TEST_DATA_DIR`). + not run concurrently. They consume the same model cache as the C# / Python + suites (`FOUNDRY_TEST_DATA_DIR`). ## Versioning @@ -268,11 +270,9 @@ Pipeline parameters allow override: ## Dependency versions The pipeline pins ORT / GenAI / WinML versions and downloads the NuGet -packages from **public nuget.org** (`https://www.nuget.org/api/v2/package`) -before invoking CMake. This matches Foundry Local Core's own -[nuget.config](../templates/build-core-steps.yml), which maps everything -except `Microsoft.Telemetry*` to nuget.org. Pre-fetching serves two -purposes: +packages through `AIFoundryLocal_PublicPackages` before invoking CMake. +The feed provides the approved upstreams while preventing pipeline jobs from +accessing public package feeds directly. Pre-fetching serves two purposes: 1. **Version pinning** — the `KEY=PATH` pairs are passed via `--cmake_extra_defines` (`ORT_FETCH_URL`, `GENAI_FETCH_URL`, @@ -298,17 +298,17 @@ a PowerShell and a bash implementation behind a `shell` parameter. The PowerShell build steps consume its `cmakeFetchDefines` variable; Linux container builds use the downloaded package paths directly. -WinML downloads `Microsoft.Windows.AI.MachineLearning` directly from -nuget.org as a single self-contained reg-free package — no transitive -WinAppSDK Foundation resolution needed. The bash branch fails fast if -`includeWinml=true` is ever passed — WinML is Windows-only. +WinML downloads `Microsoft.Windows.AI.MachineLearning` through +`AIFoundryLocal_PublicPackages` as a single self-contained reg-free package, +so no transitive WinAppSDK Foundation resolution is needed. The bash branch +fails fast if `includeWinml=true` is ever passed because WinML is Windows-only. ## Test data -All three SDKs honor `FOUNDRY_TEST_DATA_DIR` (env var) pointing at a -checked-out `test-data-shared` working tree. CI test stages check out -`test-data-shared` (LFS) via `.pipelines/templates/checkout-steps.yml` and -set the env var. SDK *build* stages do not need test-data-shared. +All three SDKs honor `FOUNDRY_TEST_DATA_DIR` (env var) pointing at a local +model cache directory. CI test stages fetch models via +`.pipelines/templates/fetch-models-from-artifacts-feed.yml` and set the env +var. SDK *build* stages do not need the model cache. Test data is fetched on every stage that runs tests: @@ -362,7 +362,7 @@ Build output directories follow `build.py`'s convention: ## Things explicitly out of scope - No `foundry-local-runtime` standalone wheel. -- No multi-repo `Foundry-Local`/`test-data-shared` path-juggling logic in +- No multi-repo `Foundry-Local`/shared-cache path-juggling logic in the sdk_v2 templates — sdk_v2 paths are repo-relative. - No private Azure DevOps feed dependency for the Python wheel install path — ORT/GenAI come from public PyPI (decision 9). @@ -382,11 +382,11 @@ Build output directories follow `build.py`'s convention: ## Files -* Coordinator: [stages-sdk-v2.yml](templates/stages-sdk-v2.yml) -* Native build/pack: [templates/stages-build-native.yml](templates/stages-build-native.yml) -* C# stages: [templates/stages-cs.yml](templates/stages-cs.yml) -* Python stages: [templates/stages-python.yml](templates/stages-python.yml) -* Rust stages: [templates/stages-rust.yml](templates/stages-rust.yml), [templates/steps-build-rust.yml](templates/steps-build-rust.yml) -* Pre-fetch: [templates/steps-prefetch-nuget.yml](templates/steps-prefetch-nuget.yml) +* Coordinator: [stages-sdk-v2.yml](../templates/stages-sdk-v2.yml) +* Native build/pack: [templates/stages-build-native.yml](../templates/stages-build-native.yml) +* C# stages: [templates/stages-cs.yml](../templates/stages-cs.yml) +* Python stages: [templates/stages-python.yml](../templates/stages-python.yml) +* Rust stages: [templates/stages-rust.yml](../templates/stages-rust.yml), [templates/steps-build-rust.yml](../templates/steps-build-rust.yml) +* Pre-fetch: [templates/steps-prefetch-nuget.yml](../templates/steps-prefetch-nuget.yml) * Pack tool: [sdk_v2/cpp/nuget/pack.py](../../sdk_v2/cpp/nuget/pack.py) * Top-level pipeline: [foundry-local-packaging.yml](../foundry-local-packaging.yml) diff --git a/.pipelines/foundry-local-packaging.yml b/.pipelines/foundry-local-packaging.yml index 2ee3d2e0b..de499041e 100644 --- a/.pipelines/foundry-local-packaging.yml +++ b/.pipelines/foundry-local-packaging.yml @@ -1,11 +1,8 @@ # Foundry Local Packaging Pipeline # -# Builds Foundry Local Core from neutron-server (windows.ai.toolkit project), -# then packages the C# and JS SDKs from this repo using the built Core. +# Builds the sdk_v2 native runtime and packages the C#, JS, Python, and Rust SDKs. # -# Produces artifacts: flc-nuget, flc-nuget-winml, flc-wheels, flc-wheels-winml, -# cs-sdk, cs-sdk-winml, js-sdk, js-sdk-winml, python-sdk, python-sdk-winml, -# rust-sdk, rust-sdk-winml +# Produces the sdk_v2 native runtime, C#, JS, Python, and Rust artifacts. # CI: only auto-run on pushes to main / release branches. Without an explicit # trigger block, ADO defaults to "every commit on every branch", which fires @@ -30,10 +27,6 @@ parameters: displayName: 'Package version (sdk_v2/...)' type: string default: '2.0.0' -- name: versionV1 - displayName: 'Package version (sdk/...)' - type: string - default: '1.3.0' - name: prereleaseId displayName: 'Pre-release identifier (e.g. rc1, beta).' type: string @@ -42,14 +35,6 @@ parameters: displayName: 'Release build' type: boolean default: false -- name: buildV1 - displayName: 'Force build v1 sdk. If unchecked, auto-detected from PR changes.' - type: boolean - default: false -- name: neutronServerBranch - displayName: 'Foundry Local Core branch (windows.ai.toolkit/neutron-server)' - type: string - default: 'dev/FoundryLocalCore/main' variables: - group: FoundryLocal-ESRP-Signing @@ -90,93 +75,13 @@ extends: break: false scanOutputDirectoryOnly: true stages: - # ── Detect Changed Paths ── - # Decides whether the legacy sdk/ branch should run. sdk_v2 always builds, - # so there is no buildV2 flag here. Emits one output variable on the - # `setflags` job: `buildV1` ("true"/"false"). - # - # Rules: - # * `buildV1` parameter set true => buildV1 = true. - # * Otherwise => buildV1 = true iff this branch has changes under sdk/ - # relative to its base. Base is the PR target branch when available, - # else origin/main. If that range is empty (e.g. post-merge CI build - # of main itself), fall back to the latest commit's diff so a merge - # that touched sdk/ still triggers v1. Branches forked off something - # other than main and built outside a PR will over-trigger; that's - # acceptable — release branches aren't expected to touch sdk/. - - stage: detect_changes - displayName: 'Detect Changed Paths' - dependsOn: [] - jobs: - - job: setflags - displayName: 'Compute build flags' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - steps: - - checkout: self - fetchDepth: 0 - - task: PowerShell@2 - name: setflags - displayName: 'Detect changed paths and set buildV1' - inputs: - targetType: inline - pwsh: true - script: | - $forceV1 = "${{ parameters.buildV1 }}" -eq "True" - - if ($forceV1) { - $buildV1 = $true - Write-Host "Manual override: buildV1=$buildV1" - } else { - # Read via env var so PowerShell doesn't mis-parse the literal - # '$(System.PullRequest.TargetBranch)' as a subexpression when - # ADO leaves it unresolved on non-PR runs. Env var is empty - # (not undefined) when the variable isn't set. - $prTarget = $env:SYSTEM_PULLREQUEST_TARGETBRANCH - if (-not [string]::IsNullOrEmpty($prTarget)) { - # Typically "refs/heads/"; normalize to a short name for git fetch + origin/ refs. - $baseBranch = $prTarget -replace '^refs/heads/', '' - Write-Host "Base branch (from PR target): $baseBranch" - } else { - $baseBranch = "main" - Write-Host "Base branch (fallback): $baseBranch" - } - - git fetch --no-tags --depth=50 origin $baseBranch 2>&1 | Out-Null - $diffRange = "origin/$baseBranch...HEAD" - $changed = @(git diff --name-only $diffRange) - Write-Host "Changed files vs $diffRange ($($changed.Count)):" - $changed | ForEach-Object { Write-Host " $_" } - - # On a build of the base branch itself (e.g. post-merge CI on main), - # the range above is empty. Fall back to the latest commit's diff so - # a merge that touched sdk/ still triggers v1. - if ($changed.Count -eq 0) { - $diffRange = "HEAD~1...HEAD" - $changed = @(git diff --name-only $diffRange) - Write-Host "Empty range vs base; falling back to $diffRange ($($changed.Count)):" - $changed | ForEach-Object { Write-Host " $_" } - } - - $buildV1 = @($changed | Where-Object { $_ -like 'sdk/*' }).Count -gt 0 - Write-Host "Auto-detected: buildV1=$buildV1" - } - - $v1 = $buildV1.ToString().ToLower() - Write-Host "##vso[task.setvariable variable=buildV1;isOutput=true]$v1" - # ── Compute Version ── # A single version string is computed once and shared across all stages. # This prevents timestamp drift between standard and WinML builds. # Outputs (written to the `version-info` pipeline artifact): - # sdk_v2 (no suffix; FLC is legacy-only and not emitted here): + # sdk_v2: # sdkVersion.txt – semver for C# (e.g. X.Y.Z-dev.202604061234) # pyVersion.txt – PEP 440 for Python (e.g. X.Y.Z.dev202604061234) - # Legacy sdk/ (.v1. suffix): - # sdkVersion.v1.txt – semver for JS, C#, Rust - # pyVersion.v1.txt – PEP 440 for Python - # flcVersion.v1.txt – NuGet/FLC style - stage: compute_version displayName: 'Compute Version' dependsOn: [] @@ -227,46 +132,19 @@ extends: } } - $v2 = Compute-Versions "${{ parameters.version }}" $false - $v1 = Compute-Versions "${{ parameters.versionV1 }}" $true + $v2 = Compute-Versions "${{ parameters.version }}" $false $outDir = "$(Build.ArtifactStagingDirectory)/version-info" New-Item -ItemType Directory -Path $outDir -Force | Out-Null - # sdk_v2 versions (canonical, no suffix). No flcVersion — v2 - # does not consume Foundry Local Core. Set-Content -Path "$outDir/sdkVersion.txt" -Value $v2.sdk -NoNewline Set-Content -Path "$outDir/pyVersion.txt" -Value $v2.py -NoNewline - # Legacy sdk/ versions (.v1. suffix). - Set-Content -Path "$outDir/sdkVersion.v1.txt" -Value $v1.sdk -NoNewline - Set-Content -Path "$outDir/pyVersion.v1.txt" -Value $v1.py -NoNewline - Set-Content -Path "$outDir/flcVersion.v1.txt" -Value $v1.flc -NoNewline - Write-Host "v2 SDK version: $($v2.sdk)" Write-Host "v2 Python version: $($v2.py)" - Write-Host "v1 SDK version: $($v1.sdk)" - Write-Host "v1 Python version: $($v1.py)" - Write-Host "v1 FLC version: $($v1.flc)" - - # -- sdk_v1 (sdk/) C++ Core (FLC) + C# / JS / Python / Rust SDKs -- - # Entire subgraph is gated by a single artificial root stage (`v1_gate`) - # defined inside stages-sdk-v1.yml. When detect_changes.buildV1 is false, - # v1_gate is skipped and every downstream v1 stage skips via the default - # `succeeded()` cascade. - - template: v1/templates/stages-sdk-v1.yml - parameters: - gateCondition: eq(dependencies.detect_changes.outputs['setflags.setflags.buildV1'], 'true') - gateDependsOn: [detect_changes] - version: ${{ parameters.versionV1 }} - prereleaseId: ${{ parameters.prereleaseId }} - isRelease: ${{ parameters.isRelease }} - neutronServerBranch: ${{ parameters.neutronServerBranch }} - - # ── sdk_v2 (C++ native + C# SDK + Python SDK) ── # Built unconditionally on every run; no detect_changes gate. - - template: v2/templates/stages-sdk-v2.yml + - template: templates/stages-sdk-v2.yml parameters: buildConfig: $(cppBuildConfig) ortVersion: $(cppOrtVersion) diff --git a/.pipelines/templates/checkout-steps.yml b/.pipelines/templates/checkout-steps.yml deleted file mode 100644 index 601eacf56..000000000 --- a/.pipelines/templates/checkout-steps.yml +++ /dev/null @@ -1,74 +0,0 @@ -# Clones an Azure DevOps Git repo using a service connection. -# Replaces `checkout: ` for repos that cannot use PAT-based endpoints. -# -# The repo is cloned into $(Build.SourcesDirectory)/ to match the -# directory layout that multi-checkout produces. -parameters: -- name: repoName - type: string - displayName: 'Repository name (also used as the checkout directory name)' -- name: ref - type: string - default: 'refs/heads/main' - displayName: 'Git ref to checkout (branch, tag, or commit SHA)' -- name: basePath - type: string - default: '$(Build.SourcesDirectory)' - displayName: 'Base directory to clone into (repo will be at basePath/repoName)' - -steps: -- task: AzureCLI@2 - displayName: 'Checkout ${{ parameters.repoName }}' - inputs: - azureSubscription: 'FoundryLocalCore-SP' - scriptType: pscore - scriptLocation: inlineScript - inlineScript: | - $ErrorActionPreference = 'Stop' - - $repoDir = "${{ parameters.basePath }}/${{ parameters.repoName }}" - $ref = "${{ parameters.ref }}" - - # Obtain bearer token scoped to Azure DevOps - $token = az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query accessToken -o tsv - if ($LASTEXITCODE -ne 0 -or -not $token) { throw "Failed to obtain access token" } - - # Embed the token directly in the remote URL for reliable auth - $repoUrl = "https://oauth:${token}@dev.azure.com/microsoft/windows.ai.toolkit/_git/${{ parameters.repoName }}" - - # Always clean to avoid conflicts with stale state from agent reuse - if (Test-Path $repoDir) { - Write-Host "Cleaning existing directory: $repoDir" - Remove-Item -Recurse -Force $repoDir - } - - # Create and init - New-Item -ItemType Directory -Path $repoDir -Force | Out-Null - Push-Location $repoDir - git init - git remote add origin $repoUrl - - # Fetch — use shallow clone for test-data-shared (no NBGV), full clone for others - $branch = $ref -replace '^refs/heads/', '' - $repoName = '${{ parameters.repoName }}' - if ($repoName -eq 'test-data-shared') { - git fetch origin $branch --depth=1 - } else { - git fetch origin $branch - } - if ($LASTEXITCODE -ne 0) { throw "git fetch failed for ${{ parameters.repoName }}" } - - # Checkout - git checkout "origin/$branch" -B $branch - if ($LASTEXITCODE -ne 0) { throw "git checkout failed for ${{ parameters.repoName }} at ref $ref" } - - # LFS — enable for test-data-shared (contains LFS-tracked test data) - if ($repoName -eq 'test-data-shared') { - Write-Host "Pulling LFS objects..." - git lfs install --local - git lfs pull - if ($LASTEXITCODE -ne 0) { throw "git lfs pull failed for ${{ parameters.repoName }}" } - } - - Pop-Location - Write-Host "Checked out ${{ parameters.repoName }} at $(git -C $repoDir rev-parse HEAD)" diff --git a/.pipelines/v2/templates/stages-build-native.yml b/.pipelines/templates/stages-build-native.yml similarity index 100% rename from .pipelines/v2/templates/stages-build-native.yml rename to .pipelines/templates/stages-build-native.yml diff --git a/.pipelines/v2/templates/stages-cs.yml b/.pipelines/templates/stages-cs.yml similarity index 92% rename from .pipelines/v2/templates/stages-cs.yml rename to .pipelines/templates/stages-cs.yml index 395145890..55224b6df 100644 --- a/.pipelines/v2/templates/stages-cs.yml +++ b/.pipelines/templates/stages-cs.yml @@ -67,13 +67,12 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml parameters: scriptType: ps - template: steps-test-cs.yml parameters: flNugetDir: '$(Pipeline.Workspace)/cpp-nuget' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' - stage: cs_test_win_arm64 displayName: 'C# SDK: Test Windows ARM64' @@ -96,13 +95,12 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml parameters: scriptType: ps - template: steps-test-cs.yml parameters: flNugetDir: '$(Pipeline.Workspace)/cpp-nuget' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' # ==================================================================== # Test — Linux x64 @@ -127,11 +125,10 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-test-cs.yml parameters: flNugetDir: '$(Pipeline.Workspace)/cpp-nuget' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' # ==================================================================== # Test — Linux ARM64 @@ -157,11 +154,10 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-test-cs.yml parameters: flNugetDir: '$(Pipeline.Workspace)/cpp-nuget' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' # ==================================================================== # Test — macOS ARM64 @@ -188,11 +184,10 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-test-cs.yml parameters: flNugetDir: '$(Pipeline.Workspace)/cpp-nuget' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' additionalTestArgs: '--settings $(Build.SourcesDirectory)/sdk_v2/cs/test/FoundryLocal.Tests/sequential.runsettings' # ==================================================================== diff --git a/.pipelines/v2/templates/stages-js.yml b/.pipelines/templates/stages-js.yml similarity index 92% rename from .pipelines/v2/templates/stages-js.yml rename to .pipelines/templates/stages-js.yml index c054ecc5c..8ffa641f2 100644 --- a/.pipelines/v2/templates/stages-js.yml +++ b/.pipelines/templates/stages-js.yml @@ -208,12 +208,11 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-test-js.yml parameters: rid: 'win-x64' prebuildArtifactDir: '$(Pipeline.Workspace)/js-prebuild-win-x64' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' - stage: js_test_win_arm64 displayName: 'JS SDK: Test Windows ARM64' @@ -233,14 +232,13 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml parameters: scriptType: ps - template: steps-test-js.yml parameters: rid: 'win-arm64' prebuildArtifactDir: '$(Pipeline.Workspace)/js-prebuild-win-arm64' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' - stage: js_test_linux_x64 displayName: 'JS SDK: Test Linux x64' @@ -259,12 +257,11 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-test-js.yml parameters: rid: 'linux-x64' prebuildArtifactDir: '$(Pipeline.Workspace)/js-prebuild-linux-x64' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' - stage: js_test_linux_arm64 displayName: 'JS SDK: Test Linux ARM64' @@ -284,12 +281,11 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-test-js.yml parameters: rid: 'linux-arm64' prebuildArtifactDir: '$(Pipeline.Workspace)/js-prebuild-linux-arm64' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' - stage: js_test_osx_arm64 displayName: 'JS SDK: Test macOS ARM64' @@ -310,12 +306,11 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-test-js.yml parameters: rid: 'osx-arm64' prebuildArtifactDir: '$(Pipeline.Workspace)/js-prebuild-osx-arm64' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' # ===================================================================== # Pack stage — runs after all five builds. Pure packaging on Windows. @@ -390,6 +385,16 @@ stages: displayName: 'Use Node.js 20' inputs: versionSpec: '20.x' + - task: PowerShell@2 + displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' + inputs: + targetType: inline + script: | + Set-Content '$(Agent.TempDirectory)/js-sdk-package-test.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' + - task: npmAuthenticate@0 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' + inputs: + workingFile: '$(Agent.TempDirectory)/js-sdk-package-test.npmrc' - task: PowerShell@2 displayName: 'Run packaged JS basic_chat sample' inputs: @@ -420,3 +425,5 @@ stages: if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } env: FOUNDRY_LOCAL_SAMPLE_CACHE_DIR: '$(Agent.TempDirectory)/js-package-model-cache' + FOUNDRY_LOCAL_NUGET_FEEDS: 'https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json' + NPM_CONFIG_USERCONFIG: '$(Agent.TempDirectory)/js-sdk-package-test.npmrc' diff --git a/.pipelines/v2/templates/stages-python.yml b/.pipelines/templates/stages-python.yml similarity index 94% rename from .pipelines/v2/templates/stages-python.yml rename to .pipelines/templates/stages-python.yml index e01f9eb1e..93209df5f 100644 --- a/.pipelines/v2/templates/stages-python.yml +++ b/.pipelines/templates/stages-python.yml @@ -198,13 +198,12 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/checkout-steps.yml@self + - template: fetch-models-from-artifacts-feed.yml parameters: - repoName: test-data-shared + scriptType: ps - template: steps-test-python.yml parameters: wheelDir: '$(Pipeline.Workspace)/python-sdk-win-x64' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' - stage: python_test_win_arm64 displayName: 'Python SDK: Test Windows ARM64' @@ -224,13 +223,12 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml parameters: scriptType: ps - template: steps-test-python.yml parameters: wheelDir: '$(Pipeline.Workspace)/python-sdk-win-arm64' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' pythonArchitecture: 'arm64' - stage: python_test_linux_x64 @@ -250,11 +248,10 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-test-python.yml parameters: wheelDir: '$(Pipeline.Workspace)/python-sdk-linux-x64' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' useSystemPython: true - stage: python_test_linux_arm64 @@ -275,11 +272,10 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-test-python.yml parameters: wheelDir: '$(Pipeline.Workspace)/python-sdk-linux-arm64' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' useSystemPython: true - stage: python_test_osx_arm64 @@ -301,11 +297,10 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-test-python.yml parameters: wheelDir: '$(Pipeline.Workspace)/python-sdk-osx-arm64' - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' pythonArchitecture: 'arm64' # ================================================================ @@ -414,6 +409,17 @@ stages: versionSpec: '3.12' addToPath: true architecture: 'x64' + - task: PipAuthenticate@1 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' + inputs: + artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' + - task: PowerShell@2 + displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' + inputs: + targetType: inline + script: | + pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ + pip config unset global.extra-index-url 2>$null - task: PowerShell@2 displayName: 'Run packaged Python chat_completion sample' inputs: diff --git a/.pipelines/v2/templates/stages-rust.yml b/.pipelines/templates/stages-rust.yml similarity index 86% rename from .pipelines/v2/templates/stages-rust.yml rename to .pipelines/templates/stages-rust.yml index c8ee1aa9b..ef46b9fc3 100644 --- a/.pipelines/v2/templates/stages-rust.yml +++ b/.pipelines/templates/stages-rust.yml @@ -42,13 +42,12 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-build-rust.yml parameters: rid: 'win-x64' nativeArtifactDir: '$(Pipeline.Workspace)/cpp-native-win-x64' runTests: true - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' - stage: rust_build_win_arm64 displayName: 'Rust SDK: Build Windows ARM64 (cross)' @@ -99,13 +98,12 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-build-rust.yml parameters: rid: 'linux-x64' nativeArtifactDir: '$(Pipeline.Workspace)/cpp-native-linux-x64' runTests: true - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' - stage: rust_build_linux_arm64 displayName: 'Rust SDK: Build + Test Linux ARM64' @@ -130,13 +128,12 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-build-rust.yml parameters: rid: 'linux-arm64' nativeArtifactDir: '$(Pipeline.Workspace)/cpp-native-linux-arm64' runTests: true - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' - stage: rust_build_osx_arm64 displayName: 'Rust SDK: Build + Test macOS ARM64' @@ -162,13 +159,12 @@ stages: steps: - checkout: self clean: true - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml - template: steps-build-rust.yml parameters: rid: 'osx-arm64' nativeArtifactDir: '$(Pipeline.Workspace)/cpp-native-osx-arm64' runTests: true - testDataSharedDir: '$(Build.SourcesDirectory)/test-data-shared' # ================================================================ # Pack the platform-independent crate (rust-sdk-v2). Runs only if @@ -220,6 +216,33 @@ stages: $cargoBin = Join-Path $env:USERPROFILE '.cargo\bin' } Write-Host "##vso[task.prependpath]$cargoBin" + $env:PATH = "$cargoBin$([IO.Path]::PathSeparator)$env:PATH" + + $cargoHome = if ($env:CARGO_HOME) { + $env:CARGO_HOME + } elseif ($env:HOME) { + Join-Path $env:HOME '.cargo' + } else { + Join-Path $env:USERPROFILE '.cargo' + } + New-Item -ItemType Directory -Force -Path $cargoHome | Out-Null + @" + [registries.AIFoundryLocal_PublicPackages] + index = "sparse+https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/Cargo/index/" + + [source.crates-io] + replace-with = "AIFoundryLocal_PublicPackages" + + [registry] + global-credential-providers = ["cargo:token"] + "@ | Set-Content (Join-Path $cargoHome 'config.toml') + + if (-not $env:SYSTEM_ACCESSTOKEN) { throw 'System.AccessToken is required for Cargo feed authentication.' } + $credential = 'Basic ' + [Convert]::ToBase64String( + [Text.Encoding]::UTF8.GetBytes("build:$($env:SYSTEM_ACCESSTOKEN)")) + $credential | cargo login --registry AIFoundryLocal_PublicPackages + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) - task: PowerShell@2 displayName: 'Set crate version from sdkVersion.txt' inputs: diff --git a/.pipelines/v2/templates/stages-sdk-v2.yml b/.pipelines/templates/stages-sdk-v2.yml similarity index 100% rename from .pipelines/v2/templates/stages-sdk-v2.yml rename to .pipelines/templates/stages-sdk-v2.yml diff --git a/.pipelines/v2/templates/steps-build-cs.yml b/.pipelines/templates/steps-build-cs.yml similarity index 98% rename from .pipelines/v2/templates/steps-build-cs.yml rename to .pipelines/templates/steps-build-cs.yml index ea236dda5..1044b88cc 100644 --- a/.pipelines/v2/templates/steps-build-cs.yml +++ b/.pipelines/templates/steps-build-cs.yml @@ -66,7 +66,6 @@ steps: - diff --git a/.pipelines/v2/templates/steps-build-js.yml b/.pipelines/templates/steps-build-js.yml similarity index 97% rename from .pipelines/v2/templates/steps-build-js.yml rename to .pipelines/templates/steps-build-js.yml index 27d85453f..95513fd7d 100644 --- a/.pipelines/v2/templates/steps-build-js.yml +++ b/.pipelines/templates/steps-build-js.yml @@ -41,6 +41,15 @@ steps: inputs: versionSpec: '20.x' +- powershell: | + Set-Content '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' + displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' + +- task: npmAuthenticate@0 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' + inputs: + workingFile: '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' + - ${{ if eq(parameters.rid, 'win-x64') }}: - task: UsePythonVersion@0 displayName: 'Use Python 3.12 (x64)' diff --git a/.pipelines/v2/templates/steps-build-linux.yml b/.pipelines/templates/steps-build-linux.yml similarity index 88% rename from .pipelines/v2/templates/steps-build-linux.yml rename to .pipelines/templates/steps-build-linux.yml index b345bd521..93f9dbf2a 100644 --- a/.pipelines/v2/templates/steps-build-linux.yml +++ b/.pipelines/templates/steps-build-linux.yml @@ -22,6 +22,16 @@ parameters: steps: +- task: PipAuthenticate@1 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' + inputs: + artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' + +- bash: | + python3 -m pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ + python3 -m pip config unset global.extra-index-url || true + displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' + - bash: | set -euo pipefail case '${{ parameters.arch }}' in @@ -39,10 +49,10 @@ steps: image_id_file="$(Build.BinariesDirectory)/manylinux-${{ parameters.arch }}.iid" docker build \ --build-arg "BASE_IMAGE=$image" \ - --file "$(Build.SourcesDirectory)/.pipelines/v2/docker/manylinux/Dockerfile" \ + --file "$(Build.SourcesDirectory)/.pipelines/docker/manylinux/Dockerfile" \ --iidfile "$image_id_file" \ --tag "$build_image" \ - "$(Build.SourcesDirectory)/.pipelines/v2/docker/manylinux" + "$(Build.SourcesDirectory)/.pipelines/docker/manylinux" IFS= read -r image_id < "$image_id_file" || [ -n "$image_id" ] echo "##vso[task.setvariable variable=manylinuxImage]$image_id" displayName: 'Prepare manylinux 2.28 build image' @@ -55,7 +65,7 @@ steps: includeWinml: false - ${{ if eq(parameters.runTests, true) }}: - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml parameters: destinationPath: '$(Agent.BuildDirectory)/test-data-shared' @@ -81,7 +91,7 @@ steps: set -euo pipefail /opt/python/cp312-cp312/bin/python3.12 -m venv "$HOME/venv" python="$HOME/venv/bin/python" - "$python" -m pip install --upgrade "cmake==3.31.6" + "$python" -m pip install --upgrade --index-url "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/" "cmake==3.31.6" git clone https://github.com/microsoft/vcpkg.git "$VCPKG_ROOT" "$VCPKG_ROOT/bootstrap-vcpkg.sh" -disableMetrics "$python" build.py --configure --build \ diff --git a/.pipelines/v2/templates/steps-build-macos.yml b/.pipelines/templates/steps-build-macos.yml similarity index 98% rename from .pipelines/v2/templates/steps-build-macos.yml rename to .pipelines/templates/steps-build-macos.yml index ebcfcbea5..0a834b05a 100644 --- a/.pipelines/v2/templates/steps-build-macos.yml +++ b/.pipelines/templates/steps-build-macos.yml @@ -50,7 +50,7 @@ steps: displayName: 'Append version define' - ${{ if eq(parameters.runTests, true) }}: - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml parameters: destinationPath: '$(Agent.BuildDirectory)/test-data-shared' diff --git a/.pipelines/v2/templates/steps-build-python.yml b/.pipelines/templates/steps-build-python.yml similarity index 95% rename from .pipelines/v2/templates/steps-build-python.yml rename to .pipelines/templates/steps-build-python.yml index f87a0e383..d4b0d6448 100644 --- a/.pipelines/v2/templates/steps-build-python.yml +++ b/.pipelines/templates/steps-build-python.yml @@ -60,6 +60,19 @@ steps: Write-Host "##vso[task.prependpath]$venvBin" Write-Host "Using system Python through build venv: $venvDir" +- task: PipAuthenticate@1 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' + inputs: + artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' + +- task: PowerShell@2 + displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' + inputs: + targetType: inline + script: | + pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ + pip config unset global.extra-index-url 2>$null + - task: PowerShell@2 displayName: 'Set package version from pyVersion.txt' inputs: @@ -291,7 +304,7 @@ steps: set -euo pipefail /opt/python/cp312-cp312/bin/python3.12 -m venv "$HOME/venv" python="$HOME/venv/bin/python" - "$python" -m pip install --upgrade build setuptools wheel "cffi>=1.16" "auditwheel==6.8.1" + "$python" -m pip install --upgrade --index-url "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/" build setuptools wheel "cffi>=1.16" "auditwheel==6.8.1" "$python" -m build --wheel --outdir "$RAW_WHEEL_DIR" "$HOME/venv/bin/auditwheel" repair "$RAW_WHEEL_DIR"/*.whl \ --wheel-dir "$WHEEL_DIR" \ @@ -320,7 +333,7 @@ steps: throw "Failed to create auditwheel virtual environment with exit code $LASTEXITCODE" } $hostPython = "$hostVenv/bin/python" - & $hostPython -m pip install --upgrade pip "auditwheel==6.8.1" + & $hostPython -m pip install --upgrade --index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ pip "auditwheel==6.8.1" if ($LASTEXITCODE -ne 0) { throw "Failed to install auditwheel with exit code $LASTEXITCODE" } diff --git a/.pipelines/v2/templates/steps-build-rust.yml b/.pipelines/templates/steps-build-rust.yml similarity index 87% rename from .pipelines/v2/templates/steps-build-rust.yml rename to .pipelines/templates/steps-build-rust.yml index 9d8bc9e82..de2096e29 100644 --- a/.pipelines/v2/templates/steps-build-rust.yml +++ b/.pipelines/templates/steps-build-rust.yml @@ -38,12 +38,15 @@ parameters: type: string default: '' # e.g. 'aarch64-pc-windows-msvc' for the win-arm64 cross build; '' for native. -- name: testDataSharedDir - type: string - default: '' steps: +- powershell: | + $feed = 'https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json' + Write-Host "##vso[task.setvariable variable=FOUNDRY_LOCAL_NUGET_FEEDS]$feed" + $env:FOUNDRY_LOCAL_NUGET_FEEDS = $feed + displayName: 'Configure Rust native package feed' + # ── 1. Rust toolchain ──────────────────────────────────────────────────────── - task: PowerShell@2 displayName: 'Install Rust toolchain (stable + clippy + rustfmt)' @@ -86,9 +89,35 @@ steps: rustup target add $cross } + $cargoHome = if ($env:CARGO_HOME) { + $env:CARGO_HOME + } elseif ($env:HOME) { + Join-Path $env:HOME '.cargo' + } else { + Join-Path $env:USERPROFILE '.cargo' + } + New-Item -ItemType Directory -Force -Path $cargoHome | Out-Null + @" + [registries.AIFoundryLocal_PublicPackages] + index = "sparse+https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/Cargo/index/" + + [source.crates-io] + replace-with = "AIFoundryLocal_PublicPackages" + + [registry] + global-credential-providers = ["cargo:token"] + "@ | Set-Content (Join-Path $cargoHome 'config.toml') + + if (-not $env:SYSTEM_ACCESSTOKEN) { throw 'System.AccessToken is required for Cargo feed authentication.' } + $credential = 'Basic ' + [Convert]::ToBase64String( + [Text.Encoding]::UTF8.GetBytes("build:$($env:SYSTEM_ACCESSTOKEN)")) + $credential | cargo login --registry AIFoundryLocal_PublicPackages + rustup show cargo --version rustc --version + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) # ── 2. Assemble the native runtime directory ───────────────────────────────── - task: PowerShell@2 @@ -235,6 +264,7 @@ steps: env: FOUNDRY_LOCAL_NATIVE_BIN_DIR: $(flNativeDir) FOUNDRY_LOCAL_LIB_DIR: $(flNativeDir) + FOUNDRY_TEST_DATA_DIR: '$(Build.SourcesDirectory)/test-data-shared' - task: PowerShell@2 displayName: 'cargo test --tests (integration)' @@ -251,5 +281,5 @@ steps: env: FOUNDRY_LOCAL_NATIVE_BIN_DIR: $(flNativeDir) FOUNDRY_LOCAL_LIB_DIR: $(flNativeDir) - FOUNDRY_TEST_DATA_DIR: ${{ parameters.testDataSharedDir }} + FOUNDRY_TEST_DATA_DIR: '$(Build.SourcesDirectory)/test-data-shared' TF_BUILD: 'true' diff --git a/.pipelines/v2/templates/steps-build-windows.yml b/.pipelines/templates/steps-build-windows.yml similarity index 98% rename from .pipelines/v2/templates/steps-build-windows.yml rename to .pipelines/templates/steps-build-windows.yml index 69802dad6..0d5b4da58 100644 --- a/.pipelines/v2/templates/steps-build-windows.yml +++ b/.pipelines/templates/steps-build-windows.yml @@ -77,7 +77,7 @@ steps: # Tests need shared model files. - ${{ if eq(parameters.runTests, true) }}: - - template: ../../templates/fetch-models-from-artifacts-feed.yml@self + - template: fetch-models-from-artifacts-feed.yml parameters: destinationPath: '$(Agent.BuildDirectory)/test-data-shared' scriptType: ps diff --git a/.pipelines/v2/templates/steps-pack-cpp-sdk.yml b/.pipelines/templates/steps-pack-cpp-sdk.yml similarity index 100% rename from .pipelines/v2/templates/steps-pack-cpp-sdk.yml rename to .pipelines/templates/steps-pack-cpp-sdk.yml diff --git a/.pipelines/v2/templates/steps-pack-js.yml b/.pipelines/templates/steps-pack-js.yml similarity index 88% rename from .pipelines/v2/templates/steps-pack-js.yml rename to .pipelines/templates/steps-pack-js.yml index 4f7481c54..b56e8c736 100644 --- a/.pipelines/v2/templates/steps-pack-js.yml +++ b/.pipelines/templates/steps-pack-js.yml @@ -28,6 +28,15 @@ steps: inputs: versionSpec: '20.x' +- powershell: | + Set-Content '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' + displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' + +- task: npmAuthenticate@0 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' + inputs: + workingFile: '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' + - pwsh: | $dst = "$(Build.SourcesDirectory)/sdk_v2/js/prebuilds" if (Test-Path $dst) { Remove-Item -Recurse -Force $dst } diff --git a/.pipelines/v2/templates/steps-pack-nuget.yml b/.pipelines/templates/steps-pack-nuget.yml similarity index 100% rename from .pipelines/v2/templates/steps-pack-nuget.yml rename to .pipelines/templates/steps-pack-nuget.yml diff --git a/.pipelines/v2/templates/steps-prefetch-nuget.yml b/.pipelines/templates/steps-prefetch-nuget.yml similarity index 100% rename from .pipelines/v2/templates/steps-prefetch-nuget.yml rename to .pipelines/templates/steps-prefetch-nuget.yml diff --git a/.pipelines/v2/templates/steps-test-cs.yml b/.pipelines/templates/steps-test-cs.yml similarity index 96% rename from .pipelines/v2/templates/steps-test-cs.yml rename to .pipelines/templates/steps-test-cs.yml index 0b088014a..081d51e15 100644 --- a/.pipelines/v2/templates/steps-test-cs.yml +++ b/.pipelines/templates/steps-test-cs.yml @@ -2,15 +2,12 @@ # (FoundryLocal.Tests). The caller is responsible for: # - placing the Foundry Local Runtime nupkg in `flNugetDir` # - downloading the `version-info` pipeline artifact -# - populating the model cache directory at `testDataSharedDir` +# - pre-populating the model cache via fetch-models-from-artifacts-feed.yml parameters: - name: flNugetDir type: string displayName: 'Path to directory containing the Foundry Local Runtime .nupkg' -- name: testDataSharedDir - type: string - displayName: 'Absolute path to the model cache directory used by tests' - name: additionalTestArgs type: string default: '' @@ -103,7 +100,6 @@ steps: - @@ -216,4 +212,4 @@ steps: } env: TF_BUILD: 'true' - FOUNDRY_TEST_DATA_DIR: ${{ parameters.testDataSharedDir }} + FOUNDRY_TEST_DATA_DIR: '$(Build.SourcesDirectory)/test-data-shared' diff --git a/.pipelines/v2/templates/steps-test-js.yml b/.pipelines/templates/steps-test-js.yml similarity index 85% rename from .pipelines/v2/templates/steps-test-js.yml rename to .pipelines/templates/steps-test-js.yml index d75c22fa0..785bc65fc 100644 --- a/.pipelines/v2/templates/steps-test-js.yml +++ b/.pipelines/templates/steps-test-js.yml @@ -3,6 +3,7 @@ # The caller is responsible for placing the `js-prebuild-` artifact at # `prebuildArtifactDir`. We drop its contents into sdk_v2/js/prebuilds/-/ # so the runtime addon-loader in dist/native/load.js finds it, then run vitest. +# Model cache is pre-populated via fetch-models-from-artifacts-feed.yml. parameters: - name: rid @@ -12,9 +13,6 @@ parameters: - name: prebuildArtifactDir type: string displayName: 'Path to the downloaded js-prebuild- artifact directory (root with prebuilds/ inside)' -- name: testDataSharedDir - type: string - displayName: 'Path to the model cache directory used by tests' steps: @@ -23,6 +21,15 @@ steps: inputs: versionSpec: '20.x' +- powershell: | + Set-Content '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' + displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' + +- task: npmAuthenticate@0 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' + inputs: + workingFile: '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' + - ${{ if or(eq(parameters.rid, 'win-x64'), eq(parameters.rid, 'win-arm64')) }}: - task: PowerShell@2 displayName: 'Drop prebuild into sdk_v2/js/prebuilds' @@ -96,6 +103,8 @@ steps: command: custom workingDir: '$(Build.SourcesDirectory)/sdk_v2/js' customCommand: 'ci --no-audit --no-fund' + env: + FOUNDRY_LOCAL_NUGET_FEEDS: 'https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json' - task: PowerShell@2 displayName: 'Build TypeScript' @@ -120,7 +129,7 @@ steps: npx --no-install vitest run --reporter=verbose if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } env: - FOUNDRY_TEST_DATA_DIR: '${{ parameters.testDataSharedDir }}' + FOUNDRY_TEST_DATA_DIR: '$(Build.SourcesDirectory)/test-data-shared' - ${{ if or(eq(parameters.rid, 'linux-x64'), eq(parameters.rid, 'linux-arm64'), eq(parameters.rid, 'osx-arm64')) }}: - bash: | @@ -128,6 +137,8 @@ steps: cd "$(Build.SourcesDirectory)/sdk_v2/js" npm ci --no-audit --no-fund displayName: 'npm ci (runs install-native postinstall)' + env: + FOUNDRY_LOCAL_NUGET_FEEDS: 'https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json' - bash: | set -euo pipefail @@ -138,10 +149,7 @@ steps: - bash: | set -euo pipefail cd "$(Build.SourcesDirectory)/sdk_v2/js" - echo "FOUNDRY_TEST_DATA_DIR=${FOUNDRY_TEST_DATA_DIR}" - test -d "${FOUNDRY_TEST_DATA_DIR}" - ls -la "${FOUNDRY_TEST_DATA_DIR}" npx --no-install vitest run --reporter=verbose displayName: 'Run vitest' env: - FOUNDRY_TEST_DATA_DIR: '${{ parameters.testDataSharedDir }}' + FOUNDRY_TEST_DATA_DIR: '$(Build.SourcesDirectory)/test-data-shared' diff --git a/.pipelines/v2/templates/steps-test-python.yml b/.pipelines/templates/steps-test-python.yml similarity index 90% rename from .pipelines/v2/templates/steps-test-python.yml rename to .pipelines/templates/steps-test-python.yml index 96f4bbf73..dd442b901 100644 --- a/.pipelines/v2/templates/steps-test-python.yml +++ b/.pipelines/templates/steps-test-python.yml @@ -3,15 +3,12 @@ # # The caller is responsible for: # * placing the built wheel (.whl) under `wheelDir` -# * populating the model cache directory at `testDataSharedDir` +# * pre-populating the model cache via fetch-models-from-artifacts-feed.yml parameters: - name: wheelDir type: string displayName: 'Path to directory containing the built foundry_local_sdk wheel' -- name: testDataSharedDir - type: string - displayName: 'Absolute path to a checked-out test-data-shared working tree' - name: pythonArchitecture type: string default: 'x64' @@ -51,6 +48,19 @@ steps: Write-Host "##vso[task.prependpath]$userBin" Write-Host "Using system Python: $python3Path" +- task: PipAuthenticate@1 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' + inputs: + artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' + +- task: PowerShell@2 + displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' + inputs: + targetType: inline + script: | + pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ + pip config unset global.extra-index-url 2>$null + - task: PowerShell@2 displayName: 'Bootstrap VC++ ARM64 runtime' condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'), eq(variables['Agent.OSArchitecture'], 'ARM64')) @@ -158,4 +168,4 @@ steps: } env: TF_BUILD: 'true' - FOUNDRY_TEST_DATA_DIR: ${{ parameters.testDataSharedDir }} + FOUNDRY_TEST_DATA_DIR: '$(Build.SourcesDirectory)/test-data-shared' diff --git a/.pipelines/v1/templates/build-core-steps.yml b/.pipelines/v1/templates/build-core-steps.yml deleted file mode 100644 index e2f13aed3..000000000 --- a/.pipelines/v1/templates/build-core-steps.yml +++ /dev/null @@ -1,177 +0,0 @@ -# Steps to build a single Foundry Local Core native AOT binary. -# Parameterized by flavor (RID) and platform (arch). -# The parent job must checkout 'neutron-server'. -parameters: -- name: flavor - type: string # e.g. win-x64, linux-x64, linux-arm64, osx-arm64 -- name: platform - type: string # e.g. x64, arm64 -- name: isWinML - type: boolean - default: false - -steps: -- task: PowerShell@2 - displayName: 'Set source paths' - inputs: - targetType: inline - script: | - $nsRoot = "$(Build.SourcesDirectory)/neutron-server" - Write-Host "##vso[task.setvariable variable=nsRoot]$nsRoot" - -- task: UseDotNet@2 - displayName: 'Use .NET SDK from global.json' - inputs: - packageType: sdk - useGlobalJson: true - workingDirectory: '$(nsRoot)' - -- task: PowerShell@2 - displayName: 'Override nuget.config' - inputs: - targetType: inline - script: | - $nugetConfig = @" - - - - - - - - - - - - - - - - - "@ - Set-Content -Path "$(nsRoot)/nuget.config" -Value $nugetConfig - Write-Host "Updated nuget.config to use nuget.org, AIFoundryLocal_PublicPackages, and Neutron with mappings" - -- ${{ if eq(parameters.isWinML, true) }}: - - task: DotNetCoreCLI@2 - displayName: 'Restore FLC Core ${{ parameters.flavor }} (WinML)' - inputs: - command: restore - projects: '$(nsRoot)/src/FoundryLocalCore/Core/Core.csproj' - restoreArguments: '-r ${{ parameters.flavor }} /p:Platform=${{ parameters.platform }} /p:IncludeWebService=true /p:Configuration=Release /p:NetTargetFramework=net9.0-windows10.0.18362.0 /p:UseWinML=true' - feedsToUse: config - nugetConfigPath: '$(nsRoot)/nuget.config' - - - task: DotNetCoreCLI@2 - displayName: 'Build FLC Core ${{ parameters.flavor }} (WinML)' - inputs: - command: build - projects: '$(nsRoot)/src/FoundryLocalCore/Core/Core.csproj' - arguments: '--no-restore -r ${{ parameters.flavor }} -f net9.0-windows10.0.18362.0 /p:Platform=${{ parameters.platform }} /p:IncludeWebService=true /p:Configuration=Release /p:NetTargetFramework=net9.0-windows10.0.18362.0 /p:UseWinML=true' - - - task: DotNetCoreCLI@2 - displayName: 'Publish FLC AOT ${{ parameters.flavor }} (WinML)' - inputs: - command: publish - projects: '$(nsRoot)/src/FoundryLocalCore/Core/Core.csproj' - arguments: '--no-restore --no-build -r ${{ parameters.flavor }} -f net9.0-windows10.0.18362.0 /p:Platform=${{ parameters.platform }} /p:Configuration=Release /p:PublishAot=true /p:NetTargetFramework=net9.0-windows10.0.18362.0 /p:UseWinML=true' - publishWebProjects: false - zipAfterPublish: false - - - ${{ if eq(parameters.flavor, 'win-x64') }}: - - task: DotNetCoreCLI@2 - displayName: 'Restore FLC Tests ${{ parameters.flavor }} (WinML)' - inputs: - command: restore - projects: '$(nsRoot)/test/FoundryLocalCore/Core/FoundryLocalCore.Tests.csproj' - restoreArguments: '-r ${{ parameters.flavor }} /p:Platform=${{ parameters.platform }} /p:IncludeWebService=true /p:Configuration=Release /p:NetTargetFramework=net9.0-windows10.0.18362.0 /p:UseWinML=true' - feedsToUse: config - nugetConfigPath: '$(nsRoot)/nuget.config' - - - task: DotNetCoreCLI@2 - displayName: 'Build FLC Tests ${{ parameters.flavor }} (WinML)' - inputs: - command: build - projects: '$(nsRoot)/test/FoundryLocalCore/Core/FoundryLocalCore.Tests.csproj' - arguments: '--no-restore -r ${{ parameters.flavor }} /p:Platform=${{ parameters.platform }} /p:IncludeWebService=true /p:Configuration=Release /p:NetTargetFramework=net9.0-windows10.0.18362.0 /p:UseWinML=true' - - - task: DotNetCoreCLI@2 - displayName: 'Test FLC ${{ parameters.flavor }} (WinML)' - inputs: - command: test - projects: '$(nsRoot)/test/FoundryLocalCore/Core/FoundryLocalCore.Tests.csproj' - arguments: '--no-build --configuration Release -r ${{ parameters.flavor }} /p:Platform=${{ parameters.platform }}' - -- ${{ if eq(parameters.isWinML, false) }}: - - task: DotNetCoreCLI@2 - displayName: 'Restore FLC Core ${{ parameters.flavor }}' - inputs: - command: restore - projects: '$(nsRoot)/src/FoundryLocalCore/Core/Core.csproj' - restoreArguments: '-r ${{ parameters.flavor }} /p:Platform=${{ parameters.platform }} /p:IncludeWebService=true /p:Configuration=Release /p:TargetFramework=net9.0' - feedsToUse: config - nugetConfigPath: '$(nsRoot)/nuget.config' - - - task: DotNetCoreCLI@2 - displayName: 'Build FLC Core ${{ parameters.flavor }}' - inputs: - command: build - projects: '$(nsRoot)/src/FoundryLocalCore/Core/Core.csproj' - arguments: '--no-restore -r ${{ parameters.flavor }} /p:Platform=${{ parameters.platform }} /p:IncludeWebService=true /p:Configuration=Release' - - # FLC tests on osx-arm64 are flaky in CI, will investigate separately. Skip for now since the main goal of this job is to produce the AOT binary. - - ${{ if or(eq(parameters.flavor, 'win-x64'), eq(parameters.flavor, 'linux-x64'), eq(parameters.flavor, 'linux-arm64')) }}: - - task: DotNetCoreCLI@2 - displayName: 'Restore FLC Tests ${{ parameters.flavor }}' - inputs: - command: restore - projects: '$(nsRoot)/test/FoundryLocalCore/Core/FoundryLocalCore.Tests.csproj' - restoreArguments: '-r ${{ parameters.flavor }} /p:Platform=${{ parameters.platform }} /p:IncludeWebService=true /p:Configuration=Release /p:TargetFramework=net9.0' - feedsToUse: config - nugetConfigPath: '$(nsRoot)/nuget.config' - - - task: DotNetCoreCLI@2 - displayName: 'Build FLC Tests ${{ parameters.flavor }}' - inputs: - command: build - projects: '$(nsRoot)/test/FoundryLocalCore/Core/FoundryLocalCore.Tests.csproj' - arguments: '--no-restore -r ${{ parameters.flavor }} /p:Platform=${{ parameters.platform }} /p:IncludeWebService=true /p:Configuration=Release' - - - task: DotNetCoreCLI@2 - displayName: 'Test FLC ${{ parameters.flavor }}' - inputs: - command: test - projects: '$(nsRoot)/test/FoundryLocalCore/Core/FoundryLocalCore.Tests.csproj' - arguments: '--no-build --configuration Release -r ${{ parameters.flavor }} /p:Platform=${{ parameters.platform }}' - - - task: DotNetCoreCLI@2 - displayName: 'Publish FLC AOT ${{ parameters.flavor }}' - inputs: - command: publish - projects: '$(nsRoot)/src/FoundryLocalCore/Core/Core.csproj' - arguments: '--no-restore --no-build -r ${{ parameters.flavor }} /p:Platform=${{ parameters.platform }} /p:Configuration=Release /p:PublishAot=true /p:TargetFramework=net9.0' - publishWebProjects: false - zipAfterPublish: false - -# Cleanup non-binary files -- task: PowerShell@2 - displayName: 'Cleanup publish artifacts' - inputs: - targetType: inline - script: | - Get-ChildItem "$(nsRoot)/artifacts/publish" -Recurse -Include "*.json", "*.xml" | - Remove-Item -Force - -# Stage the native binary for the artifact -- task: PowerShell@2 - displayName: 'Stage ${{ parameters.flavor }} binary' - inputs: - targetType: inline - script: | - $destDir = "$(Build.ArtifactStagingDirectory)/native" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Get-ChildItem "$(nsRoot)/artifacts/publish" -Recurse -File | - Where-Object { $_.Name -like "Microsoft.AI.Foundry.Local.Core.*" } | - Copy-Item -Destination $destDir -Force - Write-Host "Staged binaries:" - Get-ChildItem $destDir | ForEach-Object { Write-Host " $($_.Name)" } diff --git a/.pipelines/v1/templates/build-cs-steps.yml b/.pipelines/v1/templates/build-cs-steps.yml deleted file mode 100644 index b9bfd962a..000000000 --- a/.pipelines/v1/templates/build-cs-steps.yml +++ /dev/null @@ -1,199 +0,0 @@ -# Steps to build, sign, and pack the C# SDK NuGet package. -# When test-data-shared is checked out alongside self, ADO places repos under -# $(Build.SourcesDirectory)/. The self repo is 'Foundry-Local'. -parameters: -- name: version - type: string -- name: isRelease - type: boolean - default: false -- name: isWinML - type: boolean - default: false -- name: flcNugetDir - type: string - displayName: 'Path to directory containing the FLC .nupkg' -- name: outputDir - type: string - default: '$(Build.ArtifactStagingDirectory)/cs-sdk' - displayName: 'Path to directory for the packed SDK' -- name: prereleaseId - type: string - default: '' -- name: depsVersionsDir - type: string - default: '' - displayName: 'Path to deps-versions artifact directory' -steps: -# Set paths for multi-repo checkout -- task: PowerShell@2 - displayName: 'Set source paths' - inputs: - targetType: inline - script: | - $multiCheckout = "$(Build.SourcesDirectory)/Foundry-Local" - if (Test-Path $multiCheckout) { - $repoRoot = $multiCheckout - } else { - $repoRoot = "$(Build.SourcesDirectory)" - } - $testDataDir = "$(Build.SourcesDirectory)/test-data-shared" - Write-Host "##vso[task.setvariable variable=repoRoot]$repoRoot" - Write-Host "##vso[task.setvariable variable=testDataDir]$testDataDir" - -# Using the latest SDK does not prevent us from targeting other platforms. -# It ensures that we've got the latest tooling, fixes, and performance enhancements. -- task: UseDotNet@2 - displayName: 'Use .NET 10 SDK' - inputs: - packageType: sdk - version: '10.0.x' - -# Read version from the version-info artifact produced by compute_version stage. -# Legacy SDKs read the `.v1.txt` flavor (sdk_v2 reads `.txt`). -- task: PowerShell@2 - displayName: 'Set package version' - inputs: - targetType: inline - script: | - $v = (Get-Content "$(Pipeline.Workspace)/version-info/sdkVersion.v1.txt" -Raw).Trim() - Write-Host "Package version: $v" - Write-Host "##vso[task.setvariable variable=packageVersion]$v" - -# Load dependency versions from deps_versions.json -- template: update-deps-versions-steps.yml - parameters: - repoRoot: $(repoRoot) - artifactDir: ${{ parameters.depsVersionsDir }} - isWinML: ${{ parameters.isWinML }} - -# List downloaded artifact for debugging -- task: PowerShell@2 - displayName: 'List downloaded FLC artifact' - inputs: - targetType: inline - script: | - Write-Host "Contents of ${{ parameters.flcNugetDir }}:" - Get-ChildItem "${{ parameters.flcNugetDir }}" -Recurse | ForEach-Object { Write-Host $_.FullName } - -# Create a temporary NuGet.config that includes the local FLC feed -- task: PowerShell@2 - displayName: 'Create NuGet.config with local FLC feed' - inputs: - targetType: inline - script: | - $nugetConfig = @" - - - - - - - - - - "@ - # Point the local NuGet feed at the directory that actually contains the .nupkg - $nupkg = Get-ChildItem "${{ parameters.flcNugetDir }}" -Recurse -Filter "Microsoft.AI.Foundry.Local.Core*.nupkg" -Exclude "*.snupkg" | Select-Object -First 1 - if (-not $nupkg) { throw "No FLC .nupkg found in ${{ parameters.flcNugetDir }}" } - $flcFeedDir = $nupkg.DirectoryName - $nugetConfig = $nugetConfig -replace [regex]::Escape("${{ parameters.flcNugetDir }}"), $flcFeedDir - $configPath = "$(Build.ArtifactStagingDirectory)/NuGet.config" - Set-Content -Path $configPath -Value $nugetConfig - Write-Host "##vso[task.setvariable variable=customNugetConfig]$configPath" - Write-Host "Local FLC feed directory: $flcFeedDir" - -- task: NuGetAuthenticate@1 - displayName: 'Authenticate NuGet feeds' - -- task: PowerShell@2 - displayName: 'Restore SDK' - inputs: - targetType: inline - script: | - $proj = "$(repoRoot)/sdk/cs/src/Microsoft.AI.Foundry.Local.csproj" - if (-not (Test-Path $proj)) { throw "Project not found: $proj" } - dotnet restore $proj ` - --configfile "$(customNugetConfig)" ` - /p:UseWinML=${{ parameters.isWinML }} - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -- task: PowerShell@2 - displayName: 'Build SDK' - inputs: - targetType: inline - script: | - dotnet build "$(repoRoot)/sdk/cs/src/Microsoft.AI.Foundry.Local.csproj" ` - --no-restore --configuration Release ` - /p:UseWinML=${{ parameters.isWinML }} - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -# Discover target framework directory -- task: PowerShell@2 - displayName: 'Find target framework' - inputs: - targetType: inline - script: | - $base = "$(repoRoot)/sdk/cs/src/bin/Release" - # The SDK targets netstandard2.0 and any compatible runtime. - # Find whichever TFM directory was produced by the build. - $tfmDir = Get-ChildItem $base -Directory | Select-Object -First 1 - if (-not $tfmDir) { throw "No target framework directory found under $base" } - Write-Host "##vso[task.setvariable variable=TargetFramework]$($tfmDir.Name)" - Write-Host "Target framework: $($tfmDir.Name)" - -# Sign DLLs -- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5 - displayName: 'Sign SDK DLLs' - inputs: - ConnectedServiceName: 'OnnxrunTimeCodeSign_20240611' - UseMSIAuthentication: true - AppRegistrationClientId: '$(esrpClientId)' - AppRegistrationTenantId: '$(esrpTenantId)' - EsrpClientId: '$(esrpClientId)' - AuthAKVName: '$(esrpAkvName)' - AuthSignCertName: '$(esrpSignCertName)' - FolderPath: '$(repoRoot)/sdk/cs/src/bin/Release/$(TargetFramework)' - Pattern: '*.dll' - SessionTimeout: 90 - ServiceEndpointUrl: 'https://api.esrp.microsoft.com/api/v2' - MaxConcurrency: 25 - signConfigType: inlineSignParams - inlineOperation: | - [{"keyCode":"CP-230012","operationSetCode":"SigntoolSign","parameters":[{"parameterName":"OpusName","parameterValue":"Microsoft"},{"parameterName":"OpusInfo","parameterValue":"http://www.microsoft.com"},{"parameterName":"PageHash","parameterValue":"/NPH"},{"parameterName":"FileDigest","parameterValue":"/fd sha256"},{"parameterName":"TimeStamp","parameterValue":"/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"}],"toolName":"signtool.exe","toolVersion":"6.2.9304.0"}] - -# Pack NuGet -- task: PowerShell@2 - displayName: 'Pack NuGet' - inputs: - targetType: inline - script: | - dotnet pack "$(repoRoot)/sdk/cs/src/Microsoft.AI.Foundry.Local.csproj" ` - --no-build --no-restore --configuration Release ` - --output "${{ parameters.outputDir }}" ` - /p:PackageVersion=$(packageVersion) ` - /p:UseWinML=${{ parameters.isWinML }} ` - /p:IncludeSymbols=true ` - /p:SymbolPackageFormat=snupkg - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -# Sign NuGet package -- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5 - displayName: 'Sign SDK NuGet package' - inputs: - ConnectedServiceName: 'OnnxrunTimeCodeSign_20240611' - UseMSIAuthentication: true - AppRegistrationClientId: '$(esrpClientId)' - AppRegistrationTenantId: '$(esrpTenantId)' - EsrpClientId: '$(esrpClientId)' - AuthAKVName: '$(esrpAkvName)' - AuthSignCertName: '$(esrpSignCertName)' - FolderPath: '${{ parameters.outputDir }}' - Pattern: '*.nupkg' - SessionTimeout: 90 - ServiceEndpointUrl: 'https://api.esrp.microsoft.com/api/v2' - MaxConcurrency: 25 - signConfigType: inlineSignParams - inlineOperation: | - [{"keyCode":"CP-401405","operationSetCode":"NuGetSign","parameters":[],"toolName":"sign","toolVersion":"6.2.9304.0"},{"keyCode":"CP-401405","operationSetCode":"NuGetVerify","parameters":[],"toolName":"sign","toolVersion":"6.2.9304.0"}] - diff --git a/.pipelines/v1/templates/build-js-addon-steps.yml b/.pipelines/v1/templates/build-js-addon-steps.yml deleted file mode 100644 index dce0f7fce..000000000 --- a/.pipelines/v1/templates/build-js-addon-steps.yml +++ /dev/null @@ -1,45 +0,0 @@ -# Builds the Node-API native addon for the current platform. -# Produces a foundry_local_napi.node binary under prebuilds//. -parameters: -- name: repoRoot - type: string -- name: targetArch - type: string - default: '' - displayName: 'Target architecture for cross-compilation (e.g. arm64). Empty = native.' - -steps: -- task: NodeTool@0 - displayName: 'Use Node.js 20' - inputs: - versionSpec: '20.x' - -- task: PowerShell@2 - displayName: 'Install node-gyp and node-api-headers' - inputs: - targetType: inline - pwsh: true - script: | - Set-Location "${{ parameters.repoRoot }}/sdk/js" - npm install --no-save node-gyp node-api-headers --registry https://registry.npmjs.org - -- task: PowerShell@2 - displayName: 'Build Node-API addon' - inputs: - targetType: inline - pwsh: true - script: | - Set-Location "${{ parameters.repoRoot }}/sdk/js/native" - $archFlag = "${{ parameters.targetArch }}" - if ($archFlag -ne '') { - npx node-gyp rebuild --arch=$archFlag - $platformKey = (node -e 'process.stdout.write(process.platform)') + "-$archFlag" - } else { - npx node-gyp rebuild - $platformKey = node -e 'process.stdout.write(process.platform + "-" + process.arch)' - } - $destDir = "${{ parameters.repoRoot }}/sdk/js/prebuilds/$platformKey" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item "build/Release/foundry_local_napi.node" "$destDir/foundry_local_napi.node" -Force - Write-Host "Built addon for $platformKey -> $destDir/foundry_local_napi.node" - Get-Item "$destDir/foundry_local_napi.node" | ForEach-Object { Write-Host " Size: $($_.Length) bytes" } diff --git a/.pipelines/v1/templates/build-js-steps.yml b/.pipelines/v1/templates/build-js-steps.yml deleted file mode 100644 index 1b2a48263..000000000 --- a/.pipelines/v1/templates/build-js-steps.yml +++ /dev/null @@ -1,221 +0,0 @@ -# Steps to build and pack the JS SDK. -# When test-data-shared is checked out alongside self, ADO places repos under -# $(Build.SourcesDirectory)/. The self repo is 'Foundry-Local'. -parameters: -- name: version - type: string -- name: isRelease - type: boolean - default: false -- name: isWinML - type: boolean - default: false -- name: flcNugetDir - type: string - default: '' - displayName: 'Path to directory containing the FLC .nupkg (for tests)' -- name: prereleaseId - type: string - default: '' -- name: depsVersionsDir - type: string - default: '' - displayName: 'Path to deps-versions artifact directory' -steps: -# Set paths for multi-repo checkout -- task: PowerShell@2 - displayName: 'Set source paths' - inputs: - targetType: inline - script: | - $multiCheckout = "$(Build.SourcesDirectory)/Foundry-Local" - if (Test-Path $multiCheckout) { - $repoRoot = $multiCheckout - } else { - $repoRoot = "$(Build.SourcesDirectory)" - } - $testDataDir = "$(Build.SourcesDirectory)/test-data-shared" - Write-Host "##vso[task.setvariable variable=repoRoot]$repoRoot" - Write-Host "##vso[task.setvariable variable=testDataDir]$testDataDir" - Write-Host "Repo root: $repoRoot" - Write-Host "Test data: $testDataDir" - -- task: PowerShell@2 - displayName: 'List downloaded FLC artifact' - condition: and(succeeded(), ne('${{ parameters.flcNugetDir }}', '')) - inputs: - targetType: inline - script: | - Write-Host "Contents of ${{ parameters.flcNugetDir }}:" - Get-ChildItem "${{ parameters.flcNugetDir }}" -Recurse | ForEach-Object { Write-Host $_.FullName } - -- task: NodeTool@0 - displayName: 'Use Node.js 20' - inputs: - versionSpec: '20.x' - -# Load dependency versions from deps_versions.json -- template: update-deps-versions-steps.yml - parameters: - repoRoot: $(repoRoot) - artifactDir: ${{ parameters.depsVersionsDir }} - isWinML: ${{ parameters.isWinML }} - -# Compute version -- task: PowerShell@2 - displayName: 'Set package version' - inputs: - targetType: inline - script: | - $v = (Get-Content "$(Pipeline.Workspace)/version-info/sdkVersion.v1.txt" -Raw).Trim() - Write-Host "Package version: $v" - Write-Host "##vso[task.setvariable variable=packageVersion]$v" - -# Install JS dependencies. When a pipeline-built FLC artifact is provided, -# use --ignore-scripts to skip the native binary download (which would 404 -# on the unpublished FLC package), then extract FLC from the local artifact -# and run the install script manually to fetch ORT/GenAI from public feeds. -- task: Npm@1 - displayName: 'npm install (skip native downloads)' - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'install --ignore-scripts' - -- task: PowerShell@2 - displayName: 'Extract FLC from pipeline-built artifact' - inputs: - targetType: inline - script: | - $os = 'win32' - $arch = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64') { 'arm64' } else { 'x64' } - $platformKey = "$os-$arch" - $rid = if ($arch -eq 'arm64') { 'win-arm64' } else { 'win-x64' } - - if ($IsLinux) { - $os = 'linux' - $platformKey = "$os-$arch" - $rid = "linux-$arch" - } elseif ($IsMacOS) { - $os = 'darwin' - $platformKey = "$os-$arch" - $rid = "osx-$arch" - } - - $nupkg = Get-ChildItem "${{ parameters.flcNugetDir }}" -Recurse -Filter "Microsoft.AI.Foundry.Local.Core*.nupkg" -Exclude "*.snupkg" | Select-Object -First 1 - if (-not $nupkg) { throw "No FLC .nupkg found in ${{ parameters.flcNugetDir }}" } - - $extractDir = "$(Build.ArtifactStagingDirectory)/flc-extract" - $zip = [System.IO.Path]::ChangeExtension($nupkg.FullName, ".zip") - Copy-Item $nupkg.FullName $zip -Force - Expand-Archive -Path $zip -DestinationPath $extractDir -Force - - # Place FLC binary so the install script skips downloading it - $destDir = "$(repoRoot)/sdk/js/foundry-local-core/$platformKey" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - $nativeDir = "$extractDir/runtimes/$rid/native" - if (Test-Path $nativeDir) { - Get-ChildItem $nativeDir -File | ForEach-Object { - Copy-Item $_.FullName -Destination "$destDir/$($_.Name)" -Force - Write-Host "Placed $($_.Name) from pipeline artifact" - } - } else { - Write-Warning "No native binaries found at $nativeDir for RID $rid" - } - -- task: PowerShell@2 - displayName: 'Run native binary install (ORT + GenAI)' - inputs: - targetType: inline - script: | - Set-Location "$(repoRoot)/sdk/js" - node script/preinstall.cjs - node script/install-standard.cjs - -# Overwrite the FLC native binary with the one we just built -- task: PowerShell@2 - displayName: 'Overwrite FLC with pipeline-built binary' - condition: and(succeeded(), ne('${{ parameters.flcNugetDir }}', '')) - inputs: - targetType: inline - script: | - $os = 'win32' - $arch = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64') { 'arm64' } else { 'x64' } - $platformKey = "$os-$arch" - $rid = if ($arch -eq 'arm64') { 'win-arm64' } else { 'win-x64' } - - # Detect macOS/Linux - if ($IsLinux) { - $os = 'linux' - $platformKey = "$os-$arch" - $rid = "linux-$arch" - } elseif ($IsMacOS) { - $os = 'darwin' - $platformKey = "$os-$arch" - $rid = "osx-$arch" - } - - $nupkg = Get-ChildItem "${{ parameters.flcNugetDir }}" -Recurse -Filter "Microsoft.AI.Foundry.Local.Core*.nupkg" -Exclude "*.snupkg" | Select-Object -First 1 - if (-not $nupkg) { throw "No FLC .nupkg found in ${{ parameters.flcNugetDir }}" } - - # Extract the NuGet package (it's a zip) - $extractDir = "$(Build.ArtifactStagingDirectory)/flc-extract" - $zip = [System.IO.Path]::ChangeExtension($nupkg.FullName, ".zip") - Copy-Item $nupkg.FullName $zip -Force - Expand-Archive -Path $zip -DestinationPath $extractDir -Force - - # Overwrite FLC binary in the npm-installed location - $destDir = "$(repoRoot)/sdk/js/foundry-local-core/$platformKey" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - $nativeDir = "$extractDir/runtimes/$rid/native" - if (Test-Path $nativeDir) { - Get-ChildItem $nativeDir -File | ForEach-Object { - Copy-Item $_.FullName -Destination "$destDir/$($_.Name)" -Force - Write-Host "Overwrote $($_.Name) with pipeline-built version" - } - } else { - Write-Warning "No native binaries found at $nativeDir for RID $rid" - } - - Write-Host "Final binaries in $destDir`:" - Get-ChildItem $destDir | ForEach-Object { Write-Host " $($_.Name)" } - -- task: Npm@1 - displayName: 'npm version' - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'version $(packageVersion) --no-git-tag-version --allow-same-version' - -- task: Npm@1 - displayName: 'npm build' - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'run build' - -- ${{ if eq(parameters.isWinML, true) }}: - - task: Npm@1 - displayName: 'npm run pack:winml' - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'run pack:winml' - -- ${{ else }}: - - task: Npm@1 - displayName: 'npm run pack' - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'run pack' - -- task: PowerShell@2 - displayName: 'Stage artifact' - inputs: - targetType: inline - script: | - $destDir = "$(Build.ArtifactStagingDirectory)/js-sdk" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item "$(repoRoot)/sdk/js/*.tgz" "$destDir/" - diff --git a/.pipelines/v1/templates/build-python-steps.yml b/.pipelines/v1/templates/build-python-steps.yml deleted file mode 100644 index 6309782cc..000000000 --- a/.pipelines/v1/templates/build-python-steps.yml +++ /dev/null @@ -1,227 +0,0 @@ -# Steps to build and pack the Python SDK wheel. -# When test-data-shared is checked out alongside self, ADO places repos under -# $(Build.SourcesDirectory)/. The self repo is 'Foundry-Local'. -parameters: -- name: version - type: string -- name: isRelease - type: boolean - default: false -- name: isWinML - type: boolean - default: false -- name: flcWheelsDir - type: string - displayName: 'Path to directory containing the FLC wheels (for overriding foundry-local-core)' -- name: outputDir - type: string - default: '$(Build.ArtifactStagingDirectory)/python-sdk' - displayName: 'Path to directory for the built wheel' -- name: prereleaseId - type: string - default: '' -- name: depsVersionsDir - type: string - default: '' - displayName: 'Path to deps-versions artifact directory' -steps: -# Set paths for multi-repo checkout -- task: PowerShell@2 - displayName: 'Set source paths' - inputs: - targetType: inline - script: | - $multiCheckout = "$(Build.SourcesDirectory)/Foundry-Local" - if (Test-Path $multiCheckout) { - $repoRoot = $multiCheckout - } else { - $repoRoot = "$(Build.SourcesDirectory)" - } - $testDataDir = "$(Build.SourcesDirectory)/test-data-shared" - Write-Host "##vso[task.setvariable variable=repoRoot]$repoRoot" - Write-Host "##vso[task.setvariable variable=testDataDir]$testDataDir" - -- task: PowerShell@2 - displayName: 'Detect agent architecture' - inputs: - targetType: inline - script: | - # Hosted Linux arm64 image has no python-versions toolcache; skip UsePythonVersion there. - # macOS arm64 has a working toolcache so UsePythonVersion is fine. - $isArm64 = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64' - $isLinuxArm64 = $IsLinux -and $isArm64 - Write-Host "##vso[task.setvariable variable=IsLinuxArm64Agent]$($isLinuxArm64.ToString().ToLower())" - -- task: UsePythonVersion@0 - displayName: 'Use Python 3.12' - condition: and(succeeded(), ne(variables['IsLinuxArm64Agent'], 'true')) - inputs: - versionSpec: '3.12' - -- task: PowerShell@2 - displayName: 'Configure system Python for user-mode installs (Linux arm64)' - condition: and(succeeded(), eq(variables['IsLinuxArm64Agent'], 'true')) - inputs: - targetType: inline - script: | - # System python on hosted Linux arm64 cannot write to /usr/lib/python3.12/site-packages. - # The image also only exposes `python3` (no `python` alias), so drop a wrapper - # symlink into the user-bin directory for scripts that invoke `python` directly. - python3 --version - $userBase = & python3 -c "import site; print(site.USER_BASE)" - $userBin = Join-Path $userBase 'bin' - New-Item -ItemType Directory -Force -Path $userBin | Out-Null - $python3Path = (& which python3).Trim() - & ln -sf $python3Path (Join-Path $userBin 'python') - Write-Host "User base: $userBase" - Write-Host "Created symlink: $userBin/python -> $python3Path" - Write-Host "##vso[task.setvariable variable=PIP_USER]1" - Write-Host "##vso[task.prependpath]$userBin" - -# Load dependency versions from deps_versions.json -- template: update-deps-versions-steps.yml - parameters: - repoRoot: $(repoRoot) - artifactDir: ${{ parameters.depsVersionsDir }} - isWinML: ${{ parameters.isWinML }} - -# List downloaded FLC wheels for debugging -- task: PowerShell@2 - displayName: 'List downloaded FLC wheels' - condition: and(succeeded(), ne('${{ parameters.flcWheelsDir }}', '')) - inputs: - targetType: inline - script: | - Write-Host "Contents of ${{ parameters.flcWheelsDir }}:" - Get-ChildItem "${{ parameters.flcWheelsDir }}" -Recurse | ForEach-Object { Write-Host $_.FullName } - -# Read version from the version-info artifact produced by compute_version stage. -# Legacy SDKs read the `.v1.txt` flavor (sdk_v2 reads `.txt`). -- task: PowerShell@2 - displayName: 'Set package version' - inputs: - targetType: inline - script: | - $v = (Get-Content "$(Pipeline.Workspace)/version-info/pyVersion.v1.txt" -Raw).Trim() - Write-Host "Package version: $v" - Write-Host "##vso[task.setvariable variable=packageVersion]$v" - -# Configure pip to use AIFoundryLocal_PublicPackages feed (plus PyPI as fallback) -- task: PipAuthenticate@1 - displayName: 'Authenticate pip with Azure Artifacts' - inputs: - artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' - -- task: PowerShell@2 - displayName: 'Configure pip index URLs' - inputs: - targetType: inline - script: | - pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ - pip config set global.extra-index-url https://pypi.org/simple/ - pip config set global.pre true - -# Install the build tool -- script: python -m pip install build - displayName: 'Install build tool' - -# Write version file -- task: PowerShell@2 - displayName: 'Set SDK version' - inputs: - targetType: inline - script: | - Set-Content -Path "$(repoRoot)/sdk/python/src/version.py" -Value '__version__ = "$(packageVersion)"' - -# Install the FLC wheels from the pipeline if provided, so the build -# backend picks up the freshly-built foundry-local-core instead of -# pulling a stale one from the feed. -- task: PowerShell@2 - displayName: 'Pre-install pipeline-built FLC wheel' - condition: and(succeeded(), ne('${{ parameters.flcWheelsDir }}', '')) - inputs: - targetType: inline - script: | - # Determine platform wheel tag for the current machine - $arch = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64') { 'arm64' } else { 'amd64' } - if ($IsLinux) { - $linuxArch = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64') { 'aarch64' } else { 'x86_64' } - $platTag = "manylinux*$linuxArch" - } - elseif ($IsMacOS) { $platTag = "macosx*$arch" } - else { $platTag = "win_$arch" } - - $filter = if ("${{ parameters.isWinML }}" -eq "True") { "foundry_local_core_winml*$platTag.whl" } else { "foundry_local_core-*$platTag.whl" } - $wheel = Get-ChildItem "${{ parameters.flcWheelsDir }}" -Recurse -Filter $filter | Select-Object -First 1 - if ($wheel) { - Write-Host "Installing pipeline-built FLC wheel: $($wheel.FullName)" - pip install $($wheel.FullName) - } else { - Write-Warning "No FLC wheel found matching $filter in ${{ parameters.flcWheelsDir }}" - } - -- task: PowerShell@2 - displayName: 'Install ORT native packages' - inputs: - targetType: inline - script: | - $isWinML = "${{ parameters.isWinML }}" -eq "True" - $fileName = if ($isWinML) { "deps_versions_winml.json" } else { "deps_versions.json" } - $deps = Get-Content "$(repoRoot)/sdk/$fileName" -Raw | ConvertFrom-Json - $ortVer = $deps.onnxruntime.version - $genaiVer = $deps.'onnxruntime-genai'.version - # Platform-specific ORT package selection: - # - Linux x86_64: onnxruntime-gpu / onnxruntime-genai-cuda (CUDA wheels). - # - Linux aarch64: onnxruntime / onnxruntime-genai (CUDA variants don't ship aarch64). - # - Other: onnxruntime-core / onnxruntime-genai-core (cross-platform). - $isArm64 = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64' - if ($IsLinux -and -not $isArm64) { - Write-Host "Installing onnxruntime-gpu==$ortVer onnxruntime-genai-cuda==$genaiVer (Linux x64)" - pip install "onnxruntime-gpu==$ortVer" "onnxruntime-genai-cuda==$genaiVer" - } elseif ($IsLinux -and $isArm64) { - Write-Host "Installing onnxruntime==$ortVer onnxruntime-genai==$genaiVer (Linux arm64)" - pip install "onnxruntime==$ortVer" "onnxruntime-genai==$genaiVer" - } else { - Write-Host "Installing onnxruntime-core==$ortVer onnxruntime-genai-core==$genaiVer" - pip install "onnxruntime-core==$ortVer" "onnxruntime-genai-core==$genaiVer" - } - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -- script: pip install "pydantic>=2.0.0" "requests>=2.32.4" "openai>=2.24.0" - displayName: 'Install pure python dependencies' - -# Build wheel — standard or WinML variant -# The wheel retains all dependencies in its metadata so end users get -# native packages installed automatically. CI uses --no-deps to avoid -# re-downloading packages that were pre-installed from pipeline builds. -- ${{ if eq(parameters.isWinML, true) }}: - - script: python -m build --wheel -C winml=true --outdir dist/ - displayName: 'Build wheel (WinML)' - workingDirectory: $(repoRoot)/sdk/python - -- ${{ else }}: - - script: python -m build --wheel --outdir dist/ - displayName: 'Build wheel' - workingDirectory: $(repoRoot)/sdk/python - -# Install the built wheel -- task: PowerShell@2 - displayName: 'Install built wheel' - inputs: - targetType: inline - script: | - $wheel = (Get-ChildItem "$(repoRoot)/sdk/python/dist/*.whl" | Select-Object -First 1).FullName - pip install --no-deps $wheel - -# Stage output -- task: PowerShell@2 - displayName: 'Stage wheel artifact' - inputs: - targetType: inline - script: | - $destDir = "${{ parameters.outputDir }}" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item "$(repoRoot)/sdk/python/dist/*" "$destDir/" - Write-Host "Staged wheels:" - Get-ChildItem $destDir | ForEach-Object { Write-Host " $($_.Name)" } - diff --git a/.pipelines/v1/templates/build-rust-steps.yml b/.pipelines/v1/templates/build-rust-steps.yml deleted file mode 100644 index 8402b9aac..000000000 --- a/.pipelines/v1/templates/build-rust-steps.yml +++ /dev/null @@ -1,221 +0,0 @@ -# Steps to build and package the Rust SDK crate. -# When test-data-shared is checked out alongside self, ADO places repos under -# $(Build.SourcesDirectory)/. The self repo is 'Foundry-Local'. -parameters: -- name: version - type: string -- name: isRelease - type: boolean - default: false -- name: prereleaseId - type: string - default: '' -- name: isWinML - type: boolean - default: false -- name: flcNugetDir - type: string - displayName: 'Path to directory containing the FLC .nupkg' -- name: outputDir - type: string - default: '$(Build.ArtifactStagingDirectory)/rust-sdk' - displayName: 'Path to directory for the packaged crate' -- name: depsVersionsDir - type: string - default: '' - displayName: 'Path to deps-versions artifact directory' -- name: depsVersionsWinmlDir - type: string - default: '' - displayName: 'Path to WinML deps-versions artifact directory' -steps: -# Set paths for multi-repo checkout -- task: PowerShell@2 - displayName: 'Set source paths' - inputs: - targetType: inline - script: | - $multiCheckout = "$(Build.SourcesDirectory)/Foundry-Local" - if (Test-Path $multiCheckout) { - $repoRoot = $multiCheckout - } else { - $repoRoot = "$(Build.SourcesDirectory)" - } - $testDataDir = "$(Build.SourcesDirectory)/test-data-shared" - Write-Host "##vso[task.setvariable variable=repoRoot]$repoRoot" - Write-Host "##vso[task.setvariable variable=testDataDir]$testDataDir" - -# Read version from the version-info artifact produced by compute_version stage. -# Legacy SDKs read the `.v1.txt` flavor (sdk_v2 reads `.txt`). -- task: PowerShell@2 - displayName: 'Set crate version' - inputs: - targetType: inline - script: | - $v = (Get-Content "$(Pipeline.Workspace)/version-info/sdkVersion.v1.txt" -Raw).Trim() - Write-Host "Crate version: $v" - - # Patch Cargo.toml version field - $cargoPath = "$(repoRoot)/sdk/rust/Cargo.toml" - $content = Get-Content $cargoPath -Raw - $content = $content -replace '(?m)^version\s*=\s*"[^"]+"', "version = `"$v`"" - Set-Content -Path $cargoPath -Value $content - Write-Host "Patched Cargo.toml with version $v" - -# List downloaded FLC artifact for debugging -- task: PowerShell@2 - displayName: 'List downloaded FLC artifact' - inputs: - targetType: inline - script: | - Write-Host "Contents of ${{ parameters.flcNugetDir }}:" - Get-ChildItem "${{ parameters.flcNugetDir }}" -Recurse | ForEach-Object { Write-Host $_.FullName } - -# Load dependency versions from deps_versions.json -- template: update-deps-versions-steps.yml - parameters: - repoRoot: $(repoRoot) - artifactDir: ${{ parameters.depsVersionsDir }} - isWinML: ${{ parameters.isWinML }} - -# Rust publishes a single crate that carries both deps_versions.json and -# deps_versions_winml.json, so always refresh WinML deps as part of packaging. -- template: update-deps-versions-steps.yml - parameters: - repoRoot: $(repoRoot) - artifactDir: ${{ parameters.depsVersionsWinmlDir }} - isWinML: true - -# Copy both deps_versions JSON files into the crate directory so cargo -# package includes them and build.rs can find the right one at build time -# since there is only 1 package for both rust artifacts. -- task: PowerShell@2 - displayName: 'Copy deps_versions for crate packaging' - inputs: - targetType: inline - script: | - Copy-Item "$(repoRoot)/sdk/deps_versions.json" "$(repoRoot)/sdk/rust/deps_versions.json" -Force - Copy-Item "$(repoRoot)/sdk/deps_versions_winml.json" "$(repoRoot)/sdk/rust/deps_versions_winml.json" -Force - -# Extract FLC native binaries from the pipeline-built .nupkg so that -# build.rs finds them already present and skips downloading from the feed. -- task: PowerShell@2 - displayName: 'Extract FLC native binaries for Rust build' - inputs: - targetType: inline - script: | - $nupkg = Get-ChildItem "${{ parameters.flcNugetDir }}" -Recurse -Filter "Microsoft.AI.Foundry.Local.Core*.nupkg" -Exclude "*.snupkg" | Select-Object -First 1 - if (-not $nupkg) { throw "No FLC .nupkg found in ${{ parameters.flcNugetDir }}" } - Write-Host "Found NuGet package: $($nupkg.FullName)" - - $extractDir = "$(Build.ArtifactStagingDirectory)/flc-extract-rust" - $zip = [System.IO.Path]::ChangeExtension($nupkg.FullName, ".zip") - Copy-Item $nupkg.FullName $zip -Force - Expand-Archive -Path $zip -DestinationPath $extractDir -Force - - # Determine RID for this agent - $arch = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64') { 'arm64' } else { 'x64' } - if ($IsLinux) { - $rid = "linux-$arch" - } elseif ($IsMacOS) { - $rid = "osx-$arch" - } else { - $rid = "win-$arch" - } - - $nativeDir = "$extractDir/runtimes/$rid/native" - if (-not (Test-Path $nativeDir)) { throw "No native binaries found at $nativeDir for RID $rid" } - - # Stage them where build.rs can discover them - $flcNativeDir = "$(Build.ArtifactStagingDirectory)/flc-native-rust" - New-Item -ItemType Directory -Path $flcNativeDir -Force | Out-Null - Get-ChildItem $nativeDir -File | Copy-Item -Destination $flcNativeDir -Force - # Set FOUNDRY_NATIVE_OVERRIDE_DIR so build.rs copies these into OUT_DIR - # instead of trying to download the unpublished FLC Core from the feed. - Write-Host "##vso[task.setvariable variable=FOUNDRY_NATIVE_OVERRIDE_DIR]$flcNativeDir" - Write-Host "Extracted FLC native binaries to $flcNativeDir`:" - Get-ChildItem $flcNativeDir | ForEach-Object { Write-Host " $($_.Name)" } - -# Install Rust toolchain -- task: PowerShell@2 - displayName: 'Install Rust toolchain' - inputs: - targetType: inline - script: | - if ($IsWindows -or (-not $IsLinux -and -not $IsMacOS)) { - Invoke-WebRequest -Uri https://win.rustup.rs/x86_64 -OutFile rustup-init.exe - .\rustup-init.exe -y --default-toolchain stable --profile minimal -c clippy,rustfmt - Remove-Item rustup-init.exe - $cargoPath = "$env:USERPROFILE\.cargo\bin" - } else { - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --profile minimal -c clippy,rustfmt - $cargoPath = "$env:HOME/.cargo/bin" - } - Write-Host "##vso[task.prependpath]$cargoPath" - -# The .cargo/config.toml redirects crates-io to an Azure Artifacts feed -# for CFS compliance. Remove the redirect in CI so cargo can fetch from -# crates.io directly without Azure DevOps auth. -- task: PowerShell@2 - displayName: 'Use crates.io directly' - inputs: - targetType: inline - script: | - $configPath = "$(repoRoot)/sdk/rust/.cargo/config.toml" - if (Test-Path $configPath) { - Remove-Item $configPath - Write-Host "Removed .cargo/config.toml crates-io redirect" - } - -- task: PowerShell@2 - displayName: 'Check formatting' - inputs: - targetType: inline - script: | - Set-Location "$(repoRoot)/sdk/rust" - cargo fmt --all -- --check - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -- task: PowerShell@2 - displayName: 'Run clippy' - inputs: - targetType: inline - script: | - Set-Location "$(repoRoot)/sdk/rust" - $features = if ("${{ parameters.isWinML }}" -eq "True") { "--features winml" } else { "" } - Invoke-Expression "cargo clippy --all-targets $features -- -D warnings" - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -- task: PowerShell@2 - displayName: 'Build' - inputs: - targetType: inline - script: | - Set-Location "$(repoRoot)/sdk/rust" - $features = if ("${{ parameters.isWinML }}" -eq "True") { "--features winml" } else { "" } - Invoke-Expression "cargo build $features" - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -# --allow-dirty allows packaging with uncommitted changes (build.rs modifies generated files) -- task: PowerShell@2 - displayName: 'Package crate' - inputs: - targetType: inline - script: | - Set-Location "$(repoRoot)/sdk/rust" - $features = if ("${{ parameters.isWinML }}" -eq "True") { "--features winml" } else { "" } - Invoke-Expression "cargo package $features --allow-dirty" - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -# Stage output -- task: PowerShell@2 - displayName: 'Stage crate artifact' - inputs: - targetType: inline - script: | - $destDir = "${{ parameters.outputDir }}" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item "$(repoRoot)/sdk/rust/target/package/*.crate" "$destDir/" - Write-Host "Staged crates:" - Get-ChildItem $destDir | ForEach-Object { Write-Host " $($_.Name)" } - diff --git a/.pipelines/v1/templates/package-core-steps.yml b/.pipelines/v1/templates/package-core-steps.yml deleted file mode 100644 index fb9edc514..000000000 --- a/.pipelines/v1/templates/package-core-steps.yml +++ /dev/null @@ -1,345 +0,0 @@ -# Steps to collect per-platform FLC native binaries, organize into NuGet layout, -# pack + sign the NuGet package, and build Python wheels (wheel package name and -# platforms depend on the isWinML parameter). The parent job must download all -# platform artifacts and checkout neutron-server. -parameters: -- name: version - type: string -- name: isRelease - type: boolean - default: false -- name: isWinML - type: boolean - default: false -- name: prereleaseId - type: string - default: '' -- name: platforms - type: object # list of { name, artifactName } - -steps: -- task: PowerShell@2 - displayName: 'Set source paths' - inputs: - targetType: inline - script: | - $nsRoot = "$(Build.SourcesDirectory)/neutron-server" - Write-Host "##vso[task.setvariable variable=nsRoot]$nsRoot" - -- task: PowerShell@2 - displayName: 'Organize native binaries' - inputs: - targetType: inline - script: | - $unifiedPath = "$(Build.ArtifactStagingDirectory)/unified" - New-Item -ItemType Directory -Path $unifiedPath -Force | Out-Null - - $platformsJson = @' - ${{ convertToJson(parameters.platforms) }} - '@ - $platforms = $platformsJson | ConvertFrom-Json - - $isWinML = "${{ parameters.isWinML }}" -eq "True" - - foreach ($p in $platforms) { - $srcDir = "$(Pipeline.Workspace)/$($p.artifactName)" - Write-Host "Looking for artifacts at: $srcDir" - if (-not (Test-Path $srcDir)) { - throw "Artifact directory $srcDir does not exist. All platform artifacts must be present to produce a complete NuGet package." - } - $destDir = "$unifiedPath/runtimes/$($p.name)/native" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Get-ChildItem $srcDir -File | Where-Object { $_.Name -like "Microsoft.AI.Foundry.Local.Core.*" } | - Copy-Item -Destination $destDir -Force - Write-Host "Copied $($p.name) binaries to $destDir" - } - - $nsRoot = "$(nsRoot)" - - if ($isWinML) { - [xml]$propsXml = Get-Content "$nsRoot/Directory.Packages.props" - $winMLVer = [string]$propsXml.Project.PropertyGroup.WinMLVersion - if ([string]::IsNullOrWhiteSpace($winMLVer)) { - throw "Directory.Packages.props is missing WinMLVersion." - } - - $runtimePackageDir = "$(Build.ArtifactStagingDirectory)/winml-runtime-package" - New-Item -ItemType Directory -Path $runtimePackageDir -Force | Out-Null - - $nugetArgs = @( - 'install', 'Microsoft.Windows.AI.MachineLearning', - '-Version', $winMLVer, - '-Source', 'https://api.nuget.org/v3/index.json', - '-OutputDirectory', $runtimePackageDir, - '-ExcludeVersion', - '-NonInteractive', - '-DirectDownload' - ) - Write-Host "Running: nuget $($nugetArgs -join ' ')" - & nuget $nugetArgs - if ($LASTEXITCODE -ne 0) { throw "Failed to download Microsoft.Windows.AI.MachineLearning $winMLVer" } - - $runtimePackageRoot = Get-ChildItem $runtimePackageDir -Directory | - Where-Object { $_.Name -like "Microsoft.Windows.AI.MachineLearning*" } | - Select-Object -First 1 - if (-not $runtimePackageRoot) { - throw "nuget install did not produce a Microsoft.Windows.AI.MachineLearning package directory in $runtimePackageDir" - } - - foreach ($p in $platforms) { - if (-not $p.name.StartsWith("win-")) { - continue - } - - $runtimeDll = @( - "$($runtimePackageRoot.FullName)/runtimes/$($p.name)/Microsoft.Windows.AI.MachineLearning.dll", - "$($runtimePackageRoot.FullName)/runtimes/$($p.name)/native/Microsoft.Windows.AI.MachineLearning.dll" - ) | Where-Object { Test-Path $_ } | Select-Object -First 1 - if ([string]::IsNullOrWhiteSpace($runtimeDll)) { - throw "Microsoft.Windows.AI.MachineLearning $winMLVer does not contain a Microsoft.Windows.AI.MachineLearning.dll for $($p.name)" - } - - $destDir = "$unifiedPath/runtimes/$($p.name)/native" - Copy-Item $runtimeDll -Destination $destDir -Force - Write-Host "Copied WinML runtime DLL for $($p.name) to $destDir" - } - } - - # Copy build integration files from neutron-server - foreach ($dir in @("build", "buildTransitive")) { - $src = "$nsRoot/src/FoundryLocalCore/Core/$dir" - if (Test-Path $src) { - Copy-Item -Path $src -Destination "$unifiedPath/$dir" -Recurse -Force - } - } - $license = "$nsRoot/src/FoundryLocalCore/Core/LICENSE.txt" - if (Test-Path $license) { - Copy-Item $license "$unifiedPath/LICENSE.txt" -Force - } - -# Read version from the version-info artifact produced by compute_version stage. -# Legacy core reads the `.v1.txt` flavor (sdk_v2 reads `.txt`). -- task: PowerShell@2 - displayName: 'Set FLC package version' - inputs: - targetType: inline - script: | - $v = (Get-Content "$(Pipeline.Workspace)/version-info/flcVersion.v1.txt" -Raw).Trim() - Write-Host "FLC version: $v" - Write-Host "##vso[task.setvariable variable=flcVersion]$v" - -# Pack NuGet -- task: PowerShell@2 - displayName: 'Pack FLC NuGet' - inputs: - targetType: inline - script: | - $nsRoot = "$(nsRoot)" - [xml]$propsXml = Get-Content "$nsRoot/Directory.Packages.props" - $pg = $propsXml.Project.PropertyGroup - - $outDir = "$(Build.ArtifactStagingDirectory)/flc-nuget" - New-Item -ItemType Directory -Path $outDir -Force | Out-Null - - if ("${{ parameters.isWinML }}" -eq "True") { - $nuspec = "$nsRoot/src/FoundryLocalCore/Core/WinMLNuget.nuspec" - $id = "Microsoft.AI.Foundry.Local.Core.WinML" - $ortVer = [string]$pg.OnnxRuntimeFoundryVersionForWinML - $genaiVer = [string]$pg.OnnxRuntimeGenAIFoundryVersion - $winMLVer = [string]$pg.WinMLVersion - if ([string]::IsNullOrWhiteSpace($ortVer)) { throw "Directory.Packages.props is missing OnnxRuntimeFoundryVersionForWinML." } - if ([string]::IsNullOrWhiteSpace($genaiVer)) { throw "Directory.Packages.props is missing OnnxRuntimeGenAIFoundryVersion." } - if ([string]::IsNullOrWhiteSpace($winMLVer)) { throw "Directory.Packages.props is missing WinMLVersion." } - - $props = "id=$id;version=$(flcVersion);commitId=$(Build.SourceVersion);OnnxRuntimeFoundryVersionForWinML=$ortVer;OnnxRuntimeGenAIFoundryVersion=$genaiVer;WinMLVersion=$winMLVer" - } else { - $nuspec = "$nsRoot/src/FoundryLocalCore/Core/NativeNuget.nuspec" - $id = "Microsoft.AI.Foundry.Local.Core" - $ortVer = $pg.OnnxRuntimeFoundryVersion - $genaiVer = $pg.OnnxRuntimeGenAIFoundryVersion - $props = "id=$id;version=$(flcVersion);commitId=$(Build.SourceVersion);OnnxRuntimeFoundryVersion=$ortVer;OnnxRuntimeGenAIFoundryVersion=$genaiVer" - } - - $nugetArgs = @( - 'pack', $nuspec, - '-OutputDirectory', $outDir, - '-BasePath', "$(Build.ArtifactStagingDirectory)/unified", - '-Properties', $props, - '-Symbols', '-SymbolPackageFormat', 'snupkg' - ) - Write-Host "Running: nuget $($nugetArgs -join ' ')" - & nuget $nugetArgs - if ($LASTEXITCODE -ne 0) { throw "NuGet pack failed" } - -# Sign NuGet package -- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5 - displayName: 'Sign FLC NuGet package' - inputs: - ConnectedServiceName: 'OnnxrunTimeCodeSign_20240611' - UseMSIAuthentication: true - AppRegistrationClientId: '$(esrpClientId)' - AppRegistrationTenantId: '$(esrpTenantId)' - EsrpClientId: '$(esrpClientId)' - AuthAKVName: '$(esrpAkvName)' - AuthSignCertName: '$(esrpSignCertName)' - FolderPath: '$(Build.ArtifactStagingDirectory)/flc-nuget' - Pattern: '*.nupkg' - SessionTimeout: 90 - ServiceEndpointUrl: 'https://api.esrp.microsoft.com/api/v2' - MaxConcurrency: 25 - signConfigType: inlineSignParams - inlineOperation: | - [{"keyCode":"CP-401405","operationSetCode":"NuGetSign","parameters":[],"toolName":"sign","toolVersion":"6.2.9304.0"},{"keyCode":"CP-401405","operationSetCode":"NuGetVerify","parameters":[],"toolName":"sign","toolVersion":"6.2.9304.0"}] - -# Build Python wheels from the NuGet package -- task: PowerShell@2 - displayName: 'Build foundry_local_core Python Wheels' - inputs: - targetType: inline - script: | - $stagingDir = "$(Build.ArtifactStagingDirectory)/flc-wheels" - New-Item -ItemType Directory -Path $stagingDir -Force | Out-Null - - $isWinML = "${{ parameters.isWinML }}" -eq "True" - - # Find and extract the NuGet package (.nupkg is a zip archive) - $nupkgFilter = if ($isWinML) { "Microsoft.AI.Foundry.Local.Core.WinML*.nupkg" } else { "Microsoft.AI.Foundry.Local.Core*.nupkg" } - $nupkg = Get-ChildItem "$(Build.ArtifactStagingDirectory)/flc-nuget" -Filter $nupkgFilter | Where-Object { $_.Name -notlike "*.snupkg" } | Select-Object -First 1 - if (-not $nupkg) { throw "No FLC .nupkg found matching $nupkgFilter" } - Write-Host "Found NuGet package: $($nupkg.Name)" - - $extractDir = "$(Build.ArtifactStagingDirectory)/flc-extracted" - $nupkgZip = [System.IO.Path]::ChangeExtension($nupkg.FullName, ".zip") - Copy-Item -Path $nupkg.FullName -Destination $nupkgZip -Force - Expand-Archive -Path $nupkgZip -DestinationPath $extractDir -Force - - # Convert NuGet version to PEP 440 - # NuGet: 0.9.0-dev-202603271723-bb400310 → PEP 440: 0.9.0.dev202603271723 - # The commit hash is dropped because .devN requires N to be a pure integer. - $nupkgVersion = $nupkg.BaseName -replace '^Microsoft\.AI\.Foundry\.Local\.Core(\.WinML)?\.', '' - $parts = $nupkgVersion -split '-' - $pyVersion = if ($parts.Count -ge 3 -and $parts[1] -eq 'dev') { "$($parts[0]).dev$($parts[2])" } - elseif ($parts.Count -eq 2) { "$($parts[0])$($parts[1])" } - else { $parts[0] } - Write-Host "Python package version: $pyVersion" - - $packageName = if ($isWinML) { "foundry_local_core_winml" } else { "foundry_local_core" } - - if ($isWinML) { - $platforms = @( - @{rid="win-x64"; pyKey="bin"; tag="win_amd64"}, - @{rid="win-arm64"; pyKey="bin"; tag="win_arm64"} - ) - } else { - $platforms = @( - @{rid="win-x64"; pyKey="bin"; tag="win_amd64"}, - @{rid="win-arm64"; pyKey="bin"; tag="win_arm64"}, - @{rid="linux-x64"; pyKey="bin"; tag="manylinux_2_28_x86_64"}, - @{rid="linux-arm64"; pyKey="bin"; tag="manylinux_2_28_aarch64"}, - @{rid="osx-arm64"; pyKey="bin"; tag="macosx_11_0_arm64"} - ) - } - - foreach ($p in $platforms) { - $nativeSrc = "$extractDir/runtimes/$($p.rid)/native" - if (-not (Test-Path $nativeSrc)) { - Write-Warning "No native binaries found for $($p.rid) — skipping." - continue - } - - $wheelRoot = "$(Build.ArtifactStagingDirectory)/wheels-build/flc_wheel_$($p.tag)" - $pkgDir = "$wheelRoot/$packageName" - New-Item -ItemType Directory -Path "$pkgDir/$($p.pyKey)" -Force | Out-Null - "" | Set-Content -Encoding ascii "$pkgDir/__init__.py" - Get-ChildItem $nativeSrc -File | Copy-Item -Destination "$pkgDir/$($p.pyKey)" - - $normalizedName = $packageName.Replace('_', '-') - $wheelTag = "py3-none-$($p.tag)" - $distInfoName = "$packageName-$pyVersion" - $wheelName = "$distInfoName-$wheelTag.whl" - $distInfoDir = "$wheelRoot/$distInfoName.dist-info" - New-Item -ItemType Directory -Path $distInfoDir -Force | Out-Null - - $utf8NoBom = [System.Text.UTF8Encoding]::new($false) - - [System.IO.File]::WriteAllText("$distInfoDir/WHEEL", - "Wheel-Version: 1.0`nGenerator: custom`nRoot-Is-Purelib: false`nTag: $wheelTag`n", $utf8NoBom) - - [System.IO.File]::WriteAllText("$distInfoDir/METADATA", - "Metadata-Version: 2.1`nName: $normalizedName`nVersion: $pyVersion`n", $utf8NoBom) - - $recordLines = Get-ChildItem $wheelRoot -Recurse -File | ForEach-Object { - $rel = $_.FullName.Substring($wheelRoot.Length + 1).Replace('\', '/') - $raw = (Get-FileHash $_.FullName -Algorithm SHA256).Hash - $bytes = [byte[]]::new($raw.Length / 2) - for ($i = 0; $i -lt $raw.Length; $i += 2) { $bytes[$i/2] = [Convert]::ToByte($raw.Substring($i, 2), 16) } - $b64 = [Convert]::ToBase64String($bytes) -replace '\+','-' -replace '/','_' -replace '=','' - "$rel,sha256=$b64,$($_.Length)" - } - $recordContent = ($recordLines + "$distInfoName.dist-info/RECORD,,") -join "`n" - [System.IO.File]::WriteAllText("$distInfoDir/RECORD", $recordContent, $utf8NoBom) - - $wheelPath = "$stagingDir/$wheelName" - Add-Type -AssemblyName System.IO.Compression.FileSystem - $zip = [System.IO.Compression.ZipFile]::Open($wheelPath, 'Create') - try { - Get-ChildItem $wheelRoot -Recurse -File | ForEach-Object { - $rel = $_.FullName.Substring($wheelRoot.Length + 1).Replace('\', '/') - [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip, $_.FullName, $rel) | Out-Null - } - } finally { - $zip.Dispose() - } - Write-Host "Created wheel: $wheelName" - } - - Write-Host "`nAll wheels:" - Get-ChildItem $stagingDir -Filter "*.whl" | ForEach-Object { Write-Host " $($_.Name)" } - -# Write partial deps_versions.json for this variant. The merge_deps_versions -# stage combines standard + WinML partials into a single complete artifact. -- task: PowerShell@2 - displayName: 'Write deps_versions.json artifact' - inputs: - targetType: inline - script: | - $nsRoot = "$(nsRoot)" - [xml]$propsXml = Get-Content "$nsRoot/Directory.Packages.props" - $pg = $propsXml.Project.PropertyGroup - - $isWinML = "${{ parameters.isWinML }}" -eq "True" - - # Compute PEP 440 version from the NuGet flcVersion - $parts = "$(flcVersion)" -split '-' - $pyVer = if ($parts.Count -ge 3 -and $parts[1] -eq 'dev') { "$($parts[0]).dev$($parts[2])" } - elseif ($parts.Count -eq 2) { "$($parts[0])$($parts[1])" } - else { $parts[0] } - - # The pipeline produces separate dependency version artifacts - # (deps-versions-standard / deps-versions-winml), so SDK stages pick the - # right one via isWinML. - if ($isWinML) { - $deps = @{ - 'foundry-local-core' = @{ nuget = "$(flcVersion)"; python = $pyVer } - 'windows-ai-machinelearning' = @{ version = [string]$pg.WinMLVersion } - onnxruntime = @{ version = [string]$pg.OnnxRuntimeFoundryVersionForWinML } - 'onnxruntime-genai' = @{ version = [string]$pg.OnnxRuntimeGenAIFoundryVersion } - } - } else { - $deps = @{ - 'foundry-local-core' = @{ nuget = "$(flcVersion)"; python = $pyVer } - onnxruntime = @{ version = [string]$pg.OnnxRuntimeFoundryVersion } - 'onnxruntime-genai' = @{ version = [string]$pg.OnnxRuntimeGenAIFoundryVersion } - } - } - - # WinML artifact is named deps_versions_winml.json to match repo convention. - $fileName = if ($isWinML) { "deps_versions_winml.json" } else { "deps_versions.json" } - $json = $deps | ConvertTo-Json -Depth 3 - Write-Host "${fileName}:" - Write-Host $json - - $outDir = "$(Build.ArtifactStagingDirectory)/deps-versions" - New-Item -ItemType Directory -Path $outDir -Force | Out-Null - [System.IO.File]::WriteAllText("$outDir/$fileName", $json, [System.Text.UTF8Encoding]::new($false)) - Write-Host "Wrote $fileName to $outDir" diff --git a/.pipelines/v1/templates/stages-sdk-v1.yml b/.pipelines/v1/templates/stages-sdk-v1.yml deleted file mode 100644 index 7bbd1f368..000000000 --- a/.pipelines/v1/templates/stages-sdk-v1.yml +++ /dev/null @@ -1,1523 +0,0 @@ -# sdk_v1 coordinator: emits the full legacy (sdk/) stage graph. -# -# Produces NuGet/wheel/JS artifacts for Foundry Local Core (FLC) plus the -# v1 C# / JS / Python / Rust SDKs in both base and WinML flavors. -# -# Assumes the caller has already emitted: -# * a `compute_version` stage publishing the `version-info` pipeline -# artifact (containing sdkVersion.v1.txt, pyVersion.v1.txt, flcVersion.v1.txt) -# * any stage referenced by `gateDependsOn` (typically `detect_changes`) -# -# The entire subgraph is gated by a single artificial root stage (`v1_gate`) -# whose runtime condition is supplied via `gateCondition`. When v1_gate is -# skipped, every downstream v1 stage skips via ADO's default `succeeded()` -# cascade on dependsOn. See stages-sdk-v2.yml for the rationale behind this -# pattern. - -parameters: -- name: version - type: string -- name: prereleaseId - type: string - default: 'none' -- name: isRelease - type: boolean - default: false -- name: neutronServerBranch - type: string -- name: gateCondition - type: string - default: 'succeeded()' -- name: gateDependsOn - type: object - default: [] - -stages: - -# -- Artificial root: gates the entire v1 subgraph -- -- stage: v1_gate - displayName: 'sdk_v1 build gate' - condition: ${{ parameters.gateCondition }} - dependsOn: ${{ parameters.gateDependsOn }} - jobs: - - job: noop - displayName: 'sdk_v1 build enabled' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - steps: - - checkout: none - - script: echo "sdk_v1 build enabled" - displayName: 'sdk_v1 build enabled' - -- stage: build_core - displayName: 'Build Core' - dependsOn: - - v1_gate - - compute_version - jobs: - - job: flc_win_x64 - displayName: 'win-x64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'flc-win-x64' - targetPath: '$(Build.ArtifactStagingDirectory)/native' - steps: - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: neutron-server - ref: refs/heads/${{ parameters.neutronServerBranch }} - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-core-steps.yml - parameters: - flavor: win-x64 - platform: x64 - - - job: flc_win_arm64 - displayName: 'win-arm64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'flc-win-arm64' - targetPath: '$(Build.ArtifactStagingDirectory)/native' - steps: - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: neutron-server - ref: refs/heads/${{ parameters.neutronServerBranch }} - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-core-steps.yml - parameters: - flavor: win-arm64 - platform: arm64 - - - job: flc_linux_x64 - displayName: 'linux-x64' - pool: - name: onnxruntime-Ubuntu2404-AMD-CPU - os: linux - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'flc-linux-x64' - targetPath: '$(Build.ArtifactStagingDirectory)/native' - steps: - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: neutron-server - ref: refs/heads/${{ parameters.neutronServerBranch }} - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-core-steps.yml - parameters: - flavor: linux-x64 - platform: x64 - - - job: flc_linux_arm64 - displayName: 'linux-arm64' - pool: - name: onnxruntime-linux-ARM64-CPU-2019 - os: linux - hostArchitecture: arm64 - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'flc-linux-arm64' - targetPath: '$(Build.ArtifactStagingDirectory)/native' - steps: - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: neutron-server - ref: refs/heads/${{ parameters.neutronServerBranch }} - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-core-steps.yml - parameters: - flavor: linux-arm64 - platform: arm64 - - - job: flc_osx_arm64 - displayName: 'osx-arm64' - pool: - name: AcesShared - os: macOS - demands: - - ImageOverride -equals ACES_VM_SharedPool_Sequoia - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'flc-osx-arm64' - targetPath: '$(Build.ArtifactStagingDirectory)/native' - steps: - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: neutron-server - ref: refs/heads/${{ parameters.neutronServerBranch }} - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - # AcesShared macOS agents don't have git-lfs pre-installed - - script: brew install git-lfs && git lfs install - displayName: 'Install Git LFS' - - template: build-core-steps.yml - parameters: - flavor: osx-arm64 - platform: arm64 - - - job: package_flc - displayName: 'Package Core' - dependsOn: - - flc_win_x64 - - flc_win_arm64 - - flc_linux_x64 - - flc_linux_arm64 - - flc_osx_arm64 - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'version-info' - targetPath: '$(Pipeline.Workspace)/version-info' - outputs: - - output: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Build.ArtifactStagingDirectory)/flc-nuget' - - output: pipelineArtifact - artifactName: 'flc-wheels' - targetPath: '$(Build.ArtifactStagingDirectory)/flc-wheels' - - output: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Build.ArtifactStagingDirectory)/deps-versions' - steps: - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: neutron-server - ref: refs/heads/${{ parameters.neutronServerBranch }} - - task: DownloadPipelineArtifact@2 - inputs: - buildType: current - artifactName: 'flc-win-x64' - targetPath: '$(Pipeline.Workspace)/flc-win-x64' - - task: DownloadPipelineArtifact@2 - inputs: - buildType: current - artifactName: 'flc-win-arm64' - targetPath: '$(Pipeline.Workspace)/flc-win-arm64' - - task: DownloadPipelineArtifact@2 - inputs: - buildType: current - artifactName: 'flc-linux-x64' - targetPath: '$(Pipeline.Workspace)/flc-linux-x64' - - task: DownloadPipelineArtifact@2 - inputs: - buildType: current - artifactName: 'flc-linux-arm64' - targetPath: '$(Pipeline.Workspace)/flc-linux-arm64' - - task: DownloadPipelineArtifact@2 - inputs: - buildType: current - artifactName: 'flc-osx-arm64' - targetPath: '$(Pipeline.Workspace)/flc-osx-arm64' - - task: PowerShell@2 - displayName: 'List downloaded platform artifacts' - inputs: - targetType: inline - script: | - foreach ($name in @('flc-win-x64','flc-win-arm64','flc-linux-x64','flc-linux-arm64','flc-osx-arm64')) { - $dir = "$(Pipeline.Workspace)/$name" - Write-Host "Contents of ${dir}:" - if (Test-Path $dir) { Get-ChildItem $dir -Recurse | ForEach-Object { Write-Host $_.FullName } } - else { Write-Host " (directory not found)" } - } - - template: package-core-steps.yml - parameters: - version: ${{ parameters.version }} - isRelease: ${{ parameters.isRelease }} - prereleaseId: ${{ parameters.prereleaseId }} - isWinML: false - platforms: - - name: win-x64 - artifactName: flc-win-x64 - - name: win-arm64 - artifactName: flc-win-arm64 - - name: linux-x64 - artifactName: flc-linux-x64 - - name: linux-arm64 - artifactName: flc-linux-arm64 - - name: osx-arm64 - artifactName: flc-osx-arm64 - -# ── Build C# SDK ── -- stage: build_cs - displayName: 'Build C# SDK' - dependsOn: - - v1_gate - - build_core - jobs: - - job: cs_sdk - displayName: 'Build' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'version-info' - targetPath: '$(Pipeline.Workspace)/version-info' - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - outputs: - - output: pipelineArtifact - artifactName: 'cs-sdk' - targetPath: '$(Build.ArtifactStagingDirectory)/cs-sdk' - steps: - - checkout: self - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-cs-steps.yml - parameters: - version: ${{ parameters.version }} - isRelease: ${{ parameters.isRelease }} - prereleaseId: ${{ parameters.prereleaseId }} - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - -# ── Build JS Node-API Addon (all platforms) ── -- stage: build_js_addon - displayName: 'Build JS Addon' - dependsOn: [v1_gate] - jobs: - - job: js_addon_win_x64 - displayName: 'Addon win32-x64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'js-addon-win32-x64' - targetPath: '$(Build.ArtifactStagingDirectory)/js-addon' - steps: - - checkout: self - - template: build-js-addon-steps.yml - parameters: - repoRoot: $(Build.SourcesDirectory) - - task: PowerShell@2 - displayName: 'Stage addon artifact' - inputs: - targetType: inline - script: | - $destDir = "$(Build.ArtifactStagingDirectory)/js-addon" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item "$(Build.SourcesDirectory)/sdk/js/prebuilds/win32-x64/foundry_local_napi.node" "$destDir/foundry_local_napi.node" -Force - - - job: js_addon_win_arm64 - displayName: 'Addon win32-arm64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'js-addon-win32-arm64' - targetPath: '$(Build.ArtifactStagingDirectory)/js-addon' - steps: - - checkout: self - - template: build-js-addon-steps.yml - parameters: - repoRoot: $(Build.SourcesDirectory) - targetArch: arm64 - - task: PowerShell@2 - displayName: 'Stage addon artifact' - inputs: - targetType: inline - script: | - $destDir = "$(Build.ArtifactStagingDirectory)/js-addon" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item "$(Build.SourcesDirectory)/sdk/js/prebuilds/win32-arm64/foundry_local_napi.node" "$destDir/foundry_local_napi.node" -Force - - - job: js_addon_linux_x64 - displayName: 'Addon linux-x64' - pool: - name: onnxruntime-Ubuntu2404-AMD-CPU - os: linux - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'js-addon-linux-x64' - targetPath: '$(Build.ArtifactStagingDirectory)/js-addon' - steps: - - checkout: self - - template: build-js-addon-steps.yml - parameters: - repoRoot: $(Build.SourcesDirectory) - - task: PowerShell@2 - displayName: 'Stage addon artifact' - inputs: - targetType: inline - script: | - $destDir = "$(Build.ArtifactStagingDirectory)/js-addon" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item "$(Build.SourcesDirectory)/sdk/js/prebuilds/linux-x64/foundry_local_napi.node" "$destDir/foundry_local_napi.node" -Force - - - job: js_addon_linux_arm64 - displayName: 'Addon linux-arm64' - pool: - name: onnxruntime-linux-ARM64-CPU-2019 - os: linux - hostArchitecture: arm64 - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'js-addon-linux-arm64' - targetPath: '$(Build.ArtifactStagingDirectory)/js-addon' - steps: - - checkout: self - - template: build-js-addon-steps.yml - parameters: - repoRoot: $(Build.SourcesDirectory) - - task: PowerShell@2 - displayName: 'Stage addon artifact' - inputs: - targetType: inline - script: | - $destDir = "$(Build.ArtifactStagingDirectory)/js-addon" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item "$(Build.SourcesDirectory)/sdk/js/prebuilds/linux-arm64/foundry_local_napi.node" "$destDir/foundry_local_napi.node" -Force - - - job: js_addon_osx_arm64 - displayName: 'Addon osx-arm64' - pool: - name: Azure Pipelines - vmImage: 'macOS-15' - os: macOS - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'js-addon-darwin-arm64' - targetPath: '$(Build.ArtifactStagingDirectory)/js-addon' - steps: - - checkout: self - - template: build-js-addon-steps.yml - parameters: - repoRoot: $(Build.SourcesDirectory) - targetArch: arm64 - - task: PowerShell@2 - displayName: 'Stage addon artifact' - inputs: - targetType: inline - script: | - $destDir = "$(Build.ArtifactStagingDirectory)/js-addon" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item "$(Build.SourcesDirectory)/sdk/js/prebuilds/darwin-arm64/foundry_local_napi.node" "$destDir/foundry_local_napi.node" -Force - -# ── Build JS SDK ── -- stage: build_js - displayName: 'Build JS SDK' - dependsOn: - - v1_gate - - build_core - - build_js_addon - jobs: - - job: js_sdk - displayName: 'Build' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'version-info' - targetPath: '$(Pipeline.Workspace)/version-info' - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - outputs: - - output: pipelineArtifact - artifactName: 'js-sdk' - targetPath: '$(Build.ArtifactStagingDirectory)/js-sdk' - steps: - - checkout: self - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - # Download prebuilt Node-API addons for all platforms - - task: DownloadPipelineArtifact@2 - displayName: 'Download addon (win32-x64)' - inputs: - buildType: current - artifactName: 'js-addon-win32-x64' - targetPath: '$(Pipeline.Workspace)/js-addon-win32-x64' - - task: DownloadPipelineArtifact@2 - displayName: 'Download addon (win32-arm64)' - inputs: - buildType: current - artifactName: 'js-addon-win32-arm64' - targetPath: '$(Pipeline.Workspace)/js-addon-win32-arm64' - - task: DownloadPipelineArtifact@2 - displayName: 'Download addon (linux-x64)' - inputs: - buildType: current - artifactName: 'js-addon-linux-x64' - targetPath: '$(Pipeline.Workspace)/js-addon-linux-x64' - - task: DownloadPipelineArtifact@2 - displayName: 'Download addon (linux-arm64)' - inputs: - buildType: current - artifactName: 'js-addon-linux-arm64' - targetPath: '$(Pipeline.Workspace)/js-addon-linux-arm64' - - task: DownloadPipelineArtifact@2 - displayName: 'Download addon (osx-arm64)' - inputs: - buildType: current - artifactName: 'js-addon-darwin-arm64' - targetPath: '$(Pipeline.Workspace)/js-addon-darwin-arm64' - - - task: PowerShell@2 - displayName: 'Place prebuilt addons' - inputs: - targetType: inline - script: | - $multiCheckout = "$(Build.SourcesDirectory)/Foundry-Local" - if (Test-Path $multiCheckout) { $repoRoot = $multiCheckout } else { $repoRoot = "$(Build.SourcesDirectory)" } - $prebuildsDir = "$repoRoot/sdk/js/prebuilds" - foreach ($platform in @('win32-x64','win32-arm64','linux-x64','linux-arm64','darwin-arm64')) { - $src = "$(Pipeline.Workspace)/js-addon-$platform/foundry_local_napi.node" - $destDir = "$prebuildsDir/$platform" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item $src "$destDir/foundry_local_napi.node" -Force - Write-Host "Placed addon for $platform ($($(Get-Item $src).Length) bytes)" - } - - - template: build-js-steps.yml - parameters: - version: ${{ parameters.version }} - isRelease: ${{ parameters.isRelease }} - prereleaseId: ${{ parameters.prereleaseId }} - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - -# ── Build Python SDK ── -- stage: build_python - displayName: 'Build Python SDK' - dependsOn: - - v1_gate - - build_core - jobs: - - job: python_sdk - displayName: 'Build' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'version-info' - targetPath: '$(Pipeline.Workspace)/version-info' - - input: pipelineArtifact - artifactName: 'flc-wheels' - targetPath: '$(Pipeline.Workspace)/flc-wheels' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - outputs: - - output: pipelineArtifact - artifactName: 'python-sdk' - targetPath: '$(Build.ArtifactStagingDirectory)/python-sdk' - steps: - - checkout: self - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-python-steps.yml - parameters: - version: ${{ parameters.version }} - isRelease: ${{ parameters.isRelease }} - prereleaseId: ${{ parameters.prereleaseId }} - isWinML: false - flcWheelsDir: '$(Pipeline.Workspace)/flc-wheels' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - -# ── Build Rust SDK ── -- stage: build_rust - displayName: 'Build Rust SDK' - dependsOn: - - v1_gate - - build_core - - build_core_winml - jobs: - - job: rust_sdk - displayName: 'Build' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'version-info' - targetPath: '$(Pipeline.Workspace)/version-info' - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - - input: pipelineArtifact - artifactName: 'deps-versions-winml' - targetPath: '$(Pipeline.Workspace)/deps-versions-winml' - outputs: - - output: pipelineArtifact - artifactName: 'rust-sdk' - targetPath: '$(Build.ArtifactStagingDirectory)/rust-sdk' - steps: - - checkout: self - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-rust-steps.yml - parameters: - version: ${{ parameters.version }} - isRelease: ${{ parameters.isRelease }} - prereleaseId: ${{ parameters.prereleaseId }} - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - depsVersionsWinmlDir: '$(Pipeline.Workspace)/deps-versions-winml' - -# Rust SDK has one package with different install options for standard vs WinML, -# so we only publish once under the standard stage and skip the WinML stage. Leaving -# it as a commented block incase we decide to publish separate Rust WinML package in the future. -# # ── Build Rust SDK (WinML) ── -# - stage: build_rust_winml -# displayName: 'Build Rust SDK (WinML)' -# dependsOn: -# - build_core_winml -# jobs: -# - job: rust_sdk_winml -# displayName: 'Build' -# pool: -# name: onnxruntime-Win-CPU-2022 -# os: windows -# templateContext: -# inputs: -# - input: pipelineArtifact -# artifactName: 'version-info' -# targetPath: '$(Pipeline.Workspace)/version-info' -# - input: pipelineArtifact -# artifactName: 'flc-nuget-winml' -# targetPath: '$(Pipeline.Workspace)/flc-nuget-winml' -# - input: pipelineArtifact -# artifactName: 'deps-versions-winml' -# targetPath: '$(Pipeline.Workspace)/deps-versions-winml' -# outputs: -# - output: pipelineArtifact -# artifactName: 'rust-sdk-winml' -# targetPath: '$(Build.ArtifactStagingDirectory)/rust-sdk-winml' -# steps: -# - checkout: self -# clean: true -# - checkout: test-data-shared -# lfs: true -# - template: build-rust-steps.yml -# parameters: -# version: ${{ parameters.version }} -# isRelease: ${{ parameters.isRelease }} -# prereleaseId: ${{ parameters.prereleaseId }} -# isWinML: true -# flcNugetDir: '$(Pipeline.Workspace)/flc-nuget-winml' -# depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-winml' -# outputDir: '$(Build.ArtifactStagingDirectory)/rust-sdk-winml' - -# ── Test C# SDK ── -- stage: test_cs - displayName: 'Test C#' - dependsOn: - - v1_gate - - build_cs - jobs: - - job: test_cs_win_x64 - displayName: 'win-x64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - basePath: '$(Agent.BuildDirectory)' - - template: test-cs-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_cs_linux_x64 - displayName: 'linux-x64' - pool: - name: onnxruntime-Ubuntu2404-AMD-CPU - os: linux - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - basePath: '$(Agent.BuildDirectory)' - - template: test-cs-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_cs_linux_arm64 - displayName: 'linux-arm64' - pool: - name: onnxruntime-linux-ARM64-CPU-2019 - os: linux - hostArchitecture: arm64 - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - basePath: '$(Agent.BuildDirectory)' - - template: test-cs-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_cs_osx_arm64 - displayName: 'osx-arm64' - pool: - name: AcesShared - os: macOS - demands: - - ImageOverride -equals ACES_VM_SharedPool_Sequoia - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - # AcesShared macOS agents don't have git-lfs pre-installed - - script: brew install git-lfs && git lfs install - displayName: 'Install Git LFS' - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - basePath: '$(Agent.BuildDirectory)' - - template: test-cs-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - -# ── Test JS SDK ── -- stage: test_js - displayName: 'Test JS' - dependsOn: - - v1_gate - - build_js - jobs: - - job: test_js_win_x64 - displayName: 'win-x64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: test-js-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_js_linux_x64 - displayName: 'linux-x64' - pool: - name: onnxruntime-Ubuntu2404-AMD-CPU - os: linux - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - basePath: '$(Agent.BuildDirectory)' - - template: test-js-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_js_linux_arm64 - displayName: 'linux-arm64' - pool: - name: onnxruntime-linux-ARM64-CPU-2019 - os: linux - hostArchitecture: arm64 - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - basePath: '$(Agent.BuildDirectory)' - - template: test-js-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_js_osx_arm64 - displayName: 'osx-arm64' - pool: - name: AcesShared - os: macOS - demands: - - ImageOverride -equals ACES_VM_SharedPool_Sequoia - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - # AcesShared macOS agents don't have git-lfs pre-installed - - script: brew install git-lfs && git lfs install - displayName: 'Install Git LFS' - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: test-js-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - -# ── Test Python SDK ── -- stage: test_python - displayName: 'Test Python' - dependsOn: - - v1_gate - - build_python - jobs: - - job: test_python_win_x64 - displayName: 'win-x64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-wheels' - targetPath: '$(Pipeline.Workspace)/flc-wheels' - - input: pipelineArtifact - artifactName: 'python-sdk' - targetPath: '$(Pipeline.Workspace)/python-sdk' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: test-python-steps.yml - parameters: - isWinML: false - flcWheelsDir: '$(Pipeline.Workspace)/flc-wheels' - sdkWheelsDir: '$(Pipeline.Workspace)/python-sdk' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_python_linux_x64 - displayName: 'linux-x64' - pool: - name: onnxruntime-Ubuntu2404-AMD-CPU - os: linux - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-wheels' - targetPath: '$(Pipeline.Workspace)/flc-wheels' - - input: pipelineArtifact - artifactName: 'python-sdk' - targetPath: '$(Pipeline.Workspace)/python-sdk' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - basePath: '$(Agent.BuildDirectory)' - - template: test-python-steps.yml - parameters: - isWinML: false - flcWheelsDir: '$(Pipeline.Workspace)/flc-wheels' - sdkWheelsDir: '$(Pipeline.Workspace)/python-sdk' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_python_linux_arm64 - displayName: 'linux-arm64' - pool: - name: onnxruntime-linux-ARM64-CPU-2019 - os: linux - hostArchitecture: arm64 - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-wheels' - targetPath: '$(Pipeline.Workspace)/flc-wheels' - - input: pipelineArtifact - artifactName: 'python-sdk' - targetPath: '$(Pipeline.Workspace)/python-sdk' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - basePath: '$(Agent.BuildDirectory)' - - template: test-python-steps.yml - parameters: - isWinML: false - flcWheelsDir: '$(Pipeline.Workspace)/flc-wheels' - sdkWheelsDir: '$(Pipeline.Workspace)/python-sdk' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_python_osx_arm64 - displayName: 'osx-arm64' - pool: - name: AcesShared - os: macOS - demands: - - ImageOverride -equals ACES_VM_SharedPool_Sequoia - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-wheels' - targetPath: '$(Pipeline.Workspace)/flc-wheels' - - input: pipelineArtifact - artifactName: 'python-sdk' - targetPath: '$(Pipeline.Workspace)/python-sdk' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - # AcesShared macOS agents don't have git-lfs pre-installed - - script: brew install git-lfs && git lfs install - displayName: 'Install Git LFS' - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: test-python-steps.yml - parameters: - isWinML: false - flcWheelsDir: '$(Pipeline.Workspace)/flc-wheels' - sdkWheelsDir: '$(Pipeline.Workspace)/python-sdk' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - -# ── Test Rust SDK ── -- stage: test_rust - displayName: 'Test Rust' - dependsOn: - - v1_gate - - build_rust - jobs: - - job: test_rust_win_x64 - displayName: 'win-x64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: test-rust-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_rust_linux_x64 - displayName: 'linux-x64' - pool: - name: onnxruntime-Ubuntu2404-AMD-CPU - os: linux - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: test-rust-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_rust_linux_arm64 - displayName: 'linux-arm64' - pool: - name: onnxruntime-linux-ARM64-CPU-2019 - os: linux - hostArchitecture: arm64 - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: test-rust-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - - - job: test_rust_osx_arm64 - displayName: 'osx-arm64' - pool: - name: AcesShared - os: macOS - demands: - - ImageOverride -equals ACES_VM_SharedPool_Sequoia - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget' - targetPath: '$(Pipeline.Workspace)/flc-nuget' - - input: pipelineArtifact - artifactName: 'deps-versions-standard' - targetPath: '$(Pipeline.Workspace)/deps-versions-standard' - steps: - # AcesShared macOS agents don't have git-lfs pre-installed - - script: brew install git-lfs && git lfs install - displayName: 'Install Git LFS' - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: test-rust-steps.yml - parameters: - isWinML: false - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-standard' - -# ── Build FLC (WinML) ── -- stage: build_core_winml - displayName: 'Build Core (WinML)' - dependsOn: - - v1_gate - - compute_version - jobs: - - job: flc_winml_win_x64 - displayName: 'win-x64 (WinML)' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'flc-winml-win-x64' - targetPath: '$(Build.ArtifactStagingDirectory)/native' - steps: - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: neutron-server - ref: refs/heads/${{ parameters.neutronServerBranch }} - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-core-steps.yml - parameters: - flavor: win-x64 - platform: x64 - isWinML: true - - - job: flc_winml_win_arm64 - displayName: 'win-arm64 (WinML)' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - outputs: - - output: pipelineArtifact - artifactName: 'flc-winml-win-arm64' - targetPath: '$(Build.ArtifactStagingDirectory)/native' - steps: - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: neutron-server - ref: refs/heads/${{ parameters.neutronServerBranch }} - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-core-steps.yml - parameters: - flavor: win-arm64 - platform: arm64 - isWinML: true - - - job: package_flc_winml - displayName: 'Package Core (WinML)' - dependsOn: - - flc_winml_win_x64 - - flc_winml_win_arm64 - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'version-info' - targetPath: '$(Pipeline.Workspace)/version-info' - outputs: - - output: pipelineArtifact - artifactName: 'flc-nuget-winml' - targetPath: '$(Build.ArtifactStagingDirectory)/flc-nuget' - - output: pipelineArtifact - artifactName: 'flc-wheels-winml' - targetPath: '$(Build.ArtifactStagingDirectory)/flc-wheels' - - output: pipelineArtifact - artifactName: 'deps-versions-winml' - targetPath: '$(Build.ArtifactStagingDirectory)/deps-versions' - steps: - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: neutron-server - ref: refs/heads/${{ parameters.neutronServerBranch }} - - task: DownloadPipelineArtifact@2 - inputs: - buildType: current - artifactName: 'flc-winml-win-x64' - targetPath: '$(Pipeline.Workspace)/flc-winml-win-x64' - - task: DownloadPipelineArtifact@2 - inputs: - buildType: current - artifactName: 'flc-winml-win-arm64' - targetPath: '$(Pipeline.Workspace)/flc-winml-win-arm64' - - task: PowerShell@2 - displayName: 'List downloaded WinML platform artifacts' - inputs: - targetType: inline - script: | - foreach ($name in @('flc-winml-win-x64','flc-winml-win-arm64')) { - $dir = "$(Pipeline.Workspace)/$name" - Write-Host "Contents of ${dir}:" - if (Test-Path $dir) { Get-ChildItem $dir -Recurse | ForEach-Object { Write-Host $_.FullName } } - else { Write-Host " (directory not found)" } - } - - template: package-core-steps.yml - parameters: - version: ${{ parameters.version }} - isRelease: ${{ parameters.isRelease }} - prereleaseId: ${{ parameters.prereleaseId }} - isWinML: true - platforms: - - name: win-x64 - artifactName: flc-winml-win-x64 - - name: win-arm64 - artifactName: flc-winml-win-arm64 - -# ── Build C# SDK (WinML) ── -- stage: build_cs_winml - displayName: 'Build C# SDK (WinML)' - dependsOn: - - v1_gate - - build_core_winml - jobs: - - job: cs_sdk_winml - displayName: 'Build' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'version-info' - targetPath: '$(Pipeline.Workspace)/version-info' - - input: pipelineArtifact - artifactName: 'flc-nuget-winml' - targetPath: '$(Pipeline.Workspace)/flc-nuget-winml' - - input: pipelineArtifact - artifactName: 'deps-versions-winml' - targetPath: '$(Pipeline.Workspace)/deps-versions-winml' - outputs: - - output: pipelineArtifact - artifactName: 'cs-sdk-winml' - targetPath: '$(Build.ArtifactStagingDirectory)/cs-sdk-winml' - steps: - - checkout: self - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-cs-steps.yml - parameters: - version: ${{ parameters.version }} - isRelease: ${{ parameters.isRelease }} - prereleaseId: ${{ parameters.prereleaseId }} - isWinML: true - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget-winml' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-winml' - outputDir: '$(Build.ArtifactStagingDirectory)/cs-sdk-winml' - -# ── Build JS SDK (WinML) ── -- stage: build_js_winml - displayName: 'Build JS SDK (WinML)' - dependsOn: - - v1_gate - - build_core_winml - - build_js_addon - jobs: - - job: js_sdk_winml - displayName: 'Build' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'version-info' - targetPath: '$(Pipeline.Workspace)/version-info' - - input: pipelineArtifact - artifactName: 'flc-nuget-winml' - targetPath: '$(Pipeline.Workspace)/flc-nuget-winml' - - input: pipelineArtifact - artifactName: 'deps-versions-winml' - targetPath: '$(Pipeline.Workspace)/deps-versions-winml' - outputs: - - output: pipelineArtifact - artifactName: 'js-sdk-winml' - targetPath: '$(Build.ArtifactStagingDirectory)/js-sdk' - steps: - - checkout: self - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - # Download prebuilt Node-API addons for all platforms - - task: DownloadPipelineArtifact@2 - displayName: 'Download addon (win32-x64)' - inputs: - buildType: current - artifactName: 'js-addon-win32-x64' - targetPath: '$(Pipeline.Workspace)/js-addon-win32-x64' - - task: DownloadPipelineArtifact@2 - displayName: 'Download addon (win32-arm64)' - inputs: - buildType: current - artifactName: 'js-addon-win32-arm64' - targetPath: '$(Pipeline.Workspace)/js-addon-win32-arm64' - - task: DownloadPipelineArtifact@2 - displayName: 'Download addon (linux-x64)' - inputs: - buildType: current - artifactName: 'js-addon-linux-x64' - targetPath: '$(Pipeline.Workspace)/js-addon-linux-x64' - - task: DownloadPipelineArtifact@2 - displayName: 'Download addon (linux-arm64)' - inputs: - buildType: current - artifactName: 'js-addon-linux-arm64' - targetPath: '$(Pipeline.Workspace)/js-addon-linux-arm64' - - task: DownloadPipelineArtifact@2 - displayName: 'Download addon (osx-arm64)' - inputs: - buildType: current - artifactName: 'js-addon-darwin-arm64' - targetPath: '$(Pipeline.Workspace)/js-addon-darwin-arm64' - - - task: PowerShell@2 - displayName: 'Place prebuilt addons' - inputs: - targetType: inline - script: | - $multiCheckout = "$(Build.SourcesDirectory)/Foundry-Local" - if (Test-Path $multiCheckout) { $repoRoot = $multiCheckout } else { $repoRoot = "$(Build.SourcesDirectory)" } - $prebuildsDir = "$repoRoot/sdk/js/prebuilds" - foreach ($platform in @('win32-x64','win32-arm64','linux-x64','linux-arm64','darwin-arm64')) { - $src = "$(Pipeline.Workspace)/js-addon-$platform/foundry_local_napi.node" - $destDir = "$prebuildsDir/$platform" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - Copy-Item $src "$destDir/foundry_local_napi.node" -Force - Write-Host "Placed addon for $platform ($($(Get-Item $src).Length) bytes)" - } - - - template: build-js-steps.yml - parameters: - version: ${{ parameters.version }} - isRelease: ${{ parameters.isRelease }} - prereleaseId: ${{ parameters.prereleaseId }} - isWinML: true - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget-winml' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-winml' - -# ── Build Python SDK (WinML) ── -- stage: build_python_winml - displayName: 'Build Python SDK (WinML)' - dependsOn: - - v1_gate - - build_core_winml - jobs: - - job: python_sdk_winml - displayName: 'Build' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'version-info' - targetPath: '$(Pipeline.Workspace)/version-info' - - input: pipelineArtifact - artifactName: 'flc-wheels-winml' - targetPath: '$(Pipeline.Workspace)/flc-wheels-winml' - - input: pipelineArtifact - artifactName: 'deps-versions-winml' - targetPath: '$(Pipeline.Workspace)/deps-versions-winml' - outputs: - - output: pipelineArtifact - artifactName: 'python-sdk-winml' - targetPath: '$(Build.ArtifactStagingDirectory)/python-sdk-winml' - steps: - - checkout: self - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: build-python-steps.yml - parameters: - version: ${{ parameters.version }} - isRelease: ${{ parameters.isRelease }} - prereleaseId: ${{ parameters.prereleaseId }} - isWinML: true - flcWheelsDir: '$(Pipeline.Workspace)/flc-wheels-winml' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-winml' - outputDir: '$(Build.ArtifactStagingDirectory)/python-sdk-winml' - -# ── Test C# SDK (WinML) ── -- stage: test_cs_winml - displayName: 'Test C# (WinML)' - dependsOn: - - v1_gate - - build_cs_winml - jobs: - - job: test_cs_winml_win_x64 - displayName: 'win-x64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget-winml' - targetPath: '$(Pipeline.Workspace)/flc-nuget-winml' - - input: pipelineArtifact - artifactName: 'deps-versions-winml' - targetPath: '$(Pipeline.Workspace)/deps-versions-winml' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - basePath: '$(Agent.BuildDirectory)' - - template: test-cs-steps.yml - parameters: - isWinML: true - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget-winml' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-winml' - -# ── Test JS SDK (WinML) ── -- stage: test_js_winml - displayName: 'Test JS (WinML)' - dependsOn: - - v1_gate - - build_js_winml - jobs: - - job: test_js_winml_win_x64 - displayName: 'win-x64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-nuget-winml' - targetPath: '$(Pipeline.Workspace)/flc-nuget-winml' - - input: pipelineArtifact - artifactName: 'deps-versions-winml' - targetPath: '$(Pipeline.Workspace)/deps-versions-winml' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: test-js-steps.yml - parameters: - isWinML: true - flcNugetDir: '$(Pipeline.Workspace)/flc-nuget-winml' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-winml' - -# ── Test Python SDK (WinML) ── -- stage: test_python_winml - displayName: 'Test Python (WinML)' - dependsOn: - - v1_gate - - build_python_winml - jobs: - - job: test_python_winml_win_x64 - displayName: 'win-x64' - pool: - name: onnxruntime-Win-CPU-2022 - os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: 'flc-wheels-winml' - targetPath: '$(Pipeline.Workspace)/flc-wheels-winml' - - input: pipelineArtifact - artifactName: 'python-sdk-winml' - targetPath: '$(Pipeline.Workspace)/python-sdk-winml' - - input: pipelineArtifact - artifactName: 'deps-versions-winml' - targetPath: '$(Pipeline.Workspace)/deps-versions-winml' - steps: - - checkout: self - clean: true - - template: ../../templates/checkout-steps.yml@self - parameters: - repoName: test-data-shared - - template: test-python-steps.yml - parameters: - isWinML: true - flcWheelsDir: '$(Pipeline.Workspace)/flc-wheels-winml' - sdkWheelsDir: '$(Pipeline.Workspace)/python-sdk-winml' - depsVersionsDir: '$(Pipeline.Workspace)/deps-versions-winml' \ No newline at end of file diff --git a/.pipelines/v1/templates/test-cs-steps.yml b/.pipelines/v1/templates/test-cs-steps.yml deleted file mode 100644 index 605b36cf2..000000000 --- a/.pipelines/v1/templates/test-cs-steps.yml +++ /dev/null @@ -1,149 +0,0 @@ -# Steps to test the C# SDK. -# Expects the SDK to be already built and the NuGet package available. -parameters: -- name: isWinML - type: boolean - default: false -- name: flcNugetDir - type: string - displayName: 'Path to directory containing the FLC .nupkg' -- name: depsVersionsDir - type: string - default: '' - displayName: 'Path to deps-versions artifact directory' - -steps: -- task: PowerShell@2 - displayName: 'Set source paths' - inputs: - targetType: inline - script: | - $multiCheckout = "$(Build.SourcesDirectory)/Foundry-Local" - if (Test-Path $multiCheckout) { - $repoRoot = $multiCheckout - } else { - $repoRoot = "$(Build.SourcesDirectory)" - } - $testDataDir = "$(Build.SourcesDirectory)/test-data-shared" - Write-Host "##vso[task.setvariable variable=repoRoot]$repoRoot" - Write-Host "##vso[task.setvariable variable=testDataDir]$testDataDir" - -- task: UseDotNet@2 - displayName: 'Use .NET 9 SDK' - inputs: - packageType: sdk - version: '9.0.x' - -- task: UseDotNet@2 - displayName: 'Install .NET 8 runtime' - inputs: - packageType: runtime - version: '8.0.x' - -# Load dependency versions from deps_versions.json -- template: update-deps-versions-steps.yml - parameters: - repoRoot: $(repoRoot) - artifactDir: ${{ parameters.depsVersionsDir }} - isWinML: ${{ parameters.isWinML }} - -# Create a temporary NuGet.config that includes the local FLC feed -- task: PowerShell@2 - displayName: 'Create NuGet.config with local FLC feed' - inputs: - targetType: inline - script: | - $nugetConfig = @" - - - - - - - - - - "@ - $nupkg = Get-ChildItem "${{ parameters.flcNugetDir }}" -Recurse -Filter "Microsoft.AI.Foundry.Local.Core*.nupkg" -Exclude "*.snupkg" | Select-Object -First 1 - if (-not $nupkg) { throw "No FLC .nupkg found in ${{ parameters.flcNugetDir }}" } - $flcFeedDir = $nupkg.DirectoryName - $nugetConfig = $nugetConfig -replace [regex]::Escape("${{ parameters.flcNugetDir }}"), $flcFeedDir - $configPath = "$(Build.ArtifactStagingDirectory)/NuGet.config" - Set-Content -Path $configPath -Value $nugetConfig - Write-Host "##vso[task.setvariable variable=customNugetConfig]$configPath" - Write-Host "Local FLC feed directory: $flcFeedDir" - -- task: NuGetAuthenticate@1 - displayName: 'Authenticate NuGet feeds' - -- ${{ if eq(parameters.isWinML, true) }}: - - task: PowerShell@2 - displayName: 'Install Windows App SDK Runtime' - inputs: - targetType: 'inline' - script: | - $installerUrl = "https://aka.ms/windowsappsdk/1.8/latest/windowsappruntimeinstall-x64.exe" - $installerPath = "$env:TEMP\windowsappruntimeinstall.exe" - Invoke-WebRequest -Uri $installerUrl -OutFile $installerPath - & $installerPath --quiet --force - if ($LASTEXITCODE -ne 0) { throw "Windows App SDK Runtime install failed" } - errorActionPreference: 'stop' - -# Per-job NuGet isolation to prevent "Central Directory corrupt" / file-locking -# errors when multiple C# test jobs (regular + WinML) run concurrently on the -# same reused agent. Keyed by $(System.JobId); cleaned on each run. -# https://learn.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-environment-variables -- task: PowerShell@2 - displayName: 'Set isolated NuGet packages path' - inputs: - targetType: inline - script: | - $buildDir = "$(Build.BinariesDirectory)/nuget-isolated-$(System.JobId)" - # Clean any leftover state from previous runs on this agent - if (Test-Path $buildDir) { - Remove-Item -Recurse -Force $buildDir - } - $pkgDir = "$buildDir/packages" - $httpCacheDir = "$buildDir/http-cache" - $pluginsCacheDir = "$buildDir/plugins-cache" - foreach ($d in @($pkgDir, $httpCacheDir, $pluginsCacheDir)) { - New-Item -ItemType Directory -Force -Path $d | Out-Null - } - - Write-Host "##vso[task.setvariable variable=NUGET_PACKAGES]$pkgDir" - Write-Host "##vso[task.setvariable variable=NUGET_HTTP_CACHE_PATH]$httpCacheDir" - Write-Host "##vso[task.setvariable variable=NUGET_PLUGINS_CACHE_PATH]$pluginsCacheDir" - Write-Host "NuGet isolation directory: $buildDir" - -- task: PowerShell@2 - displayName: 'Restore & build tests' - inputs: - targetType: inline - script: | - $rid = dotnet msbuild "$(repoRoot)/sdk/cs/test/FoundryLocal.Tests/Microsoft.AI.Foundry.Local.Tests.csproj" -getProperty:NETCoreSdkRuntimeIdentifier - if ($LASTEXITCODE -ne 0 -or -not $rid) { throw "Failed to determine RuntimeIdentifier" } - Write-Host "Restoring for RuntimeIdentifier: $rid" - - dotnet restore "$(repoRoot)/sdk/cs/test/FoundryLocal.Tests/Microsoft.AI.Foundry.Local.Tests.csproj" ` - --configfile "$(customNugetConfig)" ` - /p:UseWinML=${{ parameters.isWinML }} ` - /p:RuntimeIdentifiers=$rid - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - - dotnet build "$(repoRoot)/sdk/cs/test/FoundryLocal.Tests/Microsoft.AI.Foundry.Local.Tests.csproj" ` - --no-restore --configuration Release ` - /p:UseWinML=${{ parameters.isWinML }} ` - /p:RuntimeIdentifiers=$rid - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -- task: PowerShell@2 - displayName: 'Run SDK tests' - inputs: - targetType: inline - script: | - dotnet test "$(repoRoot)/sdk/cs/test/FoundryLocal.Tests/Microsoft.AI.Foundry.Local.Tests.csproj" ` - --no-build --configuration Release ` - /p:UseWinML=${{ parameters.isWinML }} - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - env: - TF_BUILD: 'true' diff --git a/.pipelines/v1/templates/test-js-steps.yml b/.pipelines/v1/templates/test-js-steps.yml deleted file mode 100644 index 2d007f70b..000000000 --- a/.pipelines/v1/templates/test-js-steps.yml +++ /dev/null @@ -1,156 +0,0 @@ -# Steps to test the JS SDK. -# Expects the SDK to be already built via build-js-steps.yml. -parameters: -- name: isWinML - type: boolean - default: false -- name: flcNugetDir - type: string - default: '' - displayName: 'Path to directory containing the FLC .nupkg' -- name: depsVersionsDir - type: string - default: '' - displayName: 'Path to deps-versions artifact directory' - -steps: -- task: PowerShell@2 - displayName: 'Set source paths' - inputs: - targetType: inline - script: | - $multiCheckout = "$(Build.SourcesDirectory)/Foundry-Local" - if (Test-Path $multiCheckout) { - $repoRoot = $multiCheckout - } else { - $repoRoot = "$(Build.SourcesDirectory)" - } - $testDataDir = "$(Build.SourcesDirectory)/test-data-shared" - Write-Host "##vso[task.setvariable variable=repoRoot]$repoRoot" - Write-Host "##vso[task.setvariable variable=testDataDir]$testDataDir" - -- task: NodeTool@0 - displayName: 'Use Node.js 20' - inputs: - versionSpec: '20.x' - -# Load dependency versions from deps_versions.json -- template: update-deps-versions-steps.yml - parameters: - repoRoot: $(repoRoot) - artifactDir: ${{ parameters.depsVersionsDir }} - isWinML: ${{ parameters.isWinML }} - -# Install JS dependencies with native binaries -- task: Npm@1 - displayName: 'npm install (skip native downloads)' - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'install --ignore-scripts' - -# esbuild (transitive dep via tsx) requires a platform-specific binary package. -# --ignore-scripts prevents it from installing automatically, so do it explicitly for Linux. -- task: Npm@1 - displayName: 'Install esbuild platform binary (Linux x64)' - condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'), ne(variables['Agent.OSArchitecture'], 'ARM64')) - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'install @esbuild/linux-x64 --no-save' - -- task: Npm@1 - displayName: 'Install esbuild platform binary (Linux arm64)' - condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'), eq(variables['Agent.OSArchitecture'], 'ARM64')) - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'install @esbuild/linux-arm64 --no-save' - -- task: PowerShell@2 - displayName: 'Extract FLC from pipeline-built artifact' - condition: and(succeeded(), ne('${{ parameters.flcNugetDir }}', '')) - inputs: - targetType: inline - script: | - $os = 'win32' - $arch = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64') { 'arm64' } else { 'x64' } - $platformKey = "$os-$arch" - $rid = if ($arch -eq 'arm64') { 'win-arm64' } else { 'win-x64' } - - if ($IsLinux) { - $os = 'linux' - $platformKey = "$os-$arch" - $rid = "linux-$arch" - } elseif ($IsMacOS) { - $os = 'darwin' - $platformKey = "$os-$arch" - $rid = "osx-$arch" - } - - $nupkg = Get-ChildItem "${{ parameters.flcNugetDir }}" -Recurse -Filter "Microsoft.AI.Foundry.Local.Core*.nupkg" -Exclude "*.snupkg" | Select-Object -First 1 - if (-not $nupkg) { throw "No FLC .nupkg found in ${{ parameters.flcNugetDir }}" } - - $extractDir = "$(Build.ArtifactStagingDirectory)/flc-extract" - $zip = [System.IO.Path]::ChangeExtension($nupkg.FullName, ".zip") - Copy-Item $nupkg.FullName $zip -Force - Expand-Archive -Path $zip -DestinationPath $extractDir -Force - - $destDir = "$(repoRoot)/sdk/js/foundry-local-core/$platformKey" - New-Item -ItemType Directory -Path $destDir -Force | Out-Null - $nativeDir = "$extractDir/runtimes/$rid/native" - if (Test-Path $nativeDir) { - Get-ChildItem $nativeDir -File | ForEach-Object { - Copy-Item $_.FullName -Destination "$destDir/$($_.Name)" -Force - Write-Host "Placed $($_.Name) from pipeline artifact" - } - } else { - Write-Warning "No native binaries found at $nativeDir for RID $rid" - } - -- task: PowerShell@2 - displayName: 'Run native binary install (ORT + GenAI)' - inputs: - targetType: inline - script: | - Set-Location "$(repoRoot)/sdk/js" - node script/preinstall.cjs - node script/install-standard.cjs - -# Build the Node-API native addon -- task: Npm@1 - displayName: 'npm build node-api addon' - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'run build:native' - -- task: Npm@1 - displayName: 'npm build' - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'run build' - -- ${{ if eq(parameters.isWinML, true) }}: - - task: PowerShell@2 - displayName: 'Install Windows App SDK Runtime' - inputs: - targetType: 'inline' - script: | - $installerUrl = "https://aka.ms/windowsappsdk/1.8/latest/windowsappruntimeinstall-x64.exe" - $installerPath = "$env:TEMP\windowsappruntimeinstall.exe" - Invoke-WebRequest -Uri $installerUrl -OutFile $installerPath - & $installerPath --quiet --force - if ($LASTEXITCODE -ne 0) { throw "Windows App SDK Runtime install failed" } - errorActionPreference: 'stop' - -- task: Npm@1 - displayName: 'npm test' - inputs: - command: custom - workingDir: $(repoRoot)/sdk/js - customCommand: 'test' - env: - TF_BUILD: 'true' - FOUNDRY_TEST_DATA_DIR: $(testDataDir) diff --git a/.pipelines/v1/templates/test-python-steps.yml b/.pipelines/v1/templates/test-python-steps.yml deleted file mode 100644 index cf2643982..000000000 --- a/.pipelines/v1/templates/test-python-steps.yml +++ /dev/null @@ -1,180 +0,0 @@ -# Steps to test the Python SDK. -# Expects the SDK wheel to be already built via build-python-steps.yml. -parameters: -- name: isWinML - type: boolean - default: false -- name: flcWheelsDir - type: string - displayName: 'Path to directory containing the FLC wheels' -- name: sdkWheelsDir - type: string - displayName: 'Path to directory containing the built SDK wheel' -- name: depsVersionsDir - type: string - default: '' - displayName: 'Path to deps-versions artifact directory' - -steps: -- task: PowerShell@2 - displayName: 'Set source paths' - inputs: - targetType: inline - script: | - $multiCheckout = "$(Build.SourcesDirectory)/Foundry-Local" - if (Test-Path $multiCheckout) { - $repoRoot = $multiCheckout - } else { - $repoRoot = "$(Build.SourcesDirectory)" - } - $testDataDir = "$(Build.SourcesDirectory)/test-data-shared" - Write-Host "##vso[task.setvariable variable=repoRoot]$repoRoot" - Write-Host "##vso[task.setvariable variable=testDataDir]$testDataDir" - -- task: PowerShell@2 - displayName: 'Detect Python architecture' - inputs: - targetType: inline - script: | - # UsePythonVersion defaults to x64 but arm64 agents only have arm64 Python. - # The hosted *Linux* arm64 image has no python-versions toolcache entry, - # so we skip UsePythonVersion there and rely on the system python. - # macOS arm64 hosted agents DO have a python-versions toolcache and work - # normally with UsePythonVersion (the toolcache provides `pip` on PATH). - $isArm64 = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64' - $isLinuxArm64 = $IsLinux -and $isArm64 - $arch = if ($isArm64) { 'ARM64' } else { 'x64' } - Write-Host "##vso[task.setvariable variable=PythonArch]$arch" - Write-Host "##vso[task.setvariable variable=IsLinuxArm64Agent]$($isLinuxArm64.ToString().ToLower())" - Write-Host "Detected Python architecture: $arch; IsLinuxArm64Agent=$isLinuxArm64" - -- task: UsePythonVersion@0 - displayName: 'Use Python 3.12' - condition: and(succeeded(), ne(variables['IsLinuxArm64Agent'], 'true')) - inputs: - versionSpec: '3.12' - architecture: '$(PythonArch)' - -- task: PowerShell@2 - displayName: 'Configure system Python for user-mode installs (Linux arm64)' - condition: and(succeeded(), eq(variables['IsLinuxArm64Agent'], 'true')) - inputs: - targetType: inline - script: | - # System python on hosted Linux arm64 cannot write to /usr/lib/python3.12/site-packages. - # Force all subsequent `pip install` calls to use the per-user site and put - # the user-script directory on PATH so console-scripts (e.g. pytest) are reachable. - # The image also only exposes `python3` (no `python` alias), so drop a wrapper - # symlink into the user-bin directory for scripts that invoke `python` directly. - python3 --version - $userBase = & python3 -c "import site; print(site.USER_BASE)" - $userBin = Join-Path $userBase 'bin' - New-Item -ItemType Directory -Force -Path $userBin | Out-Null - $python3Path = (& which python3).Trim() - & ln -sf $python3Path (Join-Path $userBin 'python') - Write-Host "User base: $userBase" - Write-Host "Created symlink: $userBin/python -> $python3Path" - Write-Host "##vso[task.setvariable variable=PIP_USER]1" - Write-Host "##vso[task.prependpath]$userBin" - -# Load dependency versions from deps_versions.json -- template: update-deps-versions-steps.yml - parameters: - repoRoot: $(repoRoot) - artifactDir: ${{ parameters.depsVersionsDir }} - isWinML: ${{ parameters.isWinML }} - -# Configure pip to use ORT-Nightly feed (plus PyPI as fallback) -- task: PowerShell@2 - displayName: 'Configure pip for Azure Artifacts' - inputs: - targetType: inline - script: | - pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/PublicPackages/_packaging/ORT-Nightly/pypi/simple/ - pip config set global.extra-index-url https://pypi.org/simple/ - pip config set global.pre true - -# Install the FLC wheel from the pipeline -- task: PowerShell@2 - displayName: 'Install pipeline-built FLC wheel' - inputs: - targetType: inline - script: | - $arch = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64') { 'arm64' } else { 'amd64' } - if ($IsLinux) { - $linuxArch = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64') { 'aarch64' } else { 'x86_64' } - $platTag = "manylinux*$linuxArch" - } - elseif ($IsMacOS) { $platTag = "macosx*$arch" } - else { $platTag = "win_$arch" } - - $filter = if ("${{ parameters.isWinML }}" -eq "True") { "foundry_local_core_winml*$platTag.whl" } else { "foundry_local_core-*$platTag.whl" } - $wheel = Get-ChildItem "${{ parameters.flcWheelsDir }}" -Recurse -Filter $filter | Select-Object -First 1 - if ($wheel) { - Write-Host "Installing pipeline-built FLC wheel: $($wheel.FullName)" - pip install $($wheel.FullName) - } else { - Write-Warning "No FLC wheel found matching $filter in ${{ parameters.flcWheelsDir }}" - } - -- task: PowerShell@2 - displayName: 'Install ORT native packages' - inputs: - targetType: inline - script: | - $isWinML = "${{ parameters.isWinML }}" -eq "True" - $fileName = if ($isWinML) { "deps_versions_winml.json" } else { "deps_versions.json" } - $deps = Get-Content "$(repoRoot)/sdk/$fileName" -Raw | ConvertFrom-Json - $ortVer = $deps.onnxruntime.version - $genaiVer = $deps.'onnxruntime-genai'.version - # Platform-specific ORT package selection: - # - Linux x86_64: onnxruntime-gpu / onnxruntime-genai-cuda (CUDA wheels). - # - Linux aarch64: onnxruntime / onnxruntime-genai (CUDA variants don't ship aarch64). - # - Other: onnxruntime-core / onnxruntime-genai-core (cross-platform). - $isArm64 = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64' - if ($IsLinux -and -not $isArm64) { - Write-Host "Installing onnxruntime-gpu==$ortVer onnxruntime-genai-cuda==$genaiVer (Linux x64)" - pip install "onnxruntime-gpu==$ortVer" "onnxruntime-genai-cuda==$genaiVer" - } elseif ($IsLinux -and $isArm64) { - Write-Host "Installing onnxruntime==$ortVer onnxruntime-genai==$genaiVer (Linux arm64)" - pip install "onnxruntime==$ortVer" "onnxruntime-genai==$genaiVer" - } else { - Write-Host "Installing onnxruntime-core==$ortVer onnxruntime-genai-core==$genaiVer" - pip install "onnxruntime-core==$ortVer" "onnxruntime-genai-core==$genaiVer" - } - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -- script: pip install "pydantic>=2.0.0" "requests>=2.32.4" "openai>=2.24.0" - displayName: 'Install pure python dependencies' - -# Install the built SDK wheel -- task: PowerShell@2 - displayName: 'Install SDK wheel' - inputs: - targetType: inline - script: | - $wheel = (Get-ChildItem "${{ parameters.sdkWheelsDir }}/*.whl" | Select-Object -First 1).FullName - pip install --no-deps $wheel - -- ${{ if eq(parameters.isWinML, true) }}: - - task: PowerShell@2 - displayName: 'Install Windows App SDK Runtime' - inputs: - targetType: 'inline' - script: | - $installerUrl = "https://aka.ms/windowsappsdk/1.8/latest/windowsappruntimeinstall-x64.exe" - $installerPath = "$env:TEMP\windowsappruntimeinstall.exe" - Invoke-WebRequest -Uri $installerUrl -OutFile $installerPath - & $installerPath --quiet --force - if ($LASTEXITCODE -ne 0) { throw "Windows App SDK Runtime install failed" } - errorActionPreference: 'stop' - -- script: pip install coverage pytest>=7.0.0 pytest-timeout>=2.1.0 - displayName: 'Install test dependencies' - -- script: python -m pytest test/ -v - displayName: 'Run tests' - workingDirectory: $(repoRoot)/sdk/python - env: - TF_BUILD: 'true' - FOUNDRY_TEST_DATA_DIR: $(testDataDir) diff --git a/.pipelines/v1/templates/test-rust-steps.yml b/.pipelines/v1/templates/test-rust-steps.yml deleted file mode 100644 index 4d382b1de..000000000 --- a/.pipelines/v1/templates/test-rust-steps.yml +++ /dev/null @@ -1,136 +0,0 @@ -# Steps to test the Rust SDK. -# Expects the SDK to be already built via build-rust-steps.yml. -parameters: -- name: isWinML - type: boolean - default: false -- name: flcNugetDir - type: string - displayName: 'Path to directory containing the FLC .nupkg' -- name: depsVersionsDir - type: string - default: '' - displayName: 'Path to deps-versions artifact directory' - -steps: -- task: PowerShell@2 - displayName: 'Set source paths' - inputs: - targetType: inline - script: | - $multiCheckout = "$(Build.SourcesDirectory)/Foundry-Local" - if (Test-Path $multiCheckout) { - $repoRoot = $multiCheckout - } else { - $repoRoot = "$(Build.SourcesDirectory)" - } - $testDataDir = "$(Build.SourcesDirectory)/test-data-shared" - Write-Host "##vso[task.setvariable variable=repoRoot]$repoRoot" - Write-Host "##vso[task.setvariable variable=testDataDir]$testDataDir" - -# Load dependency versions from deps_versions.json -- template: update-deps-versions-steps.yml - parameters: - repoRoot: $(repoRoot) - artifactDir: ${{ parameters.depsVersionsDir }} - isWinML: ${{ parameters.isWinML }} - -# Extract FLC native binaries from the pipeline-built .nupkg -- task: PowerShell@2 - displayName: 'Extract FLC native binaries' - inputs: - targetType: inline - script: | - $nupkg = Get-ChildItem "${{ parameters.flcNugetDir }}" -Recurse -Filter "Microsoft.AI.Foundry.Local.Core*.nupkg" -Exclude "*.snupkg" | Select-Object -First 1 - if (-not $nupkg) { throw "No FLC .nupkg found in ${{ parameters.flcNugetDir }}" } - - $extractDir = "$(Build.ArtifactStagingDirectory)/flc-extract-rust" - $zip = [System.IO.Path]::ChangeExtension($nupkg.FullName, ".zip") - Copy-Item $nupkg.FullName $zip -Force - Expand-Archive -Path $zip -DestinationPath $extractDir -Force - - $arch = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq 'Arm64') { 'arm64' } else { 'x64' } - if ($IsLinux) { $rid = "linux-$arch" } - elseif ($IsMacOS) { $rid = "osx-$arch" } - else { $rid = "win-$arch" } - - $nativeDir = "$extractDir/runtimes/$rid/native" - if (-not (Test-Path $nativeDir)) { throw "No native binaries found at $nativeDir for RID $rid" } - - $flcNativeDir = "$(Build.ArtifactStagingDirectory)/flc-native-rust" - New-Item -ItemType Directory -Path $flcNativeDir -Force | Out-Null - Get-ChildItem $nativeDir -File | Copy-Item -Destination $flcNativeDir -Force - Write-Host "##vso[task.setvariable variable=FOUNDRY_NATIVE_OVERRIDE_DIR]$flcNativeDir" - Write-Host "Extracted FLC native binaries to $flcNativeDir" - -# Copy deps_versions files -- task: PowerShell@2 - displayName: 'Copy deps_versions for Rust' - inputs: - targetType: inline - script: | - Copy-Item "$(repoRoot)/sdk/deps_versions.json" "$(repoRoot)/sdk/rust/deps_versions.json" -Force - Copy-Item "$(repoRoot)/sdk/deps_versions_winml.json" "$(repoRoot)/sdk/rust/deps_versions_winml.json" -Force - -# Install Rust toolchain -- task: PowerShell@2 - displayName: 'Install Rust toolchain' - inputs: - targetType: inline - script: | - if ($IsWindows -or (-not $IsLinux -and -not $IsMacOS)) { - Invoke-WebRequest -Uri https://win.rustup.rs/x86_64 -OutFile rustup-init.exe - .\rustup-init.exe -y --default-toolchain stable --profile minimal -c clippy,rustfmt - Remove-Item rustup-init.exe - $cargoPath = "$env:USERPROFILE\.cargo\bin" - } else { - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --profile minimal -c clippy,rustfmt - $cargoPath = "$env:HOME/.cargo/bin" - } - Write-Host "##vso[task.prependpath]$cargoPath" - -# Remove .cargo/config.toml crates-io redirect -- task: PowerShell@2 - displayName: 'Use crates.io directly' - inputs: - targetType: inline - script: | - $configPath = "$(repoRoot)/sdk/rust/.cargo/config.toml" - if (Test-Path $configPath) { - Remove-Item $configPath - Write-Host "Removed .cargo/config.toml crates-io redirect" - } - -# Build before testing -- task: PowerShell@2 - displayName: 'Build' - inputs: - targetType: inline - script: | - Set-Location "$(repoRoot)/sdk/rust" - $features = if ("${{ parameters.isWinML }}" -eq "True") { "--features winml" } else { "" } - Invoke-Expression "cargo build $features" - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -- task: PowerShell@2 - displayName: 'Run unit tests' - inputs: - targetType: inline - script: | - Set-Location "$(repoRoot)/sdk/rust" - $features = if ("${{ parameters.isWinML }}" -eq "True") { "--features winml" } else { "" } - Invoke-Expression "cargo test --lib $features" - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -- task: PowerShell@2 - displayName: 'Run integration tests' - inputs: - targetType: inline - script: | - Set-Location "$(repoRoot)/sdk/rust" - $features = if ("${{ parameters.isWinML }}" -eq "True") { "--features winml" } else { "" } - Invoke-Expression "cargo test --tests $features -- --include-ignored --test-threads=1 --nocapture" - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - env: - TF_BUILD: 'true' - FOUNDRY_TEST_DATA_DIR: $(testDataDir) diff --git a/.pipelines/v1/templates/update-deps-versions-steps.yml b/.pipelines/v1/templates/update-deps-versions-steps.yml deleted file mode 100644 index 6f0ebcc34..000000000 --- a/.pipelines/v1/templates/update-deps-versions-steps.yml +++ /dev/null @@ -1,44 +0,0 @@ -# Shared template to update deps_versions.json / deps_versions_winml.json -# from pipeline artifacts. The isWinML parameter determines which file gets -# overwritten. -parameters: -- name: repoRoot - type: string - default: '$(repoRoot)' -- name: artifactDir - type: string - default: '' - displayName: 'Path to artifact directory containing pipeline-generated deps_versions JSON' -- name: isWinML - type: boolean - default: false - -steps: -- task: PowerShell@2 - displayName: 'Update deps_versions from pipeline artifact' - inputs: - targetType: inline - script: | - $isWinML = "${{ parameters.isWinML }}" -eq "True" - $fileName = if ($isWinML) { "deps_versions_winml.json" } else { "deps_versions.json" } - $repoJson = "${{ parameters.repoRoot }}/sdk/$fileName" - $artifactDir = "${{ parameters.artifactDir }}" - - if ($artifactDir -eq '' -or -not (Test-Path "$artifactDir/$fileName")) { - throw "Pipeline-built $fileName not found in artifact directory: $artifactDir" - } - - Copy-Item "$artifactDir/$fileName" $repoJson -Force - Write-Host "Updated repo $fileName from pipeline artifact at $artifactDir" - - $deps = Get-Content $repoJson -Raw | ConvertFrom-Json - - # Log resolved versions for debugging - Write-Host "Dependency versions from ${fileName}:" - Write-Host " FLC Core (NuGet): $($deps.'foundry-local-core'.nuget)" - Write-Host " FLC Core (Python): $($deps.'foundry-local-core'.python)" - Write-Host " OnnxRuntime: $($deps.onnxruntime.version)" - Write-Host " GenAI: $($deps.'onnxruntime-genai'.version)" - if ($isWinML -and $deps.'windows-ai-machinelearning') { - Write-Host " Windows AI ML: $($deps.'windows-ai-machinelearning'.version)" - } diff --git a/sdk_v2/cpp/CMakeLists.txt b/sdk_v2/cpp/CMakeLists.txt index 1a070e397..24189a760 100644 --- a/sdk_v2/cpp/CMakeLists.txt +++ b/sdk_v2/cpp/CMakeLists.txt @@ -106,7 +106,7 @@ if(FOUNDRY_LOCAL_BUILD_TESTS) enable_testing() endif() -# ORT and ORT GenAI — acquired via FetchContent from nuget.org. +# ORT and ORT GenAI — acquired via FetchContent from the approved CFS feed. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") find_package(OnnxRuntimeGenAI REQUIRED) find_package(OnnxRuntime REQUIRED) diff --git a/sdk_v2/cpp/cmake/FindOnnxRuntime.cmake b/sdk_v2/cpp/cmake/FindOnnxRuntime.cmake index 8a2bf3772..831e4aa9e 100644 --- a/sdk_v2/cpp/cmake/FindOnnxRuntime.cmake +++ b/sdk_v2/cpp/cmake/FindOnnxRuntime.cmake @@ -1,8 +1,8 @@ # Copyright (c) Microsoft. All rights reserved. # Find/acquire ONNX Runtime. # -# Sources ORT from Microsoft.ML.OnnxRuntime via FetchContent — nuget.org for -# releases and the ORT-Nightly ADO feed for -dev- versions. The version comes +# Sources ORT from Microsoft.ML.OnnxRuntime via FetchContent from the approved +# CFS feed. The version comes # from sdk_v2/deps_versions.json and is shared by all platforms. # # Creates an IMPORTED target: OnnxRuntime::OnnxRuntime @@ -59,7 +59,7 @@ if(ORT_HOME) endif() else() # ----------------------------------------------------------------------- - # Standard path: FetchContent from nuget.org (releases) or ORT-Nightly ADO feed (dev builds) + # Standard path: FetchContent from AIFoundryLocal_PublicPackages. # ----------------------------------------------------------------------- if(NOT ORT_VERSION) # Single source of truth: sdk_v2/deps_versions.json. The Python SDK @@ -75,22 +75,12 @@ else() endif() set(ORT_PACKAGE_NAME "Microsoft.ML.OnnxRuntime") - # ORT_FETCH_URL can be set externally (e.g. for CI where nuget.org is blocked). + # ORT_FETCH_URL can be set externally, for example to a local prefetch archive. set(ORT_FETCH_URL "" CACHE STRING "Override URL or local path for the OnnxRuntime NuGet package") if(NOT ORT_FETCH_URL) - # Dev builds come from the ADO nightly feed; release versions come from nuget.org. - if(ORT_VERSION MATCHES "-dev-") - set(ORT_FEED_ORG "aiinfra") - set(ORT_FEED_PROJECT "2692857e-05ef-43b4-ba9c-ccf1c22c437c") - set(ORT_FEED_ID "7982ae20-ed19-4a35-a362-a96ac99897b7") - set(ORT_FETCH_URL "https://pkgs.dev.azure.com/${ORT_FEED_ORG}/${ORT_FEED_PROJECT}/_apis/packaging/feeds/${ORT_FEED_ID}/nuget/packages/${ORT_PACKAGE_NAME}/versions/${ORT_VERSION}/content?api-version=6.0-preview.1") - message(STATUS "Downloading ${ORT_PACKAGE_NAME} ${ORT_VERSION} from ORT-Nightly feed") - else() - string(TOLOWER "${ORT_PACKAGE_NAME}" _ORT_PACKAGE_LOWER) - set(ORT_FETCH_URL "https://api.nuget.org/v3-flatcontainer/${_ORT_PACKAGE_LOWER}/${ORT_VERSION}/${_ORT_PACKAGE_LOWER}.${ORT_VERSION}.nupkg") - message(STATUS "Downloading ${ORT_PACKAGE_NAME} ${ORT_VERSION} from nuget.org") - endif() + set(ORT_FETCH_URL "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_apis/packaging/feeds/AIFoundryLocal_PublicPackages/nuget/packages/${ORT_PACKAGE_NAME}/versions/${ORT_VERSION}/content?api-version=6.0-preview.1") + message(STATUS "Downloading ${ORT_PACKAGE_NAME} ${ORT_VERSION} from AIFoundryLocal_PublicPackages") else() message(STATUS "Using pre-configured ORT_FETCH_URL: ${ORT_FETCH_URL}") endif() diff --git a/sdk_v2/cpp/cmake/FindOnnxRuntimeGenAI.cmake b/sdk_v2/cpp/cmake/FindOnnxRuntimeGenAI.cmake index 5e46ac817..f7d6a97a3 100644 --- a/sdk_v2/cpp/cmake/FindOnnxRuntimeGenAI.cmake +++ b/sdk_v2/cpp/cmake/FindOnnxRuntimeGenAI.cmake @@ -4,7 +4,7 @@ # All platforms / flavors: Microsoft.ML.OnnxRuntimeGenAI.Foundry # # When ORT_GENAI_HOME is set, uses the local ORT GenAI build instead of NuGet. -# Otherwise uses FetchContent from nuget.org. +# Otherwise uses FetchContent from the approved CFS feed. # Creates an IMPORTED target: OnnxRuntimeGenAI::OnnxRuntimeGenAI if(OnnxRuntimeGenAI_FOUND) @@ -149,20 +149,10 @@ if(ANDROID) message(STATUS "OnnxRuntimeGenAI via GitHub AAR: ${_GENAI_AAR_DIR}") else() # Allow the pipeline or caller to override the download URL (e.g., to use a local - # file:// path when direct nuget.org access is blocked in CI). + # file:// path when direct feed access is blocked in CI). if(NOT GENAI_FETCH_URL) - # Dev builds come from the ADO nightly feed; release versions come from nuget.org. - if(ORT_GENAI_VERSION MATCHES "-dev-") - set(ORT_GENAI_FEED_ORG "aiinfra") - set(ORT_GENAI_FEED_PROJECT "2692857e-05ef-43b4-ba9c-ccf1c22c437c") - set(ORT_GENAI_FEED_ID "7982ae20-ed19-4a35-a362-a96ac99897b7") - set(GENAI_FETCH_URL "https://pkgs.dev.azure.com/${ORT_GENAI_FEED_ORG}/${ORT_GENAI_FEED_PROJECT}/_apis/packaging/feeds/${ORT_GENAI_FEED_ID}/nuget/packages/${_GENAI_PACKAGE_NAME}/versions/${ORT_GENAI_VERSION}/content?api-version=6.0-preview.1") - message(STATUS "Downloading ${_GENAI_PACKAGE_NAME} ${ORT_GENAI_VERSION} from ORT-Nightly feed") - else() - string(TOLOWER "${_GENAI_PACKAGE_NAME}" _GENAI_PACKAGE_LOWER) - set(GENAI_FETCH_URL "https://api.nuget.org/v3-flatcontainer/${_GENAI_PACKAGE_LOWER}/${ORT_GENAI_VERSION}/${_GENAI_PACKAGE_LOWER}.${ORT_GENAI_VERSION}.nupkg") - message(STATUS "Downloading ${_GENAI_PACKAGE_NAME} ${ORT_GENAI_VERSION} from nuget.org") - endif() + set(GENAI_FETCH_URL "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_apis/packaging/feeds/AIFoundryLocal_PublicPackages/nuget/packages/${_GENAI_PACKAGE_NAME}/versions/${ORT_GENAI_VERSION}/content?api-version=6.0-preview.1") + message(STATUS "Downloading ${_GENAI_PACKAGE_NAME} ${ORT_GENAI_VERSION} from AIFoundryLocal_PublicPackages") else() message(STATUS "Using caller-provided GENAI_FETCH_URL: ${GENAI_FETCH_URL}") endif() diff --git a/sdk_v2/cpp/cmake/FindWinMLEpCatalog.cmake b/sdk_v2/cpp/cmake/FindWinMLEpCatalog.cmake index dc732a4ff..d1275fc56 100644 --- a/sdk_v2/cpp/cmake/FindWinMLEpCatalog.cmake +++ b/sdk_v2/cpp/cmake/FindWinMLEpCatalog.cmake @@ -62,7 +62,7 @@ endif() include(cmake/nuget.cmake) -# WINML_EP_CATALOG_FETCH_URL can be set externally (e.g. for CI where nuget.org is blocked). +# WINML_EP_CATALOG_FETCH_URL can be set externally, for example to a local prefetch archive. set(WINML_EP_CATALOG_FETCH_URL "" CACHE STRING "Override URL or local path for the WinML EP Catalog NuGet package") if(WINML_EP_CATALOG_FETCH_URL) @@ -82,7 +82,7 @@ if(WINML_EP_CATALOG_FETCH_URL) message(STATUS "WinML EP Catalog via FetchContent: ${_WINML_EP_ROOT}") else() install_nuget_package(Microsoft.Windows.AI.MachineLearning ${WINML_EP_CATALOG_VERSION} _WINML_EP_ROOT - SOURCE https://api.nuget.org/v3/index.json) + SOURCE https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json) endif() # Load the package's first-party CMake config for target discovery and layout diff --git a/sdk_v2/cs/NuGet.config b/sdk_v2/cs/NuGet.config index 316550e3e..d6e1f4222 100644 --- a/sdk_v2/cs/NuGet.config +++ b/sdk_v2/cs/NuGet.config @@ -11,10 +11,10 @@ For local development with a local Runtime NuGet, create a NuGet.config.user: - + --> - + diff --git a/sdk_v2/js/package-lock.json b/sdk_v2/js/package-lock.json index 8fc30ee6d..d6ff959f8 100644 --- a/sdk_v2/js/package-lock.json +++ b/sdk_v2/js/package-lock.json @@ -26,7 +26,7 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", @@ -36,7 +36,7 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", @@ -46,7 +46,7 @@ }, "node_modules/@babel/parser": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@babel/parser/-/parser-7.29.7.tgz", "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, "license": "MIT", @@ -62,7 +62,7 @@ }, "node_modules/@babel/types": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@babel/types/-/types-7.29.7.tgz", "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, "license": "MIT", @@ -76,7 +76,7 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, "license": "MIT", @@ -86,7 +86,7 @@ }, "node_modules/@biomejs/biome": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/biome/-/biome-1.9.4.tgz", "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", "dev": true, "hasInstallScript": true, @@ -114,7 +114,7 @@ }, "node_modules/@biomejs/cli-darwin-arm64": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", "cpu": [ "arm64" @@ -131,7 +131,7 @@ }, "node_modules/@biomejs/cli-darwin-x64": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", "cpu": [ "x64" @@ -148,7 +148,7 @@ }, "node_modules/@biomejs/cli-linux-arm64": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", "cpu": [ "arm64" @@ -165,7 +165,7 @@ }, "node_modules/@biomejs/cli-linux-arm64-musl": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", "cpu": [ "arm64" @@ -182,7 +182,7 @@ }, "node_modules/@biomejs/cli-linux-x64": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", "cpu": [ "x64" @@ -199,7 +199,7 @@ }, "node_modules/@biomejs/cli-linux-x64-musl": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", "cpu": [ "x64" @@ -216,7 +216,7 @@ }, "node_modules/@biomejs/cli-win32-arm64": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", "cpu": [ "arm64" @@ -233,7 +233,7 @@ }, "node_modules/@biomejs/cli-win32-x64": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", "cpu": [ "x64" @@ -250,7 +250,7 @@ }, "node_modules/@emnapi/core": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@emnapi/core/-/core-1.10.0.tgz", "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", "dev": true, "license": "MIT", @@ -262,7 +262,7 @@ }, "node_modules/@emnapi/runtime": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@emnapi/runtime/-/runtime-1.10.0.tgz", "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "dev": true, "license": "MIT", @@ -273,7 +273,7 @@ }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", "dev": true, "license": "MIT", @@ -284,7 +284,7 @@ }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, "license": "ISC", @@ -297,7 +297,7 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", @@ -307,14 +307,14 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", @@ -325,7 +325,7 @@ }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", "dev": true, "license": "MIT", @@ -344,7 +344,7 @@ }, "node_modules/@oxc-project/types": { "version": "0.133.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@oxc-project/types/-/types-0.133.0.tgz", "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", "dev": true, "license": "MIT", @@ -354,7 +354,7 @@ }, "node_modules/@rolldown/binding-android-arm64": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", "cpu": [ "arm64" @@ -371,7 +371,7 @@ }, "node_modules/@rolldown/binding-darwin-arm64": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", "cpu": [ "arm64" @@ -388,7 +388,7 @@ }, "node_modules/@rolldown/binding-darwin-x64": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", "cpu": [ "x64" @@ -405,7 +405,7 @@ }, "node_modules/@rolldown/binding-freebsd-x64": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", "cpu": [ "x64" @@ -422,7 +422,7 @@ }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", "cpu": [ "arm" @@ -439,7 +439,7 @@ }, "node_modules/@rolldown/binding-linux-arm64-gnu": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", "cpu": [ "arm64" @@ -459,7 +459,7 @@ }, "node_modules/@rolldown/binding-linux-arm64-musl": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", "cpu": [ "arm64" @@ -479,7 +479,7 @@ }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", "cpu": [ "ppc64" @@ -499,7 +499,7 @@ }, "node_modules/@rolldown/binding-linux-s390x-gnu": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", "cpu": [ "s390x" @@ -519,7 +519,7 @@ }, "node_modules/@rolldown/binding-linux-x64-gnu": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", "cpu": [ "x64" @@ -539,7 +539,7 @@ }, "node_modules/@rolldown/binding-linux-x64-musl": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", "cpu": [ "x64" @@ -559,7 +559,7 @@ }, "node_modules/@rolldown/binding-openharmony-arm64": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", "cpu": [ "arm64" @@ -576,7 +576,7 @@ }, "node_modules/@rolldown/binding-wasm32-wasi": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", "cpu": [ "wasm32" @@ -595,7 +595,7 @@ }, "node_modules/@rolldown/binding-win32-arm64-msvc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", "cpu": [ "arm64" @@ -612,7 +612,7 @@ }, "node_modules/@rolldown/binding-win32-x64-msvc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", "cpu": [ "x64" @@ -629,21 +629,21 @@ }, "node_modules/@rolldown/pluginutils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, "license": "MIT" }, "node_modules/@standard-schema/spec": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, "license": "MIT" }, "node_modules/@tybys/wasm-util": { "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "dev": true, "license": "MIT", @@ -654,7 +654,7 @@ }, "node_modules/@types/chai": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@types/chai/-/chai-5.2.3.tgz", "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", @@ -665,21 +665,21 @@ }, "node_modules/@types/deep-eql": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@types/deep-eql/-/deep-eql-4.0.2.tgz", "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@types/estree/-/estree-1.0.9.tgz", "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "20.19.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.41.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@types/node/-/node-20.19.41.tgz", "integrity": "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==", "dev": true, "license": "MIT", @@ -689,7 +689,7 @@ }, "node_modules/@vitest/coverage-v8": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.9.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/coverage-v8/-/coverage-v8-4.1.9.tgz", "integrity": "sha512-G9/lgqibheLVBDRuya45EbsEXTYcWoSG+TLg7i2axuzx0Eq62eXn+aWXyaVdV5vKvFSWd6ywcX8hA7la9Pvu8g==", "dev": true, "license": "MIT", @@ -720,7 +720,7 @@ }, "node_modules/@vitest/expect": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/expect/-/expect-4.1.9.tgz", "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", "dev": true, "license": "MIT", @@ -738,7 +738,7 @@ }, "node_modules/@vitest/mocker": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/mocker/-/mocker-4.1.9.tgz", "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", "dev": true, "license": "MIT", @@ -765,7 +765,7 @@ }, "node_modules/@vitest/pretty-format": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", "dev": true, "license": "MIT", @@ -778,7 +778,7 @@ }, "node_modules/@vitest/runner": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/runner/-/runner-4.1.9.tgz", "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", "dev": true, "license": "MIT", @@ -792,7 +792,7 @@ }, "node_modules/@vitest/snapshot": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/snapshot/-/snapshot-4.1.9.tgz", "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", "dev": true, "license": "MIT", @@ -808,7 +808,7 @@ }, "node_modules/@vitest/spy": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/spy/-/spy-4.1.9.tgz", "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", "dev": true, "license": "MIT", @@ -818,7 +818,7 @@ }, "node_modules/@vitest/utils": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/utils/-/utils-4.1.9.tgz", "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", "dev": true, "license": "MIT", @@ -833,7 +833,7 @@ }, "node_modules/abbrev": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/abbrev/-/abbrev-4.0.0.tgz", "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", "dev": true, "license": "ISC", @@ -843,7 +843,7 @@ }, "node_modules/adm-zip": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.6.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/adm-zip/-/adm-zip-0.6.0.tgz", "integrity": "sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==", "license": "MIT", "engines": { @@ -852,7 +852,7 @@ }, "node_modules/assertion-error": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", @@ -862,7 +862,7 @@ }, "node_modules/ast-v8-to-istanbul": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.3.tgz", "integrity": "sha512-jCMQ6ZylLPudp0CDfBmQBZUsrh1/8psbmu9ibeVWKuHWD0YrH9YABwlKu5kVEFoT0GCQQW9Z/SxfuEbbkGQCRg==", "dev": true, "license": "MIT", @@ -874,7 +874,7 @@ }, "node_modules/chai": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/chai/-/chai-6.2.2.tgz", "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", @@ -884,7 +884,7 @@ }, "node_modules/chownr": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, "license": "BlueOak-1.0.0", @@ -894,14 +894,14 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/detect-libc": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", @@ -911,7 +911,7 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", @@ -921,14 +921,14 @@ }, "node_modules/es-module-lexer": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/es-module-lexer/-/es-module-lexer-2.1.0.tgz", "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true, "license": "MIT" }, "node_modules/estree-walker": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", @@ -938,7 +938,7 @@ }, "node_modules/expect-type": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/expect-type/-/expect-type-1.3.0.tgz", "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, "license": "Apache-2.0", @@ -948,14 +948,14 @@ }, "node_modules/exponential-backoff": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/exponential-backoff/-/exponential-backoff-3.1.3.tgz", "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "dev": true, "license": "Apache-2.0" }, "node_modules/fdir": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", @@ -973,7 +973,7 @@ }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, @@ -988,14 +988,14 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", @@ -1005,14 +1005,14 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/isexe/-/isexe-4.0.0.tgz", "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, "license": "BlueOak-1.0.0", @@ -1022,7 +1022,7 @@ }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", @@ -1032,7 +1032,7 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", @@ -1047,7 +1047,7 @@ }, "node_modules/istanbul-reports": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/istanbul-reports/-/istanbul-reports-3.2.0.tgz", "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", @@ -1061,14 +1061,14 @@ }, "node_modules/js-tokens": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/js-tokens/-/js-tokens-10.0.0.tgz", "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", "dev": true, "license": "MIT" }, "node_modules/lightningcss": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss/-/lightningcss-1.32.0.tgz", "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", "dev": true, "license": "MPL-2.0", @@ -1098,7 +1098,7 @@ }, "node_modules/lightningcss-android-arm64": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", "cpu": [ "arm64" @@ -1119,7 +1119,7 @@ }, "node_modules/lightningcss-darwin-arm64": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", "cpu": [ "arm64" @@ -1140,7 +1140,7 @@ }, "node_modules/lightningcss-darwin-x64": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", "cpu": [ "x64" @@ -1161,7 +1161,7 @@ }, "node_modules/lightningcss-freebsd-x64": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", "cpu": [ "x64" @@ -1182,7 +1182,7 @@ }, "node_modules/lightningcss-linux-arm-gnueabihf": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", "cpu": [ "arm" @@ -1203,7 +1203,7 @@ }, "node_modules/lightningcss-linux-arm64-gnu": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", "cpu": [ "arm64" @@ -1227,7 +1227,7 @@ }, "node_modules/lightningcss-linux-arm64-musl": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", "cpu": [ "arm64" @@ -1251,7 +1251,7 @@ }, "node_modules/lightningcss-linux-x64-gnu": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", "cpu": [ "x64" @@ -1275,7 +1275,7 @@ }, "node_modules/lightningcss-linux-x64-musl": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", "cpu": [ "x64" @@ -1299,7 +1299,7 @@ }, "node_modules/lightningcss-win32-arm64-msvc": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", "cpu": [ "arm64" @@ -1320,7 +1320,7 @@ }, "node_modules/lightningcss-win32-x64-msvc": { "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", "cpu": [ "x64" @@ -1341,7 +1341,7 @@ }, "node_modules/magic-string": { "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/magic-string/-/magic-string-0.30.21.tgz", "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", @@ -1351,7 +1351,7 @@ }, "node_modules/magicast": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/magicast/-/magicast-0.5.3.tgz", "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==", "dev": true, "license": "MIT", @@ -1363,7 +1363,7 @@ }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", @@ -1379,7 +1379,7 @@ }, "node_modules/minipass": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, "license": "BlueOak-1.0.0", @@ -1389,7 +1389,7 @@ }, "node_modules/minizlib": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/minizlib/-/minizlib-3.1.0.tgz", "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", @@ -1402,7 +1402,7 @@ }, "node_modules/nanoid": { "version": "3.3.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/nanoid/-/nanoid-3.3.16.tgz", "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "dev": true, "funding": [ @@ -1421,7 +1421,7 @@ }, "node_modules/node-addon-api": { "version": "8.8.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.8.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/node-addon-api/-/node-addon-api-8.8.0.tgz", "integrity": "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA==", "license": "MIT", "engines": { @@ -1430,7 +1430,7 @@ }, "node_modules/node-gyp": { "version": "12.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.3.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/node-gyp/-/node-gyp-12.3.0.tgz", "integrity": "sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg==", "dev": true, "license": "MIT", @@ -1455,7 +1455,7 @@ }, "node_modules/nopt": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/nopt/-/nopt-9.0.0.tgz", "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", "dev": true, "license": "ISC", @@ -1471,7 +1471,7 @@ }, "node_modules/obug": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/obug/-/obug-2.1.1.tgz", "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", "dev": true, "funding": [ @@ -1482,21 +1482,21 @@ }, "node_modules/pathe": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", @@ -1509,7 +1509,7 @@ }, "node_modules/postcss": { "version": "8.5.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/postcss/-/postcss-8.5.25.tgz", "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", "dev": true, "funding": [ @@ -1538,7 +1538,7 @@ }, "node_modules/proc-log": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/proc-log/-/proc-log-6.1.0.tgz", "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, "license": "ISC", @@ -1548,7 +1548,7 @@ }, "node_modules/rolldown": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/rolldown/-/rolldown-1.0.3.tgz", "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", "dev": true, "license": "MIT", @@ -1582,7 +1582,7 @@ }, "node_modules/semver": { "version": "7.8.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/semver/-/semver-7.8.1.tgz", "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "dev": true, "license": "ISC", @@ -1595,14 +1595,14 @@ }, "node_modules/siginfo": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/siginfo/-/siginfo-2.0.0.tgz", "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "license": "BSD-3-Clause", @@ -1612,21 +1612,21 @@ }, "node_modules/stackback": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/stackback/-/stackback-0.0.2.tgz", "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, "node_modules/std-env": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/std-env/-/std-env-4.1.0.tgz", "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", "dev": true, "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", @@ -1639,7 +1639,7 @@ }, "node_modules/tar": { "version": "7.5.20", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.20.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tar/-/tar-7.5.20.tgz", "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", "dev": true, "license": "BlueOak-1.0.0", @@ -1656,14 +1656,14 @@ }, "node_modules/tinybench": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tinybench/-/tinybench-2.9.0.tgz", "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, "node_modules/tinyexec": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tinyexec/-/tinyexec-1.2.4.tgz", "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", "dev": true, "license": "MIT", @@ -1673,7 +1673,7 @@ }, "node_modules/tinyglobby": { "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tinyglobby/-/tinyglobby-0.2.17.tgz", "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", @@ -1690,7 +1690,7 @@ }, "node_modules/tinyrainbow": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tinyrainbow/-/tinyrainbow-3.1.0.tgz", "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "dev": true, "license": "MIT", @@ -1700,7 +1700,7 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD", @@ -1708,7 +1708,7 @@ }, "node_modules/typescript": { "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", @@ -1722,7 +1722,7 @@ }, "node_modules/undici": { "version": "6.28.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/undici/-/undici-6.28.0.tgz", "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", "dev": true, "license": "MIT", @@ -1732,14 +1732,14 @@ }, "node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, "node_modules/vite": { "version": "8.0.16", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/vite/-/vite-8.0.16.tgz", "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", "dev": true, "license": "MIT", @@ -1817,7 +1817,7 @@ }, "node_modules/vitest": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/vitest/-/vitest-4.1.9.tgz", "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", "dev": true, "license": "MIT", @@ -1907,7 +1907,7 @@ }, "node_modules/which": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/which/-/which-6.0.1.tgz", "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, "license": "ISC", @@ -1923,7 +1923,7 @@ }, "node_modules/why-is-node-running": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/why-is-node-running/-/why-is-node-running-2.3.0.tgz", "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", @@ -1940,7 +1940,7 @@ }, "node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, "license": "BlueOak-1.0.0", diff --git a/sdk_v2/js/script/install-native.cjs b/sdk_v2/js/script/install-native.cjs index ae337819c..4c502223f 100644 --- a/sdk_v2/js/script/install-native.cjs +++ b/sdk_v2/js/script/install-native.cjs @@ -34,8 +34,7 @@ const PLATFORM_MAP = { }; const DEFAULT_FEEDS = [ - "https://api.nuget.org/v3/index.json", - "https://pkgs.dev.azure.com/aiinfra/PublicPackages/_packaging/ORT-Nightly/nuget/v3/index.json", + "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json", ]; const VALID_MODES = new Set(["http", "dotnet", "nuget"]); diff --git a/sdk_v2/rust/build.rs b/sdk_v2/rust/build.rs index 11519c2fb..68be23eb9 100644 --- a/sdk_v2/rust/build.rs +++ b/sdk_v2/rust/build.rs @@ -263,7 +263,7 @@ fn download_and_extract( // expected native binary (the archive opened as a valid zip and the // expected file landed on disk). Cryptographic SHA-512 verification // against the feed's published packageHash is feed-specific — the - // registration layout differs between nuget.org and the Azure DevOps + // registration layout differs between NuGet service implementations and Azure DevOps // feed — and is left as future hardening. Ok(files) => { let stage_result = http_extract::stage_files(&files, out_dir); diff --git a/sdk_v2/rust/build_support.rs b/sdk_v2/rust/build_support.rs index 55dbbf5bd..ee4d3149e 100644 --- a/sdk_v2/rust/build_support.rs +++ b/sdk_v2/rust/build_support.rs @@ -4,8 +4,7 @@ use std::fs; use std::path::{Path, PathBuf}; pub const DEFAULT_FEEDS: &[&str] = &[ - "https://api.nuget.org/v3/index.json", - "https://pkgs.dev.azure.com/aiinfra/PublicPackages/_packaging/ORT-Nightly/nuget/v3/index.json", + "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json", ]; #[derive(Clone, Copy, Debug, Eq, PartialEq)] From 93c5ed52930648fb0dfda875db37214068782baa Mon Sep 17 00:00:00 2001 From: Prathik Rao Date: Wed, 9 Sep 2026 11:48:09 -0700 Subject: [PATCH 2/5] rmv auth --- .pipelines/templates/stages-cs.yml | 2 -- .pipelines/templates/stages-js.yml | 4 ---- .pipelines/templates/stages-python.yml | 4 ---- .pipelines/templates/stages-rust.yml | 14 ++------------ .pipelines/templates/steps-build-cs.yml | 3 --- .pipelines/templates/steps-build-js.yml | 5 ----- .pipelines/templates/steps-build-linux.yml | 5 ----- .pipelines/templates/steps-build-python.yml | 5 ----- .pipelines/templates/steps-build-rust.yml | 14 ++------------ .pipelines/templates/steps-pack-js.yml | 5 ----- .pipelines/templates/steps-prefetch-nuget.yml | 3 --- .pipelines/templates/steps-test-cs.yml | 3 --- .pipelines/templates/steps-test-js.yml | 5 ----- .pipelines/templates/steps-test-python.yml | 5 ----- 14 files changed, 4 insertions(+), 73 deletions(-) diff --git a/.pipelines/templates/stages-cs.yml b/.pipelines/templates/stages-cs.yml index 55224b6df..2314c6c0c 100644 --- a/.pipelines/templates/stages-cs.yml +++ b/.pipelines/templates/stages-cs.yml @@ -226,8 +226,6 @@ stages: inputs: packageType: runtime version: '9.0.x' - - task: NuGetAuthenticate@1 - displayName: 'Authenticate NuGet feeds' - task: PowerShell@2 displayName: 'Run packaged C# basic chat sample' inputs: diff --git a/.pipelines/templates/stages-js.yml b/.pipelines/templates/stages-js.yml index 8ffa641f2..836c677e9 100644 --- a/.pipelines/templates/stages-js.yml +++ b/.pipelines/templates/stages-js.yml @@ -391,10 +391,6 @@ stages: targetType: inline script: | Set-Content '$(Agent.TempDirectory)/js-sdk-package-test.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' - - task: npmAuthenticate@0 - displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' - inputs: - workingFile: '$(Agent.TempDirectory)/js-sdk-package-test.npmrc' - task: PowerShell@2 displayName: 'Run packaged JS basic_chat sample' inputs: diff --git a/.pipelines/templates/stages-python.yml b/.pipelines/templates/stages-python.yml index 93209df5f..084a4853c 100644 --- a/.pipelines/templates/stages-python.yml +++ b/.pipelines/templates/stages-python.yml @@ -409,10 +409,6 @@ stages: versionSpec: '3.12' addToPath: true architecture: 'x64' - - task: PipAuthenticate@1 - displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' - inputs: - artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' - task: PowerShell@2 displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' inputs: diff --git a/.pipelines/templates/stages-rust.yml b/.pipelines/templates/stages-rust.yml index ef46b9fc3..ffa5fa4e6 100644 --- a/.pipelines/templates/stages-rust.yml +++ b/.pipelines/templates/stages-rust.yml @@ -227,22 +227,12 @@ stages: } New-Item -ItemType Directory -Force -Path $cargoHome | Out-Null @" - [registries.AIFoundryLocal_PublicPackages] - index = "sparse+https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/Cargo/index/" - [source.crates-io] replace-with = "AIFoundryLocal_PublicPackages" - [registry] - global-credential-providers = ["cargo:token"] + [source.AIFoundryLocal_PublicPackages] + registry = "sparse+https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/Cargo/index/" "@ | Set-Content (Join-Path $cargoHome 'config.toml') - - if (-not $env:SYSTEM_ACCESSTOKEN) { throw 'System.AccessToken is required for Cargo feed authentication.' } - $credential = 'Basic ' + [Convert]::ToBase64String( - [Text.Encoding]::UTF8.GetBytes("build:$($env:SYSTEM_ACCESSTOKEN)")) - $credential | cargo login --registry AIFoundryLocal_PublicPackages - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - task: PowerShell@2 displayName: 'Set crate version from sdkVersion.txt' inputs: diff --git a/.pipelines/templates/steps-build-cs.yml b/.pipelines/templates/steps-build-cs.yml index 1044b88cc..1b2c51b2a 100644 --- a/.pipelines/templates/steps-build-cs.yml +++ b/.pipelines/templates/steps-build-cs.yml @@ -75,9 +75,6 @@ steps: Set-Content -Path $configPath -Value $nugetConfig Write-Host "##vso[task.setvariable variable=customNugetConfig]$configPath" -- task: NuGetAuthenticate@1 - displayName: 'Authenticate NuGet feeds' - - task: PowerShell@2 displayName: 'Restore SDK' inputs: diff --git a/.pipelines/templates/steps-build-js.yml b/.pipelines/templates/steps-build-js.yml index 95513fd7d..0ed1b3850 100644 --- a/.pipelines/templates/steps-build-js.yml +++ b/.pipelines/templates/steps-build-js.yml @@ -45,11 +45,6 @@ steps: Set-Content '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' -- task: npmAuthenticate@0 - displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' - inputs: - workingFile: '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' - - ${{ if eq(parameters.rid, 'win-x64') }}: - task: UsePythonVersion@0 displayName: 'Use Python 3.12 (x64)' diff --git a/.pipelines/templates/steps-build-linux.yml b/.pipelines/templates/steps-build-linux.yml index 93f9dbf2a..94b253ccf 100644 --- a/.pipelines/templates/steps-build-linux.yml +++ b/.pipelines/templates/steps-build-linux.yml @@ -22,11 +22,6 @@ parameters: steps: -- task: PipAuthenticate@1 - displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' - inputs: - artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' - - bash: | python3 -m pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ python3 -m pip config unset global.extra-index-url || true diff --git a/.pipelines/templates/steps-build-python.yml b/.pipelines/templates/steps-build-python.yml index d4b0d6448..21e3eccd9 100644 --- a/.pipelines/templates/steps-build-python.yml +++ b/.pipelines/templates/steps-build-python.yml @@ -60,11 +60,6 @@ steps: Write-Host "##vso[task.prependpath]$venvBin" Write-Host "Using system Python through build venv: $venvDir" -- task: PipAuthenticate@1 - displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' - inputs: - artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' - - task: PowerShell@2 displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' inputs: diff --git a/.pipelines/templates/steps-build-rust.yml b/.pipelines/templates/steps-build-rust.yml index de2096e29..7057f2169 100644 --- a/.pipelines/templates/steps-build-rust.yml +++ b/.pipelines/templates/steps-build-rust.yml @@ -98,26 +98,16 @@ steps: } New-Item -ItemType Directory -Force -Path $cargoHome | Out-Null @" - [registries.AIFoundryLocal_PublicPackages] - index = "sparse+https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/Cargo/index/" - [source.crates-io] replace-with = "AIFoundryLocal_PublicPackages" - [registry] - global-credential-providers = ["cargo:token"] + [source.AIFoundryLocal_PublicPackages] + registry = "sparse+https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/Cargo/index/" "@ | Set-Content (Join-Path $cargoHome 'config.toml') - if (-not $env:SYSTEM_ACCESSTOKEN) { throw 'System.AccessToken is required for Cargo feed authentication.' } - $credential = 'Basic ' + [Convert]::ToBase64String( - [Text.Encoding]::UTF8.GetBytes("build:$($env:SYSTEM_ACCESSTOKEN)")) - $credential | cargo login --registry AIFoundryLocal_PublicPackages - rustup show cargo --version rustc --version - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) # ── 2. Assemble the native runtime directory ───────────────────────────────── - task: PowerShell@2 diff --git a/.pipelines/templates/steps-pack-js.yml b/.pipelines/templates/steps-pack-js.yml index b56e8c736..6314fa095 100644 --- a/.pipelines/templates/steps-pack-js.yml +++ b/.pipelines/templates/steps-pack-js.yml @@ -32,11 +32,6 @@ steps: Set-Content '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' -- task: npmAuthenticate@0 - displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' - inputs: - workingFile: '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' - - pwsh: | $dst = "$(Build.SourcesDirectory)/sdk_v2/js/prebuilds" if (Test-Path $dst) { Remove-Item -Recurse -Force $dst } diff --git a/.pipelines/templates/steps-prefetch-nuget.yml b/.pipelines/templates/steps-prefetch-nuget.yml index a7b191a00..302d371c7 100644 --- a/.pipelines/templates/steps-prefetch-nuget.yml +++ b/.pipelines/templates/steps-prefetch-nuget.yml @@ -66,9 +66,6 @@ steps: packageType: sdk version: '10.0.x' -- task: NuGetAuthenticate@1 - displayName: 'Authenticate NuGet feeds' - - task: PowerShell@2 displayName: 'Restore native packages' inputs: diff --git a/.pipelines/templates/steps-test-cs.yml b/.pipelines/templates/steps-test-cs.yml index 081d51e15..c4c56921d 100644 --- a/.pipelines/templates/steps-test-cs.yml +++ b/.pipelines/templates/steps-test-cs.yml @@ -109,9 +109,6 @@ steps: Set-Content -Path $configPath -Value $nugetConfig Write-Host "##vso[task.setvariable variable=customNugetConfig]$configPath" -- task: NuGetAuthenticate@1 - displayName: 'Authenticate NuGet feeds' - # Per-job NuGet isolation to prevent "Central Directory corrupt" / file-locking # errors when multiple C# test jobs run concurrently on the # same reused agent. Keyed by $(System.JobId); cleaned on each run. diff --git a/.pipelines/templates/steps-test-js.yml b/.pipelines/templates/steps-test-js.yml index 785bc65fc..a00143aca 100644 --- a/.pipelines/templates/steps-test-js.yml +++ b/.pipelines/templates/steps-test-js.yml @@ -25,11 +25,6 @@ steps: Set-Content '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' -- task: npmAuthenticate@0 - displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' - inputs: - workingFile: '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' - - ${{ if or(eq(parameters.rid, 'win-x64'), eq(parameters.rid, 'win-arm64')) }}: - task: PowerShell@2 displayName: 'Drop prebuild into sdk_v2/js/prebuilds' diff --git a/.pipelines/templates/steps-test-python.yml b/.pipelines/templates/steps-test-python.yml index dd442b901..6c2c56062 100644 --- a/.pipelines/templates/steps-test-python.yml +++ b/.pipelines/templates/steps-test-python.yml @@ -48,11 +48,6 @@ steps: Write-Host "##vso[task.prependpath]$userBin" Write-Host "Using system Python: $python3Path" -- task: PipAuthenticate@1 - displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' - inputs: - artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' - - task: PowerShell@2 displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' inputs: From a136c07ec1c47d722a7c49ab57fd380f323d8c96 Mon Sep 17 00:00:00 2001 From: Prathik Rao Date: Wed, 9 Sep 2026 12:06:33 -0700 Subject: [PATCH 3/5] add back auth --- .pipelines/templates/stages-cs.yml | 2 ++ .pipelines/templates/stages-js.yml | 4 ++++ .pipelines/templates/stages-python.yml | 4 ++++ .pipelines/templates/stages-rust.yml | 13 +++++++++++++ .pipelines/templates/steps-build-cs.yml | 3 +++ .pipelines/templates/steps-build-js.yml | 5 +++++ .pipelines/templates/steps-build-linux.yml | 5 +++++ .pipelines/templates/steps-build-python.yml | 5 +++++ .pipelines/templates/steps-build-rust.yml | 13 +++++++++++++ .pipelines/templates/steps-pack-js.yml | 5 +++++ .pipelines/templates/steps-prefetch-nuget.yml | 3 +++ .pipelines/templates/steps-test-cs.yml | 3 +++ .pipelines/templates/steps-test-js.yml | 5 +++++ .pipelines/templates/steps-test-python.yml | 5 +++++ 14 files changed, 75 insertions(+) diff --git a/.pipelines/templates/stages-cs.yml b/.pipelines/templates/stages-cs.yml index 2314c6c0c..55224b6df 100644 --- a/.pipelines/templates/stages-cs.yml +++ b/.pipelines/templates/stages-cs.yml @@ -226,6 +226,8 @@ stages: inputs: packageType: runtime version: '9.0.x' + - task: NuGetAuthenticate@1 + displayName: 'Authenticate NuGet feeds' - task: PowerShell@2 displayName: 'Run packaged C# basic chat sample' inputs: diff --git a/.pipelines/templates/stages-js.yml b/.pipelines/templates/stages-js.yml index 836c677e9..8ffa641f2 100644 --- a/.pipelines/templates/stages-js.yml +++ b/.pipelines/templates/stages-js.yml @@ -391,6 +391,10 @@ stages: targetType: inline script: | Set-Content '$(Agent.TempDirectory)/js-sdk-package-test.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' + - task: npmAuthenticate@0 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' + inputs: + workingFile: '$(Agent.TempDirectory)/js-sdk-package-test.npmrc' - task: PowerShell@2 displayName: 'Run packaged JS basic_chat sample' inputs: diff --git a/.pipelines/templates/stages-python.yml b/.pipelines/templates/stages-python.yml index 084a4853c..93209df5f 100644 --- a/.pipelines/templates/stages-python.yml +++ b/.pipelines/templates/stages-python.yml @@ -409,6 +409,10 @@ stages: versionSpec: '3.12' addToPath: true architecture: 'x64' + - task: PipAuthenticate@1 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' + inputs: + artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' - task: PowerShell@2 displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' inputs: diff --git a/.pipelines/templates/stages-rust.yml b/.pipelines/templates/stages-rust.yml index ffa5fa4e6..42bb5acc6 100644 --- a/.pipelines/templates/stages-rust.yml +++ b/.pipelines/templates/stages-rust.yml @@ -232,7 +232,20 @@ stages: [source.AIFoundryLocal_PublicPackages] registry = "sparse+https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/Cargo/index/" + + [registries.AIFoundryLocal_PublicPackages] + index = "sparse+https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/Cargo/index/" + + [registry] + global-credential-providers = ["cargo:token"] "@ | Set-Content (Join-Path $cargoHome 'config.toml') + + if (-not $env:SYSTEM_ACCESSTOKEN) { throw 'System.AccessToken is required for Cargo feed authentication.' } + $credential = 'Basic ' + [Convert]::ToBase64String( + [Text.Encoding]::UTF8.GetBytes("build:$($env:SYSTEM_ACCESSTOKEN)")) + $credential | cargo login --registry AIFoundryLocal_PublicPackages + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) - task: PowerShell@2 displayName: 'Set crate version from sdkVersion.txt' inputs: diff --git a/.pipelines/templates/steps-build-cs.yml b/.pipelines/templates/steps-build-cs.yml index 1b2c51b2a..1044b88cc 100644 --- a/.pipelines/templates/steps-build-cs.yml +++ b/.pipelines/templates/steps-build-cs.yml @@ -75,6 +75,9 @@ steps: Set-Content -Path $configPath -Value $nugetConfig Write-Host "##vso[task.setvariable variable=customNugetConfig]$configPath" +- task: NuGetAuthenticate@1 + displayName: 'Authenticate NuGet feeds' + - task: PowerShell@2 displayName: 'Restore SDK' inputs: diff --git a/.pipelines/templates/steps-build-js.yml b/.pipelines/templates/steps-build-js.yml index 0ed1b3850..95513fd7d 100644 --- a/.pipelines/templates/steps-build-js.yml +++ b/.pipelines/templates/steps-build-js.yml @@ -45,6 +45,11 @@ steps: Set-Content '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' +- task: npmAuthenticate@0 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' + inputs: + workingFile: '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' + - ${{ if eq(parameters.rid, 'win-x64') }}: - task: UsePythonVersion@0 displayName: 'Use Python 3.12 (x64)' diff --git a/.pipelines/templates/steps-build-linux.yml b/.pipelines/templates/steps-build-linux.yml index 94b253ccf..93f9dbf2a 100644 --- a/.pipelines/templates/steps-build-linux.yml +++ b/.pipelines/templates/steps-build-linux.yml @@ -22,6 +22,11 @@ parameters: steps: +- task: PipAuthenticate@1 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' + inputs: + artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' + - bash: | python3 -m pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ python3 -m pip config unset global.extra-index-url || true diff --git a/.pipelines/templates/steps-build-python.yml b/.pipelines/templates/steps-build-python.yml index 21e3eccd9..d4b0d6448 100644 --- a/.pipelines/templates/steps-build-python.yml +++ b/.pipelines/templates/steps-build-python.yml @@ -60,6 +60,11 @@ steps: Write-Host "##vso[task.prependpath]$venvBin" Write-Host "Using system Python through build venv: $venvDir" +- task: PipAuthenticate@1 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' + inputs: + artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' + - task: PowerShell@2 displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' inputs: diff --git a/.pipelines/templates/steps-build-rust.yml b/.pipelines/templates/steps-build-rust.yml index 7057f2169..8c4e6170f 100644 --- a/.pipelines/templates/steps-build-rust.yml +++ b/.pipelines/templates/steps-build-rust.yml @@ -103,11 +103,24 @@ steps: [source.AIFoundryLocal_PublicPackages] registry = "sparse+https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/Cargo/index/" + + [registries.AIFoundryLocal_PublicPackages] + index = "sparse+https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/Cargo/index/" + + [registry] + global-credential-providers = ["cargo:token"] "@ | Set-Content (Join-Path $cargoHome 'config.toml') + if (-not $env:SYSTEM_ACCESSTOKEN) { throw 'System.AccessToken is required for Cargo feed authentication.' } + $credential = 'Basic ' + [Convert]::ToBase64String( + [Text.Encoding]::UTF8.GetBytes("build:$($env:SYSTEM_ACCESSTOKEN)")) + $credential | cargo login --registry AIFoundryLocal_PublicPackages + rustup show cargo --version rustc --version + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) # ── 2. Assemble the native runtime directory ───────────────────────────────── - task: PowerShell@2 diff --git a/.pipelines/templates/steps-pack-js.yml b/.pipelines/templates/steps-pack-js.yml index 6314fa095..b56e8c736 100644 --- a/.pipelines/templates/steps-pack-js.yml +++ b/.pipelines/templates/steps-pack-js.yml @@ -32,6 +32,11 @@ steps: Set-Content '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' +- task: npmAuthenticate@0 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' + inputs: + workingFile: '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' + - pwsh: | $dst = "$(Build.SourcesDirectory)/sdk_v2/js/prebuilds" if (Test-Path $dst) { Remove-Item -Recurse -Force $dst } diff --git a/.pipelines/templates/steps-prefetch-nuget.yml b/.pipelines/templates/steps-prefetch-nuget.yml index 302d371c7..a7b191a00 100644 --- a/.pipelines/templates/steps-prefetch-nuget.yml +++ b/.pipelines/templates/steps-prefetch-nuget.yml @@ -66,6 +66,9 @@ steps: packageType: sdk version: '10.0.x' +- task: NuGetAuthenticate@1 + displayName: 'Authenticate NuGet feeds' + - task: PowerShell@2 displayName: 'Restore native packages' inputs: diff --git a/.pipelines/templates/steps-test-cs.yml b/.pipelines/templates/steps-test-cs.yml index c4c56921d..081d51e15 100644 --- a/.pipelines/templates/steps-test-cs.yml +++ b/.pipelines/templates/steps-test-cs.yml @@ -109,6 +109,9 @@ steps: Set-Content -Path $configPath -Value $nugetConfig Write-Host "##vso[task.setvariable variable=customNugetConfig]$configPath" +- task: NuGetAuthenticate@1 + displayName: 'Authenticate NuGet feeds' + # Per-job NuGet isolation to prevent "Central Directory corrupt" / file-locking # errors when multiple C# test jobs run concurrently on the # same reused agent. Keyed by $(System.JobId); cleaned on each run. diff --git a/.pipelines/templates/steps-test-js.yml b/.pipelines/templates/steps-test-js.yml index a00143aca..785bc65fc 100644 --- a/.pipelines/templates/steps-test-js.yml +++ b/.pipelines/templates/steps-test-js.yml @@ -25,6 +25,11 @@ steps: Set-Content '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' +- task: npmAuthenticate@0 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for npm' + inputs: + workingFile: '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' + - ${{ if or(eq(parameters.rid, 'win-x64'), eq(parameters.rid, 'win-arm64')) }}: - task: PowerShell@2 displayName: 'Drop prebuild into sdk_v2/js/prebuilds' diff --git a/.pipelines/templates/steps-test-python.yml b/.pipelines/templates/steps-test-python.yml index 6c2c56062..dd442b901 100644 --- a/.pipelines/templates/steps-test-python.yml +++ b/.pipelines/templates/steps-test-python.yml @@ -48,6 +48,11 @@ steps: Write-Host "##vso[task.prependpath]$userBin" Write-Host "Using system Python: $python3Path" +- task: PipAuthenticate@1 + displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' + inputs: + artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' + - task: PowerShell@2 displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' inputs: From 70c6beb43990f5f678c703c7a5e0edaa591008ac Mon Sep 17 00:00:00 2001 From: Prathik Rao Date: Wed, 9 Sep 2026 13:49:27 -0700 Subject: [PATCH 4/5] bug fixes --- .pipelines/templates/stages-js.yml | 8 ++++++++ .pipelines/templates/stages-python.yml | 7 ------- .pipelines/templates/steps-build-linux.yml | 10 ++++------ .pipelines/templates/steps-build-python.yml | 15 +++++---------- .pipelines/templates/steps-test-js.yml | 11 +++++++++++ .pipelines/templates/steps-test-python.yml | 8 -------- 6 files changed, 28 insertions(+), 31 deletions(-) diff --git a/.pipelines/templates/stages-js.yml b/.pipelines/templates/stages-js.yml index 8ffa641f2..6d538bf1f 100644 --- a/.pipelines/templates/stages-js.yml +++ b/.pipelines/templates/stages-js.yml @@ -385,6 +385,13 @@ stages: displayName: 'Use Node.js 20' inputs: versionSpec: '20.x' + - task: UseDotNet@2 + displayName: 'Use .NET 10 SDK for native package restore' + inputs: + packageType: sdk + version: '10.0.x' + - task: NuGetAuthenticate@1 + displayName: 'Authenticate NuGet feeds' - task: PowerShell@2 displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' inputs: @@ -425,5 +432,6 @@ stages: if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } env: FOUNDRY_LOCAL_SAMPLE_CACHE_DIR: '$(Agent.TempDirectory)/js-package-model-cache' + FOUNDRY_LOCAL_NUGET_MODE: 'dotnet' FOUNDRY_LOCAL_NUGET_FEEDS: 'https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json' NPM_CONFIG_USERCONFIG: '$(Agent.TempDirectory)/js-sdk-package-test.npmrc' diff --git a/.pipelines/templates/stages-python.yml b/.pipelines/templates/stages-python.yml index 93209df5f..57622de4c 100644 --- a/.pipelines/templates/stages-python.yml +++ b/.pipelines/templates/stages-python.yml @@ -413,13 +413,6 @@ stages: displayName: 'Authenticate AIFoundryLocal_PublicPackages for pip' inputs: artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' - - task: PowerShell@2 - displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' - inputs: - targetType: inline - script: | - pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ - pip config unset global.extra-index-url 2>$null - task: PowerShell@2 displayName: 'Run packaged Python chat_completion sample' inputs: diff --git a/.pipelines/templates/steps-build-linux.yml b/.pipelines/templates/steps-build-linux.yml index 93f9dbf2a..4e0365525 100644 --- a/.pipelines/templates/steps-build-linux.yml +++ b/.pipelines/templates/steps-build-linux.yml @@ -27,11 +27,6 @@ steps: inputs: artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' -- bash: | - python3 -m pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ - python3 -m pip config unset global.extra-index-url || true - displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' - - bash: | set -euo pipefail case '${{ parameters.arch }}' in @@ -74,6 +69,7 @@ steps: version=$(tr -d '[:space:]' < "$(Pipeline.Workspace)/version-info/sdkVersion.txt") home_dir="$(Build.BinariesDirectory)/manylinux-home" mkdir -p "$home_dir" + : "${PIP_INDEX_URL:?PipAuthenticate did not set PIP_INDEX_URL}" user_id=$(id -u) group_id=$(id -g) @@ -85,13 +81,15 @@ steps: --env "VCPKG_ROOT=$(Build.BinariesDirectory)/vcpkg" \ --env "NUGET_CACHE=$(Build.BinariesDirectory)/nuget_packages" \ --env "SDK_VERSION=$version" \ + --env PIP_INDEX_URL \ + --env PIP_NO_INPUT=1 \ --workdir "$(Build.SourcesDirectory)/sdk_v2/cpp" \ "$(manylinuxImage)" \ bash -c ' set -euo pipefail /opt/python/cp312-cp312/bin/python3.12 -m venv "$HOME/venv" python="$HOME/venv/bin/python" - "$python" -m pip install --upgrade --index-url "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/" "cmake==3.31.6" + "$python" -m pip install --upgrade "cmake==3.31.6" git clone https://github.com/microsoft/vcpkg.git "$VCPKG_ROOT" "$VCPKG_ROOT/bootstrap-vcpkg.sh" -disableMetrics "$python" build.py --configure --build \ diff --git a/.pipelines/templates/steps-build-python.yml b/.pipelines/templates/steps-build-python.yml index d4b0d6448..34ffc2bc9 100644 --- a/.pipelines/templates/steps-build-python.yml +++ b/.pipelines/templates/steps-build-python.yml @@ -65,14 +65,6 @@ steps: inputs: artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' -- task: PowerShell@2 - displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' - inputs: - targetType: inline - script: | - pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ - pip config unset global.extra-index-url 2>$null - - task: PowerShell@2 displayName: 'Set package version from pyVersion.txt' inputs: @@ -283,6 +275,7 @@ steps: out_dir="${{ parameters.outputDir }}" home_dir="$(Agent.TempDirectory)/manylinux-python-home" mkdir -p "$raw_dir" "$out_dir" "$home_dir" + : "${PIP_INDEX_URL:?PipAuthenticate did not set PIP_INDEX_URL}" user_id=$(id -u) group_id=$(id -g) docker version @@ -298,13 +291,15 @@ steps: --env "RAW_WHEEL_DIR=$raw_dir" \ --env "WHEEL_DIR=$out_dir" \ --env "AUDITWHEEL_PLAT=$platform_tag" \ + --env PIP_INDEX_URL \ + --env PIP_NO_INPUT=1 \ --workdir "$(Build.SourcesDirectory)/sdk_v2/python" \ "$image" \ bash -c ' set -euo pipefail /opt/python/cp312-cp312/bin/python3.12 -m venv "$HOME/venv" python="$HOME/venv/bin/python" - "$python" -m pip install --upgrade --index-url "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/" build setuptools wheel "cffi>=1.16" "auditwheel==6.8.1" + "$python" -m pip install --upgrade build setuptools wheel "cffi>=1.16" "auditwheel==6.8.1" "$python" -m build --wheel --outdir "$RAW_WHEEL_DIR" "$HOME/venv/bin/auditwheel" repair "$RAW_WHEEL_DIR"/*.whl \ --wheel-dir "$WHEEL_DIR" \ @@ -333,7 +328,7 @@ steps: throw "Failed to create auditwheel virtual environment with exit code $LASTEXITCODE" } $hostPython = "$hostVenv/bin/python" - & $hostPython -m pip install --upgrade --index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ pip "auditwheel==6.8.1" + & $hostPython -m pip install --upgrade pip "auditwheel==6.8.1" if ($LASTEXITCODE -ne 0) { throw "Failed to install auditwheel with exit code $LASTEXITCODE" } diff --git a/.pipelines/templates/steps-test-js.yml b/.pipelines/templates/steps-test-js.yml index 785bc65fc..dd819486b 100644 --- a/.pipelines/templates/steps-test-js.yml +++ b/.pipelines/templates/steps-test-js.yml @@ -21,6 +21,15 @@ steps: inputs: versionSpec: '20.x' +- task: UseDotNet@2 + displayName: 'Use .NET 10 SDK for native package restore' + inputs: + packageType: sdk + version: '10.0.x' + +- task: NuGetAuthenticate@1 + displayName: 'Authenticate NuGet feeds' + - powershell: | Set-Content '$(Build.SourcesDirectory)/sdk_v2/js/.npmrc' 'registry=https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/' displayName: 'Configure AIFoundryLocal_PublicPackages npm registry' @@ -104,6 +113,7 @@ steps: workingDir: '$(Build.SourcesDirectory)/sdk_v2/js' customCommand: 'ci --no-audit --no-fund' env: + FOUNDRY_LOCAL_NUGET_MODE: 'dotnet' FOUNDRY_LOCAL_NUGET_FEEDS: 'https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json' - task: PowerShell@2 @@ -138,6 +148,7 @@ steps: npm ci --no-audit --no-fund displayName: 'npm ci (runs install-native postinstall)' env: + FOUNDRY_LOCAL_NUGET_MODE: 'dotnet' FOUNDRY_LOCAL_NUGET_FEEDS: 'https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json' - bash: | diff --git a/.pipelines/templates/steps-test-python.yml b/.pipelines/templates/steps-test-python.yml index dd442b901..1debcc629 100644 --- a/.pipelines/templates/steps-test-python.yml +++ b/.pipelines/templates/steps-test-python.yml @@ -53,14 +53,6 @@ steps: inputs: artifactFeeds: 'AIFoundryLocal/AIFoundryLocal_PublicPackages' -- task: PowerShell@2 - displayName: 'Configure pip to use AIFoundryLocal_PublicPackages' - inputs: - targetType: inline - script: | - pip config set global.index-url https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/pypi/simple/ - pip config unset global.extra-index-url 2>$null - - task: PowerShell@2 displayName: 'Bootstrap VC++ ARM64 runtime' condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'), eq(variables['Agent.OSArchitecture'], 'ARM64')) From 846a0e9b25aef99f3b61ec086a784852179a1964 Mon Sep 17 00:00:00 2001 From: Prathik Rao Date: Thu, 10 Sep 2026 11:12:30 -0700 Subject: [PATCH 5/5] revert local changes --- sdk_v2/cpp/CMakeLists.txt | 2 +- sdk_v2/cpp/cmake/FindOnnxRuntime.cmake | 22 +- sdk_v2/cpp/cmake/FindOnnxRuntimeGenAI.cmake | 18 +- sdk_v2/cpp/cmake/FindWinMLEpCatalog.cmake | 4 +- sdk_v2/cs/NuGet.config | 4 +- sdk_v2/js/package-lock.json | 246 ++++++++++---------- sdk_v2/js/script/install-native.cjs | 3 +- sdk_v2/rust/build.rs | 2 +- sdk_v2/rust/build_support.rs | 3 +- 9 files changed, 163 insertions(+), 141 deletions(-) diff --git a/sdk_v2/cpp/CMakeLists.txt b/sdk_v2/cpp/CMakeLists.txt index 2ec488869..cb8c42121 100644 --- a/sdk_v2/cpp/CMakeLists.txt +++ b/sdk_v2/cpp/CMakeLists.txt @@ -106,7 +106,7 @@ if(FOUNDRY_LOCAL_BUILD_TESTS) enable_testing() endif() -# ORT and ORT GenAI — acquired via FetchContent from the approved CFS feed. +# ORT and ORT GenAI — acquired via FetchContent from nuget.org. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") find_package(OnnxRuntimeGenAI REQUIRED) diff --git a/sdk_v2/cpp/cmake/FindOnnxRuntime.cmake b/sdk_v2/cpp/cmake/FindOnnxRuntime.cmake index 831e4aa9e..8a2bf3772 100644 --- a/sdk_v2/cpp/cmake/FindOnnxRuntime.cmake +++ b/sdk_v2/cpp/cmake/FindOnnxRuntime.cmake @@ -1,8 +1,8 @@ # Copyright (c) Microsoft. All rights reserved. # Find/acquire ONNX Runtime. # -# Sources ORT from Microsoft.ML.OnnxRuntime via FetchContent from the approved -# CFS feed. The version comes +# Sources ORT from Microsoft.ML.OnnxRuntime via FetchContent — nuget.org for +# releases and the ORT-Nightly ADO feed for -dev- versions. The version comes # from sdk_v2/deps_versions.json and is shared by all platforms. # # Creates an IMPORTED target: OnnxRuntime::OnnxRuntime @@ -59,7 +59,7 @@ if(ORT_HOME) endif() else() # ----------------------------------------------------------------------- - # Standard path: FetchContent from AIFoundryLocal_PublicPackages. + # Standard path: FetchContent from nuget.org (releases) or ORT-Nightly ADO feed (dev builds) # ----------------------------------------------------------------------- if(NOT ORT_VERSION) # Single source of truth: sdk_v2/deps_versions.json. The Python SDK @@ -75,12 +75,22 @@ else() endif() set(ORT_PACKAGE_NAME "Microsoft.ML.OnnxRuntime") - # ORT_FETCH_URL can be set externally, for example to a local prefetch archive. + # ORT_FETCH_URL can be set externally (e.g. for CI where nuget.org is blocked). set(ORT_FETCH_URL "" CACHE STRING "Override URL or local path for the OnnxRuntime NuGet package") if(NOT ORT_FETCH_URL) - set(ORT_FETCH_URL "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_apis/packaging/feeds/AIFoundryLocal_PublicPackages/nuget/packages/${ORT_PACKAGE_NAME}/versions/${ORT_VERSION}/content?api-version=6.0-preview.1") - message(STATUS "Downloading ${ORT_PACKAGE_NAME} ${ORT_VERSION} from AIFoundryLocal_PublicPackages") + # Dev builds come from the ADO nightly feed; release versions come from nuget.org. + if(ORT_VERSION MATCHES "-dev-") + set(ORT_FEED_ORG "aiinfra") + set(ORT_FEED_PROJECT "2692857e-05ef-43b4-ba9c-ccf1c22c437c") + set(ORT_FEED_ID "7982ae20-ed19-4a35-a362-a96ac99897b7") + set(ORT_FETCH_URL "https://pkgs.dev.azure.com/${ORT_FEED_ORG}/${ORT_FEED_PROJECT}/_apis/packaging/feeds/${ORT_FEED_ID}/nuget/packages/${ORT_PACKAGE_NAME}/versions/${ORT_VERSION}/content?api-version=6.0-preview.1") + message(STATUS "Downloading ${ORT_PACKAGE_NAME} ${ORT_VERSION} from ORT-Nightly feed") + else() + string(TOLOWER "${ORT_PACKAGE_NAME}" _ORT_PACKAGE_LOWER) + set(ORT_FETCH_URL "https://api.nuget.org/v3-flatcontainer/${_ORT_PACKAGE_LOWER}/${ORT_VERSION}/${_ORT_PACKAGE_LOWER}.${ORT_VERSION}.nupkg") + message(STATUS "Downloading ${ORT_PACKAGE_NAME} ${ORT_VERSION} from nuget.org") + endif() else() message(STATUS "Using pre-configured ORT_FETCH_URL: ${ORT_FETCH_URL}") endif() diff --git a/sdk_v2/cpp/cmake/FindOnnxRuntimeGenAI.cmake b/sdk_v2/cpp/cmake/FindOnnxRuntimeGenAI.cmake index f7d6a97a3..5e46ac817 100644 --- a/sdk_v2/cpp/cmake/FindOnnxRuntimeGenAI.cmake +++ b/sdk_v2/cpp/cmake/FindOnnxRuntimeGenAI.cmake @@ -4,7 +4,7 @@ # All platforms / flavors: Microsoft.ML.OnnxRuntimeGenAI.Foundry # # When ORT_GENAI_HOME is set, uses the local ORT GenAI build instead of NuGet. -# Otherwise uses FetchContent from the approved CFS feed. +# Otherwise uses FetchContent from nuget.org. # Creates an IMPORTED target: OnnxRuntimeGenAI::OnnxRuntimeGenAI if(OnnxRuntimeGenAI_FOUND) @@ -149,10 +149,20 @@ if(ANDROID) message(STATUS "OnnxRuntimeGenAI via GitHub AAR: ${_GENAI_AAR_DIR}") else() # Allow the pipeline or caller to override the download URL (e.g., to use a local - # file:// path when direct feed access is blocked in CI). + # file:// path when direct nuget.org access is blocked in CI). if(NOT GENAI_FETCH_URL) - set(GENAI_FETCH_URL "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_apis/packaging/feeds/AIFoundryLocal_PublicPackages/nuget/packages/${_GENAI_PACKAGE_NAME}/versions/${ORT_GENAI_VERSION}/content?api-version=6.0-preview.1") - message(STATUS "Downloading ${_GENAI_PACKAGE_NAME} ${ORT_GENAI_VERSION} from AIFoundryLocal_PublicPackages") + # Dev builds come from the ADO nightly feed; release versions come from nuget.org. + if(ORT_GENAI_VERSION MATCHES "-dev-") + set(ORT_GENAI_FEED_ORG "aiinfra") + set(ORT_GENAI_FEED_PROJECT "2692857e-05ef-43b4-ba9c-ccf1c22c437c") + set(ORT_GENAI_FEED_ID "7982ae20-ed19-4a35-a362-a96ac99897b7") + set(GENAI_FETCH_URL "https://pkgs.dev.azure.com/${ORT_GENAI_FEED_ORG}/${ORT_GENAI_FEED_PROJECT}/_apis/packaging/feeds/${ORT_GENAI_FEED_ID}/nuget/packages/${_GENAI_PACKAGE_NAME}/versions/${ORT_GENAI_VERSION}/content?api-version=6.0-preview.1") + message(STATUS "Downloading ${_GENAI_PACKAGE_NAME} ${ORT_GENAI_VERSION} from ORT-Nightly feed") + else() + string(TOLOWER "${_GENAI_PACKAGE_NAME}" _GENAI_PACKAGE_LOWER) + set(GENAI_FETCH_URL "https://api.nuget.org/v3-flatcontainer/${_GENAI_PACKAGE_LOWER}/${ORT_GENAI_VERSION}/${_GENAI_PACKAGE_LOWER}.${ORT_GENAI_VERSION}.nupkg") + message(STATUS "Downloading ${_GENAI_PACKAGE_NAME} ${ORT_GENAI_VERSION} from nuget.org") + endif() else() message(STATUS "Using caller-provided GENAI_FETCH_URL: ${GENAI_FETCH_URL}") endif() diff --git a/sdk_v2/cpp/cmake/FindWinMLEpCatalog.cmake b/sdk_v2/cpp/cmake/FindWinMLEpCatalog.cmake index d1275fc56..dc732a4ff 100644 --- a/sdk_v2/cpp/cmake/FindWinMLEpCatalog.cmake +++ b/sdk_v2/cpp/cmake/FindWinMLEpCatalog.cmake @@ -62,7 +62,7 @@ endif() include(cmake/nuget.cmake) -# WINML_EP_CATALOG_FETCH_URL can be set externally, for example to a local prefetch archive. +# WINML_EP_CATALOG_FETCH_URL can be set externally (e.g. for CI where nuget.org is blocked). set(WINML_EP_CATALOG_FETCH_URL "" CACHE STRING "Override URL or local path for the WinML EP Catalog NuGet package") if(WINML_EP_CATALOG_FETCH_URL) @@ -82,7 +82,7 @@ if(WINML_EP_CATALOG_FETCH_URL) message(STATUS "WinML EP Catalog via FetchContent: ${_WINML_EP_ROOT}") else() install_nuget_package(Microsoft.Windows.AI.MachineLearning ${WINML_EP_CATALOG_VERSION} _WINML_EP_ROOT - SOURCE https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json) + SOURCE https://api.nuget.org/v3/index.json) endif() # Load the package's first-party CMake config for target discovery and layout diff --git a/sdk_v2/cs/NuGet.config b/sdk_v2/cs/NuGet.config index d6e1f4222..316550e3e 100644 --- a/sdk_v2/cs/NuGet.config +++ b/sdk_v2/cs/NuGet.config @@ -11,10 +11,10 @@ For local development with a local Runtime NuGet, create a NuGet.config.user: - + --> - + diff --git a/sdk_v2/js/package-lock.json b/sdk_v2/js/package-lock.json index 648bbbbb7..ce49ae6a1 100644 --- a/sdk_v2/js/package-lock.json +++ b/sdk_v2/js/package-lock.json @@ -27,7 +27,7 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.29.7", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", @@ -37,7 +37,7 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.29.7", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", @@ -47,7 +47,7 @@ }, "node_modules/@babel/parser": { "version": "7.29.7", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@babel/parser/-/parser-7.29.7.tgz", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, "license": "MIT", @@ -63,7 +63,7 @@ }, "node_modules/@babel/types": { "version": "7.29.7", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@babel/types/-/types-7.29.7.tgz", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, "license": "MIT", @@ -77,7 +77,7 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "1.0.2", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, "license": "MIT", @@ -87,7 +87,7 @@ }, "node_modules/@biomejs/biome": { "version": "1.9.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/biome/-/biome-1.9.4.tgz", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", "dev": true, "hasInstallScript": true, @@ -115,7 +115,7 @@ }, "node_modules/@biomejs/cli-darwin-arm64": { "version": "1.9.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", "cpu": [ "arm64" @@ -132,7 +132,7 @@ }, "node_modules/@biomejs/cli-darwin-x64": { "version": "1.9.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", "cpu": [ "x64" @@ -149,7 +149,7 @@ }, "node_modules/@biomejs/cli-linux-arm64": { "version": "1.9.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", "cpu": [ "arm64" @@ -166,7 +166,7 @@ }, "node_modules/@biomejs/cli-linux-arm64-musl": { "version": "1.9.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", "cpu": [ "arm64" @@ -183,7 +183,7 @@ }, "node_modules/@biomejs/cli-linux-x64": { "version": "1.9.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", "cpu": [ "x64" @@ -200,7 +200,7 @@ }, "node_modules/@biomejs/cli-linux-x64-musl": { "version": "1.9.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", "cpu": [ "x64" @@ -217,7 +217,7 @@ }, "node_modules/@biomejs/cli-win32-arm64": { "version": "1.9.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", "cpu": [ "arm64" @@ -234,7 +234,7 @@ }, "node_modules/@biomejs/cli-win32-x64": { "version": "1.9.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", "cpu": [ "x64" @@ -251,7 +251,7 @@ }, "node_modules/@emnapi/core": { "version": "1.10.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@emnapi/core/-/core-1.10.0.tgz", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", "dev": true, "license": "MIT", @@ -263,7 +263,7 @@ }, "node_modules/@emnapi/runtime": { "version": "1.10.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@emnapi/runtime/-/runtime-1.10.0.tgz", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "dev": true, "license": "MIT", @@ -274,7 +274,7 @@ }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", "dev": true, "license": "MIT", @@ -285,7 +285,7 @@ }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, "license": "ISC", @@ -298,7 +298,7 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", @@ -308,14 +308,14 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", @@ -326,7 +326,7 @@ }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.5", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", "dev": true, "license": "MIT", @@ -345,7 +345,7 @@ }, "node_modules/@oxc-project/types": { "version": "0.133.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@oxc-project/types/-/types-0.133.0.tgz", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", "dev": true, "license": "MIT", @@ -355,7 +355,7 @@ }, "node_modules/@rolldown/binding-android-arm64": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", "cpu": [ "arm64" @@ -372,7 +372,7 @@ }, "node_modules/@rolldown/binding-darwin-arm64": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", "cpu": [ "arm64" @@ -389,7 +389,7 @@ }, "node_modules/@rolldown/binding-darwin-x64": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", "cpu": [ "x64" @@ -406,7 +406,7 @@ }, "node_modules/@rolldown/binding-freebsd-x64": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", "cpu": [ "x64" @@ -423,7 +423,7 @@ }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", "cpu": [ "arm" @@ -440,7 +440,7 @@ }, "node_modules/@rolldown/binding-linux-arm64-gnu": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", "cpu": [ "arm64" @@ -460,7 +460,7 @@ }, "node_modules/@rolldown/binding-linux-arm64-musl": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", "cpu": [ "arm64" @@ -480,7 +480,7 @@ }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", "cpu": [ "ppc64" @@ -500,7 +500,7 @@ }, "node_modules/@rolldown/binding-linux-s390x-gnu": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", "cpu": [ "s390x" @@ -520,7 +520,7 @@ }, "node_modules/@rolldown/binding-linux-x64-gnu": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", "cpu": [ "x64" @@ -540,7 +540,7 @@ }, "node_modules/@rolldown/binding-linux-x64-musl": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", "cpu": [ "x64" @@ -560,7 +560,7 @@ }, "node_modules/@rolldown/binding-openharmony-arm64": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", "cpu": [ "arm64" @@ -577,7 +577,7 @@ }, "node_modules/@rolldown/binding-wasm32-wasi": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", "cpu": [ "wasm32" @@ -596,7 +596,7 @@ }, "node_modules/@rolldown/binding-win32-arm64-msvc": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", "cpu": [ "arm64" @@ -613,7 +613,7 @@ }, "node_modules/@rolldown/binding-win32-x64-msvc": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", "cpu": [ "x64" @@ -630,21 +630,21 @@ }, "node_modules/@rolldown/pluginutils": { "version": "1.0.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, "license": "MIT" }, "node_modules/@standard-schema/spec": { "version": "1.1.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@standard-schema/spec/-/spec-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, "license": "MIT" }, "node_modules/@tybys/wasm-util": { "version": "0.10.2", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "dev": true, "license": "MIT", @@ -655,7 +655,7 @@ }, "node_modules/@types/chai": { "version": "5.2.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@types/chai/-/chai-5.2.3.tgz", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", @@ -666,21 +666,21 @@ }, "node_modules/@types/deep-eql": { "version": "4.0.2", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.9", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@types/estree/-/estree-1.0.9.tgz", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "20.19.41", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@types/node/-/node-20.19.41.tgz", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.41.tgz", "integrity": "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==", "dev": true, "license": "MIT", @@ -690,7 +690,7 @@ }, "node_modules/@vitest/coverage-v8": { "version": "4.1.9", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/coverage-v8/-/coverage-v8-4.1.9.tgz", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.9.tgz", "integrity": "sha512-G9/lgqibheLVBDRuya45EbsEXTYcWoSG+TLg7i2axuzx0Eq62eXn+aWXyaVdV5vKvFSWd6ywcX8hA7la9Pvu8g==", "dev": true, "license": "MIT", @@ -721,7 +721,7 @@ }, "node_modules/@vitest/expect": { "version": "4.1.9", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/expect/-/expect-4.1.9.tgz", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", "dev": true, "license": "MIT", @@ -739,7 +739,7 @@ }, "node_modules/@vitest/mocker": { "version": "4.1.9", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/mocker/-/mocker-4.1.9.tgz", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", "dev": true, "license": "MIT", @@ -766,7 +766,7 @@ }, "node_modules/@vitest/pretty-format": { "version": "4.1.9", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", "dev": true, "license": "MIT", @@ -779,7 +779,7 @@ }, "node_modules/@vitest/runner": { "version": "4.1.9", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/runner/-/runner-4.1.9.tgz", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", "dev": true, "license": "MIT", @@ -793,7 +793,7 @@ }, "node_modules/@vitest/snapshot": { "version": "4.1.9", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", "dev": true, "license": "MIT", @@ -809,7 +809,7 @@ }, "node_modules/@vitest/spy": { "version": "4.1.9", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/spy/-/spy-4.1.9.tgz", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", "dev": true, "license": "MIT", @@ -819,7 +819,7 @@ }, "node_modules/@vitest/utils": { "version": "4.1.9", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/@vitest/utils/-/utils-4.1.9.tgz", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", "dev": true, "license": "MIT", @@ -834,7 +834,7 @@ }, "node_modules/abbrev": { "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/abbrev/-/abbrev-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", "dev": true, "license": "ISC", @@ -844,7 +844,7 @@ }, "node_modules/adm-zip": { "version": "0.6.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/adm-zip/-/adm-zip-0.6.0.tgz", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.6.0.tgz", "integrity": "sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==", "license": "MIT", "engines": { @@ -853,7 +853,7 @@ }, "node_modules/assertion-error": { "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/assertion-error/-/assertion-error-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", @@ -863,7 +863,7 @@ }, "node_modules/ast-v8-to-istanbul": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.3.tgz", "integrity": "sha512-jCMQ6ZylLPudp0CDfBmQBZUsrh1/8psbmu9ibeVWKuHWD0YrH9YABwlKu5kVEFoT0GCQQW9Z/SxfuEbbkGQCRg==", "dev": true, "license": "MIT", @@ -875,7 +875,7 @@ }, "node_modules/chai": { "version": "6.2.2", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/chai/-/chai-6.2.2.tgz", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", @@ -885,7 +885,7 @@ }, "node_modules/chownr": { "version": "3.0.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/chownr/-/chownr-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, "license": "BlueOak-1.0.0", @@ -895,14 +895,14 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/convert-source-map/-/convert-source-map-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/detect-libc": { "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/detect-libc/-/detect-libc-2.1.2.tgz", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", @@ -912,7 +912,7 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/env-paths/-/env-paths-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", @@ -922,14 +922,14 @@ }, "node_modules/es-module-lexer": { "version": "2.1.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true, "license": "MIT" }, "node_modules/estree-walker": { "version": "3.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/estree-walker/-/estree-walker-3.0.3.tgz", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", @@ -939,7 +939,7 @@ }, "node_modules/expect-type": { "version": "1.3.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/expect-type/-/expect-type-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, "license": "Apache-2.0", @@ -949,14 +949,14 @@ }, "node_modules/exponential-backoff": { "version": "3.1.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "dev": true, "license": "Apache-2.0" }, "node_modules/fdir": { "version": "6.5.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/fdir/-/fdir-6.5.0.tgz", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", @@ -974,7 +974,7 @@ }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/fsevents/-/fsevents-2.3.3.tgz", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, @@ -989,14 +989,14 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/graceful-fs/-/graceful-fs-4.2.11.tgz", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/has-flag/-/has-flag-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", @@ -1006,14 +1006,14 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/html-escaper/-/html-escaper-2.0.2.tgz", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/isexe/-/isexe-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, "license": "BlueOak-1.0.0", @@ -1023,7 +1023,7 @@ }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", @@ -1033,7 +1033,7 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", @@ -1048,7 +1048,7 @@ }, "node_modules/istanbul-reports": { "version": "3.2.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", @@ -1062,14 +1062,14 @@ }, "node_modules/js-tokens": { "version": "10.0.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/js-tokens/-/js-tokens-10.0.0.tgz", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", "dev": true, "license": "MIT" }, "node_modules/lightningcss": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss/-/lightningcss-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", "dev": true, "license": "MPL-2.0", @@ -1099,7 +1099,7 @@ }, "node_modules/lightningcss-android-arm64": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", "cpu": [ "arm64" @@ -1120,7 +1120,7 @@ }, "node_modules/lightningcss-darwin-arm64": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", "cpu": [ "arm64" @@ -1141,7 +1141,7 @@ }, "node_modules/lightningcss-darwin-x64": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", "cpu": [ "x64" @@ -1162,7 +1162,7 @@ }, "node_modules/lightningcss-freebsd-x64": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", "cpu": [ "x64" @@ -1183,7 +1183,7 @@ }, "node_modules/lightningcss-linux-arm-gnueabihf": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", "cpu": [ "arm" @@ -1204,7 +1204,7 @@ }, "node_modules/lightningcss-linux-arm64-gnu": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", "cpu": [ "arm64" @@ -1228,7 +1228,7 @@ }, "node_modules/lightningcss-linux-arm64-musl": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", "cpu": [ "arm64" @@ -1252,7 +1252,7 @@ }, "node_modules/lightningcss-linux-x64-gnu": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", "cpu": [ "x64" @@ -1276,7 +1276,7 @@ }, "node_modules/lightningcss-linux-x64-musl": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", "cpu": [ "x64" @@ -1300,7 +1300,7 @@ }, "node_modules/lightningcss-win32-arm64-msvc": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", "cpu": [ "arm64" @@ -1321,7 +1321,7 @@ }, "node_modules/lightningcss-win32-x64-msvc": { "version": "1.32.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", "cpu": [ "x64" @@ -1342,7 +1342,7 @@ }, "node_modules/magic-string": { "version": "0.30.21", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/magic-string/-/magic-string-0.30.21.tgz", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", @@ -1352,7 +1352,7 @@ }, "node_modules/magicast": { "version": "0.5.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/magicast/-/magicast-0.5.3.tgz", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz", "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==", "dev": true, "license": "MIT", @@ -1364,7 +1364,7 @@ }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/make-dir/-/make-dir-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", @@ -1380,7 +1380,7 @@ }, "node_modules/minipass": { "version": "7.1.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/minipass/-/minipass-7.1.3.tgz", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, "license": "BlueOak-1.0.0", @@ -1390,7 +1390,7 @@ }, "node_modules/minizlib": { "version": "3.1.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/minizlib/-/minizlib-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", @@ -1422,7 +1422,7 @@ }, "node_modules/node-addon-api": { "version": "8.8.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/node-addon-api/-/node-addon-api-8.8.0.tgz", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.8.0.tgz", "integrity": "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA==", "license": "MIT", "engines": { @@ -1431,7 +1431,7 @@ }, "node_modules/node-gyp": { "version": "12.3.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/node-gyp/-/node-gyp-12.3.0.tgz", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.3.0.tgz", "integrity": "sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg==", "dev": true, "license": "MIT", @@ -1456,7 +1456,7 @@ }, "node_modules/nopt": { "version": "9.0.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/nopt/-/nopt-9.0.0.tgz", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", "dev": true, "license": "ISC", @@ -1472,7 +1472,7 @@ }, "node_modules/obug": { "version": "2.1.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/obug/-/obug-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", "dev": true, "funding": [ @@ -1483,21 +1483,21 @@ }, "node_modules/pathe": { "version": "2.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/pathe/-/pathe-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/picocolors/-/picocolors-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/picomatch/-/picomatch-4.0.4.tgz", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", @@ -1510,7 +1510,7 @@ }, "node_modules/postcss": { "version": "8.5.25", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/postcss/-/postcss-8.5.25.tgz", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", "dev": true, "funding": [ @@ -1539,7 +1539,7 @@ }, "node_modules/proc-log": { "version": "6.1.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/proc-log/-/proc-log-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, "license": "ISC", @@ -1549,7 +1549,7 @@ }, "node_modules/rolldown": { "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/rolldown/-/rolldown-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", "dev": true, "license": "MIT", @@ -1583,7 +1583,7 @@ }, "node_modules/semver": { "version": "7.8.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/semver/-/semver-7.8.1.tgz", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "dev": true, "license": "ISC", @@ -1596,14 +1596,14 @@ }, "node_modules/siginfo": { "version": "2.0.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/siginfo/-/siginfo-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/source-map-js/-/source-map-js-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "license": "BSD-3-Clause", @@ -1613,21 +1613,21 @@ }, "node_modules/stackback": { "version": "0.0.2", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/stackback/-/stackback-0.0.2.tgz", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, "node_modules/std-env": { "version": "4.1.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/std-env/-/std-env-4.1.0.tgz", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", "dev": true, "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/supports-color/-/supports-color-7.2.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", @@ -1640,7 +1640,7 @@ }, "node_modules/tar": { "version": "7.5.20", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tar/-/tar-7.5.20.tgz", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.20.tgz", "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", "dev": true, "license": "BlueOak-1.0.0", @@ -1657,14 +1657,14 @@ }, "node_modules/tinybench": { "version": "2.9.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tinybench/-/tinybench-2.9.0.tgz", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, "node_modules/tinyexec": { "version": "1.2.4", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tinyexec/-/tinyexec-1.2.4.tgz", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", "dev": true, "license": "MIT", @@ -1674,7 +1674,7 @@ }, "node_modules/tinyglobby": { "version": "0.2.17", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tinyglobby/-/tinyglobby-0.2.17.tgz", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", @@ -1691,7 +1691,7 @@ }, "node_modules/tinyrainbow": { "version": "3.1.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "dev": true, "license": "MIT", @@ -1701,7 +1701,7 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/tslib/-/tslib-2.8.1.tgz", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD", @@ -1709,7 +1709,7 @@ }, "node_modules/typescript": { "version": "5.9.3", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/typescript/-/typescript-5.9.3.tgz", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", @@ -1723,7 +1723,7 @@ }, "node_modules/undici": { "version": "6.28.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/undici/-/undici-6.28.0.tgz", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", "dev": true, "license": "MIT", @@ -1733,14 +1733,14 @@ }, "node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/undici-types/-/undici-types-6.21.0.tgz", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, "node_modules/vite": { "version": "8.0.16", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/vite/-/vite-8.0.16.tgz", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", "dev": true, "license": "MIT", @@ -1818,7 +1818,7 @@ }, "node_modules/vitest": { "version": "4.1.9", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/vitest/-/vitest-4.1.9.tgz", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", "dev": true, "license": "MIT", @@ -1908,7 +1908,7 @@ }, "node_modules/which": { "version": "6.0.1", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/which/-/which-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, "license": "ISC", @@ -1924,7 +1924,7 @@ }, "node_modules/why-is-node-running": { "version": "2.3.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", @@ -1941,7 +1941,7 @@ }, "node_modules/yallist": { "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/npm/registry/yallist/-/yallist-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, "license": "BlueOak-1.0.0", diff --git a/sdk_v2/js/script/install-native.cjs b/sdk_v2/js/script/install-native.cjs index 4c502223f..ae337819c 100644 --- a/sdk_v2/js/script/install-native.cjs +++ b/sdk_v2/js/script/install-native.cjs @@ -34,7 +34,8 @@ const PLATFORM_MAP = { }; const DEFAULT_FEEDS = [ - "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json", + "https://api.nuget.org/v3/index.json", + "https://pkgs.dev.azure.com/aiinfra/PublicPackages/_packaging/ORT-Nightly/nuget/v3/index.json", ]; const VALID_MODES = new Set(["http", "dotnet", "nuget"]); diff --git a/sdk_v2/rust/build.rs b/sdk_v2/rust/build.rs index 68be23eb9..11519c2fb 100644 --- a/sdk_v2/rust/build.rs +++ b/sdk_v2/rust/build.rs @@ -263,7 +263,7 @@ fn download_and_extract( // expected native binary (the archive opened as a valid zip and the // expected file landed on disk). Cryptographic SHA-512 verification // against the feed's published packageHash is feed-specific — the - // registration layout differs between NuGet service implementations and Azure DevOps + // registration layout differs between nuget.org and the Azure DevOps // feed — and is left as future hardening. Ok(files) => { let stage_result = http_extract::stage_files(&files, out_dir); diff --git a/sdk_v2/rust/build_support.rs b/sdk_v2/rust/build_support.rs index ee4d3149e..55dbbf5bd 100644 --- a/sdk_v2/rust/build_support.rs +++ b/sdk_v2/rust/build_support.rs @@ -4,7 +4,8 @@ use std::fs; use std::path::{Path, PathBuf}; pub const DEFAULT_FEEDS: &[&str] = &[ - "https://pkgs.dev.azure.com/aiinfra/AIFoundryLocal/_packaging/AIFoundryLocal_PublicPackages/nuget/v3/index.json", + "https://api.nuget.org/v3/index.json", + "https://pkgs.dev.azure.com/aiinfra/PublicPackages/_packaging/ORT-Nightly/nuget/v3/index.json", ]; #[derive(Clone, Copy, Debug, Eq, PartialEq)]