# To reduce debug cost, steps are sorted differently on each platform, # so that a bug in any module will cause at least one platform to fail quickly. stages: - stage: lint jobs: - job: docs pool: vmImage: ubuntu-latest variables: PIP_CACHE_DIR: $(Pipeline.Workspace)/.pip steps: - task: UsePythonVersion@0 inputs: versionSpec: 3.8 displayName: Configure Python version - script: | sudo apt-get install -y pandoc sudo apt-get remove swig -y sudo apt-get install swig3.0 -y sudo ln -s /usr/bin/swig3.0 /usr/bin/swig displayName: Install apt packages - task: Cache@2 inputs: key: 'python | "$(Agent.OS)" | dependencies/*.txt' restoreKeys: | python | "$(Agent.OS)" python path: $(PIP_CACHE_DIR) displayName: Cache pip packages - script: | set -e python -m pip install -U -r dependencies/setup.txt python -m pip install -r dependencies/develop.txt python -m pip install -r dependencies/required.txt python -m pip install -r dependencies/recommended.txt python -m pip install -r dependencies/required_extra.txt displayName: Install requirements - script: | python test/vso_tools/interim_patch.py displayName: Apply patch - script: | cd docs python tools/chineselink.py check displayName: Translation up-to-date - script: | cd docs/en_US sphinx-build -M html . _build -W --keep-going -T displayName: Sphinx # TODO: rstcheck - job: python pool: vmImage: ubuntu-latest variables: PIP_CACHE_DIR: $(Pipeline.Workspace)/.pip steps: - task: UsePythonVersion@0 inputs: versionSpec: 3.8 displayName: Configure Python version - script: | sudo apt-get remove swig -y sudo apt-get install swig3.0 -y sudo ln -s /usr/bin/swig3.0 /usr/bin/swig displayName: Install apt packages - task: Cache@2 inputs: key: 'python | "$(Agent.OS)" | dependencies/*.txt' restoreKeys: | python | "$(Agent.OS)" python path: $(PIP_CACHE_DIR) displayName: Cache pip packages - script: | set -e python -m pip install -U -r dependencies/setup.txt python -m pip install -r dependencies/develop.txt python -m pip install -r dependencies/required.txt python -m pip install -r dependencies/recommended.txt python -m pip install -r dependencies/required_extra.txt python -m pip install "typing-extensions>=3.10" # pylint requires newer typing extension. Override requirements in tensorflow displayName: Install requirements - script: python -m pylint --rcfile pylintrc nni displayName: pylint - script: | set -e python -m flake8 nni --count --select=E9,F63,F72,F82 --show-source --statistics EXCLUDES=examples/trials/mnist-nas/*/mnist*.py,examples/trials/nas_cifar10/src/cifar10/general_child.py python -m flake8 examples --count --exclude=$EXCLUDES --select=E9,F63,F72,F82 --show-source --statistics displayName: flake8 - job: typescript pool: vmImage: ubuntu-latest variables: YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn steps: - task: NodeTool@0 inputs: versionSpec: 16.3.0 displayName: Configure Node.js version - task: Cache@2 inputs: key: 'yarn | "$(Agent.OS)" | ts/**/yarn.lock, !**/node_modules/**' restoreKeys: | yarn | "$(Agent.OS)" path: $(YARN_CACHE_FOLDER) displayName: Cache yarn packages - script: | set -e cd ts/nni_manager yarn yarn eslint displayName: ESLint (NNI Manager) - script: | set -e cd ts/webui yarn yarn eslint displayName: ESLint (WebUI) - stage: test jobs: - job: ubuntu_latest pool: vmImage: ubuntu-latest variables: PIP_CACHE_DIR: $(Pipeline.Workspace)/.pip YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn steps: - task: UsePythonVersion@0 inputs: versionSpec: 3.9 displayName: Configure Python version - task: NodeTool@0 inputs: versionSpec: 16.3.0 displayName: Configure Node.js version - script: | sudo apt-get install -y pandoc sudo apt-get remove swig -y sudo apt-get install swig3.0 -y sudo ln -s /usr/bin/swig3.0 /usr/bin/swig displayName: Install apt packages - task: Cache@2 inputs: key: 'python | "$(Agent.OS)" | latest | dependencies/*.txt' restoreKeys: | python | "$(Agent.OS)" python path: $(PIP_CACHE_DIR) displayName: Cache pip packages - task: Cache@2 inputs: key: 'yarn | "$(Agent.OS)" | latest | ts/**/yarn.lock, !**/node_modules/**' restoreKeys: | yarn | "$(Agent.OS)" path: $(YARN_CACHE_FOLDER) displayName: Cache yarn packages - script: | set -e python -m pip install -U -r dependencies/setup.txt python -m pip install -r dependencies/develop.txt echo "##vso[task.setvariable variable=PATH]${HOME}/.local/bin:${PATH}" displayName: Install Python tools - script: | python setup.py develop mkdir -p coverage displayName: Install NNI - script: | set -e python -m pip install -r dependencies/recommended.txt python -m pip install -e .[PPOTuner,DNGO] displayName: Install extra dependencies # Need del later - script: | python test/vso_tools/interim_patch.py displayName: Torch utils tensorboard interim patch - script: | set -e cd test python -m pytest ut --cov-config=.coveragerc \ --ignore=ut/compression/v1/test_pruners.py \ --ignore=ut/compression/v1/test_compressor_tf.py \ --ignore=ut/compression/v1/test_compressor_torch.py \ --ignore=ut/compression/v1/test_model_speedup.py python -m pytest ut/compression/v1/test_pruners.py --cov-config=.coveragerc --cov-append python -m pytest ut/compression/v1/test_compressor_tf.py --cov-config=.coveragerc --cov-append python -m pytest ut/compression/v1/test_compressor_torch.py --cov-config=.coveragerc --cov-append python -m pytest ut/compression/v1/test_model_speedup.py --cov-config=.coveragerc --cov-append cp coverage.xml ../coverage/python.xml displayName: Python unit test - script: | set -e cd ts/nni_manager yarn test cp coverage/cobertura-coverage.xml ../../coverage/typescript.xml displayName: TypeScript unit test - task: PublishTestResults@2 condition: succeededOrFailed() inputs: testResultsFiles: '$(System.DefaultWorkingDirectory)/**/test-*.xml' testRunTitle: 'Publish test results for Python $(python.version)' displayName: Publish test results - task: PublishCodeCoverageResults@1 inputs: codeCoverageTool: Cobertura summaryFileLocation: coverage/* displayName: Publish code coverage results - script: | cd test python nni_test/nnitest/run_tests.py --config config/pr_tests.yml displayName: Simple integration test - job: ubuntu_legacy pool: vmImage: ubuntu-18.04 variables: PIP_CACHE_DIR: $(Pipeline.Workspace)/.pip YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn steps: - task: UsePythonVersion@0 inputs: versionSpec: 3.6 displayName: Configure Python version - task: NodeTool@0 inputs: versionSpec: 16.3.0 displayName: Configure Node.js version - script: | sudo apt-get install -y pandoc sudo apt-get remove swig -y sudo apt-get install swig3.0 -y sudo ln -s /usr/bin/swig3.0 /usr/bin/swig displayName: Install apt packages - task: Cache@2 inputs: key: 'python | "$(Agent.OS)" | legacy | dependencies/*.txt' restoreKeys: | python | "$(Agent.OS)" python path: $(PIP_CACHE_DIR) displayName: Cache pip packages - task: Cache@2 inputs: key: 'yarn | "$(Agent.OS)" | legacy | ts/**/yarn.lock, !**/node_modules/**' restoreKeys: | yarn | "$(Agent.OS)" path: $(YARN_CACHE_FOLDER) displayName: Cache yarn packages - script: | set -e python -m pip install -U -r dependencies/setup.txt python -m pip install -r dependencies/develop.txt echo "##vso[task.setvariable variable=PATH]${HOME}/.local/bin:${PATH}" displayName: Install Python tools - script: | python setup.py develop displayName: Install NNI - script: | set -e python -m pip install -r dependencies/recommended_legacy.txt python -m pip install -e .[SMAC,BOHB,PPOTuner,DNGO] displayName: Install extra dependencies # Need del later - script: | set -e python test/vso_tools/interim_patch.py displayName: Torch utils tensorboard interim patch - script: | cd test python nni_test/nnitest/run_tests.py --config config/pr_tests.yml displayName: Simple integration test - script: | cd test python -m pytest ut --ignore=ut/retiarii/test_convert_basic.py \ --ignore=ut/retiarii/test_convert_operators.py \ --ignore=ut/retiarii/test_convert_pytorch.py displayName: Python unit test - script: | set -e cd ts/nni_manager yarn test displayName: TypeScript unit test - job: macos pool: vmImage: macOS-10.15 variables: PIP_CACHE_DIR: $(Pipeline.Workspace)/.pip YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn timeoutInMinutes: 90 # macos test need extra time steps: - task: UsePythonVersion@0 inputs: versionSpec: 3.8 displayName: Configure Python version - task: NodeTool@0 inputs: versionSpec: 16.3.0 displayName: Configure Node.js version - script: | brew install swig@3 rm -f /usr/local/bin/swig ln -s /usr/local/opt/swig\@3/bin/swig /usr/local/bin/swig displayName: Install brew packages - task: Cache@2 inputs: key: 'python | "$(Agent.OS)" | dependencies/*.txt' restoreKeys: | python | "$(Agent.OS)" python path: $(PIP_CACHE_DIR) displayName: Cache pip packages - task: Cache@2 inputs: key: 'yarn | "$(Agent.OS)" | ts/**/yarn.lock, !**/node_modules/**' restoreKeys: | yarn | "$(Agent.OS)" path: $(YARN_CACHE_FOLDER) displayName: Cache yarn packages - script: | set -e python -m pip install -U -r dependencies/setup.txt python -m pip install -r dependencies/develop.txt echo "##vso[task.setvariable variable=PATH]${PATH}:${HOME}/.local/bin" displayName: Install Python tools - script: | python setup.py develop displayName: Install NNI - script: | set -e export CI=true (cd ts/nni_manager && yarn test --exclude test/core/nnimanager.test.ts) displayName: TypeScript unit test - script: | set -e python -m pip install -r dependencies/recommended.txt python -m pip install -e .[SMAC,BOHB,PPOTuner,DNGO] displayName: Install extra dependencies # Need del later - script: | set -e python test/vso_tools/interim_patch.py displayName: Torch utils tensorboard interim patch - script: | cd test python -m pytest ut displayName: Python unit test - script: | cd test python nni_test/nnitest/run_tests.py --config config/pr_tests.yml displayName: Simple integration test - job: windows pool: vmImage: windows-2019 variables: PIP_CACHE_DIR: $(Pipeline.Workspace)/.pip YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn timeoutInMinutes: 120 # windows test need extra time steps: - task: UsePythonVersion@0 inputs: versionSpec: 3.8 displayName: Configure Python version - task: NodeTool@0 inputs: versionSpec: 16.3.0 displayName: Configure Node.js version - task: Cache@2 inputs: key: 'python | "$(Agent.OS)" | dependencies/*.txt' restoreKeys: | python | "$(Agent.OS)" python path: $(PIP_CACHE_DIR) displayName: Cache pip packages - task: Cache@2 inputs: key: 'yarn | "$(Agent.OS)" | ts/**/yarn.lock, !**/node_modules/**' restoreKeys: | yarn | "$(Agent.OS)" path: $(YARN_CACHE_FOLDER) displayName: Cache yarn packages - script: | set -e python -m pip install -U -r dependencies/setup.txt python -m pip install -r dependencies/develop.txt displayName: Install Python tools - script: | python setup.py develop --no-user displayName: Install NNI - script: | python -m pip install -r dependencies/recommended.txt python -m pip install -e .[DNGO] displayName: Install extra dependencies # Need del later - script: | set -e python test/vso_tools/interim_patch.py displayName: Torch utils tensorboard interim patch - script: | cd test python -m pytest ut displayName: Python unit test - script: | cd ts/nni_manager yarn test displayName: TypeScript unit test - script: | cd test python nni_test/nnitest/run_tests.py --config config/pr_tests.yml displayName: Simple integration test trigger: branches: exclude: [ l10n_master ]