Merge pull request #187 from simmsa/fix_malformed_docstrings #433
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: MHKiT-MATLAB Windows Unit Tests | |
| # Only run tests when MATLAB files or this workflow file changes | |
| on: | |
| push: | |
| branches: [ master, develop ] | |
| paths: | |
| - 'mhkit/**/*.m' | |
| - 'examples/**/*.m' | |
| - '.github/workflows/windows_unit_tests.yml' | |
| pull_request: | |
| branches: [ master, develop ] | |
| paths: | |
| - 'mhkit/**/*.m' | |
| - 'examples/**/*.m' | |
| - '.github/workflows/windows_unit_tests.yml' | |
| jobs: | |
| cache_population: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [windows-latest] | |
| python-version: ["3.11"] | |
| matlab-version: [R2023b] | |
| runs-on: ${{ matrix.os }} | |
| env: | |
| mhkit-python-dir: "MHKiT-Python" | |
| MHKIT_PYTHON_VERSION: '0.9.0' | |
| steps: | |
| - name: Install/Setup Miniconda | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| miniconda-version: latest | |
| auto-update-conda: true | |
| python-version: ${{ matrix.python-version }} | |
| activate-environment: mhkit_conda_env | |
| channels: conda-forge,defaults | |
| # This is necessary to fix any issues with netcdf4 and hdf5 headers | |
| - name: Conda install mhkit | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| conda install mhkit==$MHKIT_PYTHON_VERSION | |
| - name: Check out MHKiT-MATLAB | |
| uses: actions/checkout@v4 | |
| - name: pip install mhkit-python-utils module from source | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| pip install -e . | |
| - name: List Installed Python Packages using Conda | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| conda list | |
| - name: List Installed Python Packages using pip | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| pip list | |
| - name: Check out MHKiT-MATLAB | |
| uses: actions/checkout@v4 | |
| # - name: Pin scipy version | |
| # shell: bash -l {0} | |
| # run: | | |
| # conda activate mhkit_conda_env | |
| # pip uninstall -y scipy | |
| # pip install scipy==1.10.1 | |
| # Create the cache and add a dummy file | |
| # The dummy file ensures that the artifact download | |
| - name: Setup mhkit_webread_cache | |
| shell: bash -l {0} | |
| run: | | |
| mkdir mhkit_webread_cache | |
| touch mhkit_webread_cache/test.txt | |
| echo "Hello World" > mhkit_webread_cache/test.txt | |
| - name: Set up MATLAB | |
| uses: matlab-actions/setup-matlab@v2 | |
| with: | |
| release: ${{ matrix.matlab-version }} | |
| - name: Set PYBIND11 GIL workaround | |
| # if: ${{ matrix.matlab-version == 'R2025a' }} | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| export PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF=1 | |
| echo "PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF=1" >> $GITHUB_ENV | |
| - name: Configure MATLAB pyenv Version and ExecutionMode | |
| if: ${{ matrix.os == 'windows-latest' }} | |
| shell: pwsh | |
| run: > | |
| "pyenv(Version='{0}', ExecutionMode='OutOfProcess')" -f (python -c "import sys; print(sys.executable)") | Out-File -FilePath run.m | |
| - name: Check Python System Path | |
| shell: bash -l {0} | |
| run: | | |
| echo "py.sys.path" >> run.m | |
| - name: Add MATLAB test commands | |
| shell: bash | |
| run: echo "version, | |
| addpath(genpath('mhkit')), | |
| import matlab.unittest.TestSuite, | |
| import matlab.unittest.TestRunner, | |
| testFolder = ['mhkit' filesep 'tests'], | |
| suite = TestSuite.fromFolder(testFolder), | |
| runner = TestRunner.withTextOutput, | |
| results = runner.run(suite), | |
| assertSuccess(results)" >> run.m | |
| - name: Output Run.m | |
| shell: bash | |
| run: cat run.m | |
| - name: Run MHKiT-MATLAB Unit Tests | |
| uses: matlab-actions/run-command@v2 | |
| with: | |
| command: run | |
| startup-options: -noFigureWindows | |
| - name: Save mhkit_webread_cache directory as an artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| # GitHub Action "Name" of artifact | |
| name: mhkit_webread_cache | |
| # Filesystem path of directory | |
| path: mhkit_webread_cache | |
| main: | |
| needs: cache_population | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [windows-latest] | |
| python-version: ["3.10", 3.11, 3.12] | |
| # matlab-version: [R2022b, R2023a, R2023b, R2024a, R2024b] | |
| matlab-version: [R2023a, R2023b, R2024a, R2024b] | |
| mhkit-python-version: ["0.9.0"] | |
| exclude: | |
| # Cache population job | |
| - matlab-version: R2023b | |
| python-version: "3.10" | |
| # - matlab-version: R2023b | |
| # python-version: 3.8 | |
| # Python 3.12 + MATLAB incompatability | |
| - matlab-version: R2024a | |
| python-version: 3.12 | |
| - matlab-version: R2023b | |
| python-version: 3.12 | |
| - matlab-version: R2023a | |
| python-version: 3.12 | |
| - matlab-version: R2022b | |
| python-version: 3.12 | |
| # Python 3.11 + MATLAB incompatability | |
| - matlab-version: R2023a | |
| python-version: 3.11 | |
| - matlab-version: R2022b | |
| python-version: 3.11 | |
| # Failing Job | |
| # Python Error: ImportError: DLL load failed while importing pyexpat: The operating system cannot run %1 | |
| - matlab-version: R2023a | |
| python-version: "3.10" | |
| runs-on: ${{ matrix.os }} | |
| env: | |
| mhkit-python-dir: "MHKiT-Python" | |
| MHKIT_PYTHON_VERSION: ${{ matrix.mhkit-python-version }} | |
| steps: | |
| - name: Install/Setup Miniconda | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| miniconda-version: latest | |
| auto-update-conda: true | |
| python-version: ${{ matrix.python-version }} | |
| activate-environment: mhkit_conda_env | |
| channels: conda-forge,defaults | |
| # This is necessary to fix any issues with netcdf4 and hdf5 headers | |
| - name: Conda install mhkit | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| conda install mhkit==$MHKIT_PYTHON_VERSION | |
| - name: Output python executable | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| python -c "import sys; print(sys.executable)" | |
| - name: Print Python Version | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| python --version | |
| - name: Check out MHKiT-MATLAB | |
| uses: actions/checkout@v4 | |
| - name: pip install mhkit-python-utils module from source | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| pip3 install -e . | |
| # - name: Pin scipy version | |
| # shell: bash -l {0} | |
| # run: | | |
| # conda activate mhkit_conda_env | |
| # pip uninstall -y scipy | |
| # pip install scipy==1.10.1 | |
| # | |
| # Some tests fail with: | |
| # Python Error: ImportError: DLL load failed while importing pyexpat: The operating system cannot run %1. | |
| # One potential fix is to install expat and lxml | |
| - name: Install Windows XML dependencies | |
| if: ${{ matrix.os == 'windows-latest' }} | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| # Simple single package install to avoid solver issues | |
| conda install expat -y | |
| # Alternative: use pip for XML parsing | |
| pip install lxml | |
| - name: List installed pip modules | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| pip3 freeze | |
| - name: Print MHKiT-Python Version | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| python -c "import mhkit; print(mhkit.__version__)" | |
| - name: Verify MHKiT-Python Operation | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| python -c "import mhkit; [ED, AP] = mhkit.river.performance.circular(30); print(ED); print(AP);" | |
| - name: Download mhkit_webread_cache artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: mhkit_webread_cache | |
| path: mhkit_webread_cache | |
| - name: Display structure mhkit_webread_cache | |
| run: ls -R | |
| working-directory: . | |
| - name: Set up MATLAB | |
| uses: matlab-actions/setup-matlab@v2 | |
| with: | |
| release: ${{ matrix.matlab-version }} | |
| - name: Set PYBIND11 GIL workaround | |
| # if: ${{ matrix.matlab-version == 'R2025a' }} | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| export PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF=1 | |
| echo "PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF=1" >> $GITHUB_ENV | |
| - name: Add Python Dir to Path | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| printf "getenv('path')\nsetenv('path', ['%s;', getenv('path')])\ngetenv('path')\n" $(python -c "import sys; import os; print(os.path.dirname(sys.executable))") >> run.m | |
| # OutOfProcess works reliably on linux, macos, and windows | |
| - name: Configure MATLAB pyenv Version and ExecutionMode | |
| shell: bash -l {0} | |
| run: | | |
| conda activate mhkit_conda_env | |
| printf "pyenv(Version='%s', ExecutionMode='OutOfProcess')\n" $(python -c "import sys; print(sys.executable)") >> run.m | |
| - name: Check Python System Path | |
| shell: bash -l {0} | |
| run: | | |
| echo "py.sys.path" >> run.m | |
| - name: Add MATLAB test commands | |
| shell: bash | |
| run: echo "version, | |
| pyenv, | |
| addpath(genpath('mhkit')), | |
| import matlab.unittest.TestSuite, | |
| import matlab.unittest.TestRunner, | |
| testFolder = ['mhkit' filesep 'tests'], | |
| suite = TestSuite.fromFolder(testFolder), | |
| runner = TestRunner.withTextOutput, | |
| results = runner.run(suite), | |
| assertSuccess(results)" >> run.m | |
| - name: Output Run.m | |
| shell: bash | |
| run: cat run.m | |
| - name: Run MHKiT-MATLAB Unit Tests | |
| uses: matlab-actions/run-command@v2 | |
| with: | |
| command: run | |
| startup-options: -noFigureWindows |