mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-06-01 23:30:35 +00:00
### Description use Chrome in CI for npm tests. Previously we use Edge, however it sometimes crashes with reasons not yet identified.
227 lines
8.6 KiB
YAML
227 lines
8.6 KiB
YAML
parameters:
|
|
- name: CommitOverride
|
|
type: boolean
|
|
default: false
|
|
|
|
- name: BuildConfig
|
|
type: string
|
|
default: 'Debug'
|
|
|
|
- name: NpmPackagingMode
|
|
type: string
|
|
default: 'dev'
|
|
|
|
- name: PoolName
|
|
type: string
|
|
default: 'onnxruntime-Win-CPU-2022'
|
|
|
|
- name: PackageName
|
|
displayName: 'Package name'
|
|
type: string
|
|
default: 'NPM_packages'
|
|
|
|
- name: RunWebGpuTests
|
|
type: boolean
|
|
default: false
|
|
|
|
jobs:
|
|
- job: build_onnxruntime_web
|
|
pool: ${{ parameters.PoolName }}
|
|
|
|
variables:
|
|
webgpuCommandlineExtraFlags: '--chromium-flags=--ignore-gpu-blocklist --chromium-flags=--gpu-vendor-id=0x10de'
|
|
runCodesignValidationInjection: false
|
|
timeoutInMinutes: 60
|
|
workspace:
|
|
clean: all
|
|
steps:
|
|
- task: mspremier.PostBuildCleanup.PostBuildCleanup-task.PostBuildCleanup@3
|
|
displayName: 'Clean Agent Directories'
|
|
condition: always()
|
|
- checkout: self
|
|
submodules: false
|
|
- task: DownloadPipelineArtifact@2
|
|
inputs:
|
|
artifact: '__commit'
|
|
path: $(Pipeline.Workspace)
|
|
displayName: 'Get commit SHA'
|
|
condition: eq('${{ parameters.CommitOverride }}', 'true')
|
|
- script: |
|
|
set /p __commit__=<$(Pipeline.Workspace)\__commit.txt
|
|
git fetch origin +%__commit__%:refs/remotes/origin/%__commit__%
|
|
git checkout --force %__commit__%
|
|
workingDirectory: '$(Build.SourcesDirectory)'
|
|
displayName: 'Read commit SHA and checkout'
|
|
condition: eq('${{ parameters.CommitOverride }}', 'true')
|
|
- script: |
|
|
echo.$(Build.SourceVersion)>$(Pipeline.Workspace)\__commit.txt
|
|
workingDirectory: '$(Build.SourcesDirectory)'
|
|
displayName: 'Write commit SHA to __commit.txt'
|
|
condition: ne('${{ parameters.CommitOverride }}', 'true')
|
|
- script: |
|
|
git submodule sync -- cmake\external\onnx
|
|
git submodule update --init -- cmake\external\onnx
|
|
workingDirectory: '$(Build.SourcesDirectory)'
|
|
displayName: 'Checkout submodule onnx'
|
|
- script: |
|
|
echo.>>.gitattributes
|
|
echo /js/** text=auto eol=lf>>.gitattributes
|
|
rd /s /q js
|
|
git checkout -- js/**
|
|
git checkout -- .gitattributes
|
|
workingDirectory: '$(Build.SourcesDirectory)'
|
|
displayName: 'Testing: force EOL to lf on windows for /js/**'
|
|
- task: NodeTool@0
|
|
inputs:
|
|
versionSpec: '18.x'
|
|
- task: DownloadPipelineArtifact@2
|
|
inputs:
|
|
patterns: '${{ parameters.BuildConfig }}_*/**/*'
|
|
path: $(Pipeline.Workspace)\artifacts
|
|
displayName: 'Download WebAssembly artifacts'
|
|
- task: CopyFiles@2
|
|
inputs:
|
|
sourceFolder: $(Pipeline.Workspace)\artifacts
|
|
contents: |
|
|
**\*.wasm
|
|
targetFolder: $(Build.SourcesDirectory)\js\web\dist
|
|
flattenFolders: true
|
|
displayName: 'Binplace dist files'
|
|
- task: CopyFiles@2
|
|
inputs:
|
|
sourceFolder: $(Pipeline.Workspace)\artifacts
|
|
contents: |
|
|
**\*.js
|
|
targetFolder: $(Build.SourcesDirectory)\js\web\lib\wasm\binding
|
|
flattenFolders: true
|
|
displayName: 'Binplace js files'
|
|
- script: |
|
|
npm i -g puppeteer
|
|
workingDirectory: '$(Build.SourcesDirectory)'
|
|
displayName: 'Use puppeteer to prepare Chrome for tests'
|
|
- script: |
|
|
FOR /F "tokens=* USEBACKQ" %%F IN (`where /r %HOMEDRIVE%%HOMEPATH%\.cache\puppeteer chrome.exe`) DO (
|
|
SET var=%%F
|
|
ECHO found chrome.exe: %%F
|
|
)
|
|
ECHO ##vso[task.setvariable variable=CHROME_BIN;]%var%
|
|
workingDirectory: '$(Build.SourcesDirectory)'
|
|
displayName: 'Set CHROME_BIN'
|
|
- script: |
|
|
npm ci
|
|
workingDirectory: '$(Build.SourcesDirectory)\js'
|
|
displayName: 'npm ci /js/'
|
|
- script: |
|
|
npm ci
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\common'
|
|
displayName: 'npm ci /js/common/'
|
|
- script: |
|
|
npm test
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\common'
|
|
displayName: 'run onnxruntime-common tests'
|
|
- script: |
|
|
npm ci
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'npm ci /js/web/'
|
|
- script: |
|
|
npm run prebuild
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'run TypeScript type check in /js/web/'
|
|
- script: |
|
|
npm run lint
|
|
workingDirectory: '$(Build.SourcesDirectory)\js'
|
|
displayName: 'run ESLint'
|
|
- script: |
|
|
npm run format
|
|
workingDirectory: '$(Build.SourcesDirectory)\js'
|
|
displayName: 'Clang-format'
|
|
- script: |
|
|
node -e "a=require('child_process').execSync('git diff --name-only').toString();if(a)throw new Error('Following source files are not formatted: (did you run \"npm run format\"?)\n'+a)"
|
|
workingDirectory: '$(Build.SourcesDirectory)\js'
|
|
displayName: 'Check unformatted files'
|
|
- script: |
|
|
npm run build:doc
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'Generating documents'
|
|
- script: |
|
|
node -e "a=require('child_process').execSync('git diff --name-only').toString();if(a)throw new Error('Following documents are not up-to-date: (did you run \"npm run build:doc\"?)\n'+a)"
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'Check out of dated documents'
|
|
- task: Cache@2
|
|
inputs:
|
|
key: onnxtestdata | $(Build.SourcesDirectory)\js\scripts\prepare-onnx-node-tests.ts
|
|
restoreKeys: |
|
|
onnxtestdata | $(Build.SourcesDirectory)\js\scripts\prepare-onnx-node-tests.ts
|
|
path: $(Build.SourcesDirectory)/js/test/
|
|
cacheHitVar: CACHE_RESTORED
|
|
displayName: 'Cache ONNX node test data'
|
|
- task: Bash@3
|
|
inputs:
|
|
targetType: 'inline'
|
|
script: find "$(Build.SourcesDirectory)/js/test/" -type f
|
|
condition: and(not(canceled()), eq(variables.CACHE_RESTORED, 'true'))
|
|
displayName: 'List ONNX node test data'
|
|
- task: PowerShell@2
|
|
inputs:
|
|
filePath: '$(Build.SourcesDirectory)\tools\ci_build\github\js\pack-npm-packages.ps1'
|
|
arguments: '$(NpmPackagingMode) $(Build.SourcesDirectory) web'
|
|
workingDirectory: $(Build.BinariesDirectory)
|
|
errorActionPreference: stop
|
|
displayName: 'Pack NPM packages'
|
|
- script: |
|
|
npm test -- -e=chrome -b=webgl,wasm,xnnpack
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'Run ort-web tests (wasm,webgl,xnnpack backend)'
|
|
condition: eq('${{ parameters.RunWebGpuTests }}', 'false')
|
|
- script: |
|
|
npm test -- -e=chrome -b=webgl,wasm,xnnpack,webgpu $(webgpuCommandlineExtraFlags)
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'Run ort-web tests (ALL backends)'
|
|
condition: eq('${{ parameters.RunWebGpuTests }}', 'true')
|
|
- script: |
|
|
npm test -- suite1 -e=chrome -b=webgpu --io-binding=gpu-tensor $(webgpuCommandlineExtraFlags)
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'Run ort-web tests (Suite1, webgpu, IO-binding=gpu-tensor)'
|
|
condition: eq('${{ parameters.RunWebGpuTests }}', 'true')
|
|
- script: |
|
|
npm test -- suite1 -e=chrome -b=webgpu --io-binding=gpu-location $(webgpuCommandlineExtraFlags)
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'Run ort-web tests (Suite1, webgpu, IO-binding=gpu-location)'
|
|
condition: eq('${{ parameters.RunWebGpuTests }}', 'true')
|
|
- script: |
|
|
npm test -- --webgl-texture-pack-mode -b=webgl -e=chrome
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'Run ort-web tests - WebGL: packed mode'
|
|
- script: |
|
|
npm test -- --wasm-enable-proxy -b=wasm -e=chrome
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'Run ort-web tests - WebAssembly: proxy'
|
|
condition: and(succeeded(), eq('${{ parameters.BuildConfig }}', 'Release'))
|
|
- script: |
|
|
npm run test:e2e -- --browser=Chrome_default
|
|
workingDirectory: '$(Build.SourcesDirectory)\js\web'
|
|
displayName: 'E2E package consuming test'
|
|
condition: and(succeeded(), eq('${{ parameters.BuildConfig }}', 'Release'))
|
|
- task: CopyFiles@2
|
|
inputs:
|
|
sourceFolder: $(Build.SourcesDirectory)\js\common
|
|
contents: onnxruntime-common-*.tgz
|
|
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
displayName: 'Create Artifacts (onnxruntime-common)'
|
|
condition: and(succeeded(), eq('${{ parameters.BuildConfig }}', 'Release'))
|
|
- task: CopyFiles@2
|
|
inputs:
|
|
sourceFolder: $(Build.SourcesDirectory)\js\web
|
|
contents: onnxruntime-web-*.tgz
|
|
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
displayName: 'Create Artifacts (onnxruntime-web)'
|
|
condition: and(succeeded(), eq('${{ parameters.BuildConfig }}', 'Release'))
|
|
- task: PublishPipelineArtifact@0
|
|
inputs:
|
|
artifactName: '${{ parameters.PackageName }}'
|
|
targetPath: '$(Build.ArtifactStagingDirectory)'
|
|
displayName: 'Publish Pipeline Artifact'
|
|
condition: and(succeeded(), eq('${{ parameters.BuildConfig }}', 'Release'))
|
|
- template: component-governance-component-detection-steps.yml
|
|
parameters :
|
|
condition : 'succeeded'
|