Skip to content

Propagate IModel API changes across Python, JS, Rust SDKs and update C# docs #35

Propagate IModel API changes across Python, JS, Rust SDKs and update C# docs

Propagate IModel API changes across Python, JS, Rust SDKs and update C# docs #35

name: Samples Build Check
on:
pull_request:
paths:
- 'samples/**'
- '.github/workflows/samples-integration-test.yml'
push:
paths:
- 'samples/**'
- '.github/workflows/samples-integration-test.yml'
branches:
- main
workflow_dispatch:
permissions:
contents: read
jobs:
# ── Python Samples ──────────────────────────────────────────────────
python-samples:
runs-on: ${{ matrix.platform }}-latest
strategy:
fail-fast: false
matrix:
platform: [windows, macos]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
clean: true
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Configure pip for Azure Artifacts
run: |
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
- name: Build and install SDK from source
working-directory: sdk/python
shell: pwsh
run: |
python -m pip install build
echo '__version__ = "0.0.0-dev"' > src/version.py
python -m build --wheel --outdir dist/
$wheel = (Get-ChildItem dist/*.whl | Select-Object -First 1).FullName
pip install $wheel
- name: Install sample dependencies
shell: pwsh
run: |
Get-ChildItem samples/python/*/requirements.txt -ErrorAction SilentlyContinue | ForEach-Object {
Write-Host "Installing dependencies for $($_.Directory.Name)..."
pip install -r $_.FullName
}
- name: Syntax check Python samples
shell: pwsh
run: |
$failed = @()
$samples = Get-ChildItem samples/python/*/src/app.py -ErrorAction SilentlyContinue
foreach ($sample in $samples) {
$name = $sample.Directory.Parent.Name
Write-Host "=== Checking: $name ==="
python -m py_compile $sample.FullName
if ($LASTEXITCODE -ne 0) {
Write-Host "FAILED: $name"
$failed += $name
} else {
Write-Host "OK: $name"
}
}
if ($failed.Count -gt 0) {
Write-Error "Failed syntax checks: $($failed -join ', ')"
exit 1
}
# ── JavaScript Samples ──────────────────────────────────────────────
js-samples:
runs-on: ${{ matrix.platform }}-latest
strategy:
fail-fast: false
matrix:
platform: [windows, macos]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
clean: true
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Setup .NET SDK for NuGet authentication
uses: actions/setup-dotnet@v5
with:
dotnet-version: '10.0.x'
- name: Build SDK from source
working-directory: sdk/js
run: |
npm install
npm run build
npm link
- name: Syntax check JS samples
shell: pwsh
run: |
$failed = @()
# Find all sample app.js files (either in root or src/)
$samples = @()
$samples += Get-ChildItem samples/js/*/app.js -ErrorAction SilentlyContinue
$samples += Get-ChildItem samples/js/*/src/app.js -ErrorAction SilentlyContinue
foreach ($sample in $samples) {
$dir = if ($sample.Directory.Name -eq 'src') { $sample.Directory.Parent } else { $sample.Directory }
$name = $dir.Name
Write-Host "=== Checking: $name ==="
# Link SDK and install dependencies
Push-Location $dir.FullName
npm link foundry-local-sdk 2>$null
if (Test-Path "package.json") { npm install 2>$null }
Pop-Location
# Syntax check
node --check $sample.FullName 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Host "FAILED: $name"
$failed += $name
} else {
Write-Host "OK: $name"
}
}
if ($failed.Count -gt 0) {
Write-Error "Failed syntax checks: $($failed -join ', ')"
exit 1
}
# ── C# Samples ─────────────────────────────────────────────────────
cs-samples:
runs-on: ${{ matrix.platform }}-latest
strategy:
fail-fast: false
matrix:
platform: [windows, macos]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
clean: true
- name: Setup .NET SDK
uses: actions/setup-dotnet@v5
with:
dotnet-version: |
8.0.x
10.0.x
- name: Build SDK from source
shell: pwsh
run: |
# Build cross-platform SDK package
# Note: /p:TreatWarningsAsErrors=false avoids failing on SDK doc warnings
dotnet pack sdk/cs/src/Microsoft.AI.Foundry.Local.csproj `
-o local-packages `
/p:Version=0.9.0-dev `
/p:IsPacking=true `
/p:TreatWarningsAsErrors=false `
--configuration Release
# Build WinML SDK package (Windows only)
if ($IsWindows) {
dotnet pack sdk/cs/src/Microsoft.AI.Foundry.Local.csproj `
-o local-packages `
/p:Version=0.9.0-dev-20260324 `
/p:UseWinML=true `
/p:IsPacking=true `
/p:TreatWarningsAsErrors=false `
--configuration Release
}
Write-Host "Local packages:"
Get-ChildItem local-packages/*.nupkg | ForEach-Object { Write-Host " $($_.Name)" }
- name: Build C# samples
shell: pwsh
run: |
$failed = @()
$projects = Get-ChildItem samples/cs -Recurse -Filter "*.csproj"
foreach ($proj in $projects) {
$name = $proj.BaseName
Write-Host "`n=== Building: $name ==="
dotnet build $proj.FullName --configuration Debug 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Host "BUILD FAILED: $name"
$failed += $name
} else {
Write-Host "BUILD PASSED: $name"
}
}
if ($failed.Count -gt 0) {
Write-Error "Failed builds: $($failed -join ', ')"
exit 1
}
# ── Rust Samples ────────────────────────────────────────────────────
rust-samples:
runs-on: ${{ matrix.platform }}-latest
strategy:
fail-fast: false
matrix:
platform: [windows, macos]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
clean: true
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Cache cargo dependencies
uses: Swatinem/rust-cache@v2
with:
workspaces: samples/rust -> target
- name: Use crates.io directly
shell: pwsh
run: |
# Remove crates-io redirect in SDK (points to Azure Artifacts)
$configPath = "sdk/rust/.cargo/config.toml"
if (Test-Path $configPath) {
Remove-Item $configPath
Write-Host "Removed sdk/rust/.cargo/config.toml"
}
# Remove crates-io redirect in samples
$configPath = "samples/rust/.cargo/config.toml"
if (Test-Path $configPath) {
Remove-Item $configPath
Write-Host "Removed samples/rust/.cargo/config.toml"
}
- name: Build Rust samples workspace
working-directory: samples/rust
run: cargo build --workspace
- name: Clippy check
working-directory: samples/rust
run: cargo clippy --workspace -- -D warnings