Refactoring min-dep tests #9
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: tests | |
| on: | |
| # quick tests for pull requests and the releasing branches | |
| push: | |
| branches: | |
| - dev | |
| - main | |
| - releasing/* | |
| pull_request: | |
| head_ref-ignore: | |
| - dev | |
| concurrency: | |
| # automatically cancel the previously triggered workflows when there's a newer version | |
| group: cicd-tests-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| # These jobs run the CICD tests, type checking, and testing packaging and documentation generation. These use the | |
| # minimum supported versions of Python and PyTorch in many places hard-coded as literals, so when support is dropped | |
| # for a version it is important to go through all jobs and check the versions they use are correct. | |
| jobs: | |
| static-checks: # Perform static type and other checks using runtests.sh | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| opt: ["codeformat", "pytype", "mypy"] | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.10 | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.10' | |
| - name: cache weekly timestamp | |
| id: pip-cache | |
| run: | | |
| echo "datew=$(date '+%Y-%V')" >> $GITHUB_OUTPUT | |
| - name: cache for pip | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: ~/.cache/pip | |
| key: ${{ runner.os }}-pip-${{ steps.pip-cache.outputs.datew }} | |
| - name: Install dependencies | |
| run: | | |
| find /opt/hostedtoolcache/* -maxdepth 0 ! -name 'Python' -exec rm -rf {} \; | |
| python -m pip install --upgrade pip wheel | |
| python -m pip install -r requirements-dev.txt | |
| - name: Lint and type check with "./runtests.sh --build --${{ matrix.opt }}" | |
| run: | | |
| # clean up temporary files | |
| $(pwd)/runtests.sh --build --clean | |
| # Github actions have multiple cores, so parallelize pytype | |
| $(pwd)/runtests.sh --build --${{ matrix.opt }} -j $(nproc --all) | |
| min-dep: # Test with minumum dependencies installed for different OS, Python, and PyTorch combinations | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [windows-latest, macOS-latest, ubuntu-latest] | |
| python-version: ['3.10'] | |
| pytorch-version: ['2.6.0'] | |
| include: | |
| # Test Python versions under Ubuntu with lowest PyTorch version supported | |
| - os: ubuntu-latest | |
| pytorch-version: '2.6.0' | |
| python-version: '3.11' | |
| - os: ubuntu-latest | |
| pytorch-version: '2.6.0' | |
| python-version: '3.12' | |
| - os: ubuntu-latest | |
| pytorch-version: '2.6.0' | |
| python-version: '3.13' | |
| # Test PyTorch versions under Ubuntu with lowest Python version supported | |
| - os: ubuntu-latest | |
| python-version: '3.10' | |
| pytorch-version: '2.7.1' | |
| - os: ubuntu-latest | |
| python-version: '3.10' | |
| pytorch-version: '2.8.0' | |
| - os: ubuntu-latest | |
| python-version: '3.10' | |
| pytorch-version: '2.9.0' | |
| timeout-minutes: 40 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Prepare pip wheel | |
| run: | | |
| which python | |
| python -m pip install --upgrade pip wheel | |
| python -m pip install --user more-itertools>=8.0 | |
| - name: cache weekly timestamp | |
| id: pip-cache | |
| run: | | |
| echo "datew=$(date '+%Y-%V')" >> $GITHUB_OUTPUT | |
| echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT | |
| shell: bash | |
| - name: cache for pip | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: ${{ steps.pip-cache.outputs.dir }} | |
| key: ${{ matrix.os }}-latest-pip-${{ steps.pip-cache.outputs.datew }} | |
| - name: Install the minimum dependencies | |
| run: | | |
| # min. requirements | |
| python -m pip install torch==${{ matrix.pytorch-version }} | |
| python -m pip install -r requirements-min.txt | |
| python -m pip list | |
| BUILD_MONAI=0 python setup.py develop # no compile of extensions | |
| shell: bash | |
| - if: matrix.os == 'linux-gpu-runner' | |
| name: Print GPU Info | |
| run: | | |
| nvidia-smi | |
| python -c 'import torch; print(torch.rand(2,2).to("cuda:0"))' | |
| shell: bash | |
| - name: Run quick tests | |
| run: | | |
| python -c 'import torch; print(torch.__version__); print(torch.rand(5,3))' | |
| python -c "import monai; monai.config.print_config()" | |
| # ./runtests.sh --min | |
| shell: bash | |
| env: | |
| QUICKTEST: True | |
| NGC_API_KEY: ${{ secrets.NGC_API_KEY }} | |
| NGC_ORG: ${{ secrets.NGC_ORG }} | |
| NGC_TEAM: ${{ secrets.NGC_TEAM }} | |
| full-dep: # Test with full dependencies installed for different OS runners | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [windows-latest, macOS-latest, ubuntu-latest] | |
| timeout-minutes: 120 | |
| steps: | |
| - if: runner.os == 'windows' | |
| name: Config pagefile (Windows only) | |
| uses: al-cheb/configure-pagefile-action@v1.4 | |
| with: | |
| minimum-size: 8GB | |
| maximum-size: 16GB | |
| disk-root: "D:" | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.10 | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.10' | |
| - name: Prepare pip wheel | |
| run: | | |
| which python | |
| python -m pip install --upgrade pip wheel | |
| python -m pip install --user more-itertools>=8.0 | |
| - name: cache weekly timestamp | |
| id: pip-cache | |
| run: | | |
| echo "datew=$(date '+%Y-%V')" >> $GITHUB_OUTPUT | |
| echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT | |
| shell: bash | |
| - name: cache for pip | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: ${{ steps.pip-cache.outputs.dir }} | |
| key: ${{ matrix.os }}-latest-pip-${{ steps.pip-cache.outputs.datew }} | |
| - if: runner.os == 'windows' | |
| name: Install torch cpu from pytorch.org (Windows only) | |
| run: | | |
| python -m pip install torch==2.5.1 torchvision==0.20.1+cpu --index-url https://download.pytorch.org/whl/cpu | |
| - if: runner.os == 'Linux' | |
| name: Install itk pre-release (Linux only) | |
| run: | | |
| python -m pip install --pre -U itk | |
| find /opt/hostedtoolcache/* -maxdepth 0 ! -name 'Python' -exec rm -rf {} \; | |
| - name: Install the complete dependencies | |
| run: | | |
| python -m pip install --user --upgrade pip wheel | |
| python -m pip install torch==2.5.1 torchvision==0.20.1 | |
| cat "requirements-dev.txt" | |
| python -m pip install -r requirements-dev.txt | |
| python -m pip list | |
| python setup.py develop # test no compile installation | |
| shell: bash | |
| - name: Run compiled (${{ runner.os }}) | |
| run: | | |
| python setup.py develop --uninstall | |
| BUILD_MONAI=1 python setup.py develop # compile the cpp extensions | |
| shell: bash | |
| - name: Run quick tests | |
| run: | | |
| python -c 'import torch; print(torch.__version__); print(torch.rand(5,3))' | |
| python -c "import monai; monai.config.print_config()" | |
| # python -m unittest -v | |
| env: | |
| QUICKTEST: True | |
| PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python # https://github.com/Project-MONAI/MONAI/issues/4354 | |
| packaging: # Test package generation | |
| runs-on: ubuntu-latest | |
| env: | |
| QUICKTEST: True | |
| shell: bash | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set up Python 3.10 | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.10' | |
| - name: cache weekly timestamp | |
| id: pip-cache | |
| run: | | |
| echo "datew=$(date '+%Y-%V')" >> $GITHUB_OUTPUT | |
| - name: cache for pip | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| ~/.cache/pip | |
| ~/.cache/torch | |
| key: ${{ runner.os }}-pip-${{ steps.pip-cache.outputs.datew }} | |
| - name: Install dependencies | |
| run: | | |
| find /opt/hostedtoolcache/* -maxdepth 0 ! -name 'Python' -exec rm -rf {} \; | |
| python -m pip install --user --upgrade pip setuptools wheel twine packaging | |
| # install the latest pytorch for testing | |
| # however, "pip install monai*.tar.gz" will build cpp/cuda with an isolated | |
| # fresh torch installation according to pyproject.toml | |
| python -m pip install torch>=2.5.1 torchvision | |
| - name: Check packages | |
| run: | | |
| pip uninstall monai | |
| pip list | grep -iv monai | |
| git fetch --depth=1 origin +refs/tags/*:refs/tags/* | |
| set -e | |
| # build tar.gz and wheel | |
| python setup.py check -m -s | |
| python setup.py sdist bdist_wheel | |
| python -m twine check dist/* | |
| - run: echo "pwd=$PWD" >> $GITHUB_OUTPUT | |
| id: root | |
| - run: echo "tmp_dir=$(mktemp -d)" >> $GITHUB_OUTPUT | |
| id: mktemp | |
| - name: Move packages | |
| run: | | |
| printf ${{ steps.root.outputs.pwd }} | |
| printf ${{ steps.mktemp.outputs.tmp_dir }} | |
| # move packages to a temp dir | |
| cp dist/monai* "${{ steps.mktemp.outputs.tmp_dir }}" | |
| rm -r build dist monai.egg-info | |
| cd "${{ steps.mktemp.outputs.tmp_dir }}" | |
| ls -al | |
| - name: Install wheel file | |
| working-directory: ${{ steps.mktemp.outputs.tmp_dir }} | |
| run: | | |
| # install from wheel | |
| python -m pip install monai*.whl | |
| python -c 'import monai; monai.config.print_config()' 2>&1 | grep -iv "unknown" | |
| python -c 'import monai; print(monai.__file__)' | |
| python -m pip uninstall -y monai | |
| rm monai*.whl | |
| - name: Install source archive | |
| working-directory: ${{ steps.mktemp.outputs.tmp_dir }} | |
| run: | | |
| # install from tar.gz | |
| name=$(ls *.tar.gz | head -n1) | |
| echo $name | |
| python -m pip install $name[all] | |
| python -c 'import monai; monai.config.print_config()' 2>&1 | grep -iv "unknown" | |
| python -c 'import monai; print(monai.__file__)' | |
| - name: Quick test | |
| working-directory: ${{ steps.mktemp.outputs.tmp_dir }} | |
| run: | | |
| # run min tests | |
| cp ${{ steps.root.outputs.pwd }}/requirements*.txt . | |
| cp -r ${{ steps.root.outputs.pwd }}/tests . | |
| ls -al | |
| python -m pip install -r requirements-dev.txt | |
| python -m unittest -v | |
| env: | |
| PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python # https://github.com/Project-MONAI/MONAI/issues/4354 | |
| build-docs: # Test building documentation | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python 3.10 | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.10' | |
| - name: cache weekly timestamp | |
| id: pip-cache | |
| run: | | |
| echo "datew=$(date '+%Y-%V')" >> $GITHUB_OUTPUT | |
| - name: cache for pip | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| ~/.cache/pip | |
| ~/.cache/torch | |
| key: ${{ runner.os }}-pip-${{ steps.pip-cache.outputs.datew }} | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip wheel | |
| python -m pip install -r docs/requirements.txt | |
| - name: Make html | |
| run: | | |
| cd docs/ | |
| make clean | |
| make html 2>&1 | tee tmp_log | |
| if [[ $(grep -c "ERROR:" tmp_log) != 0 ]]; then echo "Found errors:"; grep "ERROR:" tmp_log; exit 1; fi | |
| sed '/WARNING.*pip/d' tmp_log > tmp_log1; mv tmp_log1 tmp_log # monai#7133 | |
| if [[ $(grep -c "WARNING:" tmp_log) != 0 ]]; then echo "Found warnings:"; grep "WARNING:" tmp_log; exit 1; fi | |
| shell: bash |