Make geometry spline interpolation mesh independent #435
Workflow file for this run
This file contains 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: OAS build | |
# This workflow runs all unit and regression tests, as well as coveralls. | |
# On the pull-request events, this workflow runs OAS tests, checks code format by flake8/black, and builds the docs. | |
# On the push-to-main events, it also deploys the docs. | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
tags: | |
- v*.*.* | |
schedule: | |
# Run the tests at 7:23pm UTC on the 2nd and 17th of every month | |
- cron: '23 19 2,17 * *' | |
jobs: | |
# --- run OAS unit and regression tests --- | |
test: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false # continue other jobs even if one of the jobs in matrix fails | |
matrix: | |
dep-versions: ["oldest", "latest"] | |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set versions to test here ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
PYTHON_VERSION_OLDEST: ['3.8'] | |
PYTHON_VERSION_LATEST: ['3.11'] | |
PIP_VERSION_OLDEST: ['23.3.2'] # OpenMDAO 3.15 doesn't install with pip>=24 | |
WHEEL_VERSION_OLDEST: ['0.38.4'] # latest wheel cannot build the oldest OpenMDAO (3.17 or older) | |
NUMPY_VERSION_OLDEST: ['1.20'] # latest is most recent on PyPI | |
SCIPY_VERSION_OLDEST: ['1.6.0'] # latest is most recent on PyPI | |
OPENMDAO_VERSION_OLDEST: ['3.15'] # latest is most recent on PyPI | |
MPHYS_VERSION_OLDEST: ['1.0.0'] # latest is most recent on PyPI | |
PYGEO_VERSION_OLDEST: ['1.6.0'] # latest is pulled from main branch, for some reason anything after 1.12.2 seg faults on the old build | |
VSP_VERSION: ['3.27.1'] # used for both builds | |
PETSC_VERSION_LATEST: ['3.19.1'] | |
CYTHON_VERSION: ['0.29.36'] # used for both builds | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Set up Python ${{ matrix.PYTHON_VERSION_OLDEST }} | |
if: ${{ matrix.dep-versions == 'oldest' }} | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.PYTHON_VERSION_OLDEST }} | |
- name: Set up Python ${{ matrix.PYTHON_VERSION_LATEST }} | |
if: ${{ matrix.dep-versions == 'latest' }} | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.PYTHON_VERSION_LATEST }} | |
# we need OpenVSP to run vsp tests. | |
- name: Install OpenVSP | |
run: | | |
sudo apt-get update | |
export PYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") | |
export PYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") | |
export INST_PREFIX=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('prefix'))") | |
cd .. | |
sudo apt-get install cmake libx11-dev libfltk1.3-dev libcpptest-dev libglm-dev libeigen3-dev libcminpack-dev \ | |
libglew-dev doxygen graphviz texlive-latex-base | |
mkdir OpenVSP | |
cd OpenVSP | |
mkdir build buildlibs | |
# Download source code | |
wget -q https://github.com/OpenVSP/OpenVSP/archive/refs/tags/OpenVSP_${{ matrix.VSP_VERSION }}.tar.gz | |
tar -xf OpenVSP_${{ matrix.VSP_VERSION }}.tar.gz | |
mv OpenVSP-OpenVSP_${{ matrix.VSP_VERSION }} repo | |
# Build dependency libs | |
cd buildlibs | |
cmake -DVSP_USE_SYSTEM_LIBXML2=true -DVSP_USE_SYSTEM_FLTK=true -DVSP_USE_SYSTEM_GLM=true \ | |
-DVSP_USE_SYSTEM_GLEW=true -DVSP_USE_SYSTEM_CMINPACK=true -DVSP_USE_SYSTEM_LIBIGES=false \ | |
-DVSP_USE_SYSTEM_EIGEN=false -DVSP_USE_SYSTEM_CODEELI=false -DVSP_USE_SYSTEM_CPPTEST=false \ | |
-DPYTHON_INCLUDE_DIR=${PYTHON_INCLUDE_DIR} -DPYTHON_LIBRARY=${PYTHON_LIBRARY} ../repo/Libraries -DCMAKE_BUILD_TYPE=Release | |
make -j8 | |
# Build OpenVSP | |
cd .. | |
export BUILD_LIBS_PATH=`pwd` | |
cd build | |
cmake ../repo/src/ -DVSP_NO_GRAPHICS=true -DVSP_LIBRARY_PATH=${BUILD_LIBS_PATH}/buildlibs \ | |
-DPYTHON_INCLUDE_DIR=${PYTHON_INCLUDE_DIR} -DPYTHON_LIBRARY=${PYTHON_LIBRARY} \ | |
-DCMAKE_BUILD_TYPE=Release | |
make -j8 | |
make package | |
# Install python interface | |
pushd _CPack_Packages/Linux/ZIP/OpenVSP-${{ matrix.VSP_VERSION }}-Linux/python | |
pip install -r requirements.txt | |
pushd .. | |
cp vspaero vspscript vspslicer $INST_PREFIX/bin | |
popd | |
popd | |
# OAS dependencies are specified in setup.py. | |
- name: Install OAS and its dependencies (oldest versions) | |
if: ${{ matrix.dep-versions == 'oldest' }} | |
run: | | |
python -m pip install pip==${{ matrix.PIP_VERSION_OLDEST }} | |
python -m pip install wheel==${{ matrix.WHEEL_VERSION_OLDEST }} | |
pip install numpy==${{ matrix.NUMPY_VERSION_OLDEST }} scipy==${{ matrix.SCIPY_VERSION_OLDEST }} openmdao==${{ matrix.OPENMDAO_VERSION_OLDEST }} mphys==${{ matrix.MPHYS_VERSION_OLDEST }} | |
pip install -e .[test] | |
- name: Install OAS and its dependencies (latest versions) | |
if: ${{ matrix.dep-versions == 'latest' }} | |
run: | | |
python -m pip install --upgrade pip wheel | |
pip install -e .[test,mphys] | |
- name: Install MPI | |
run: | | |
sudo apt-get install openmpi-bin libopenmpi-dev | |
pip install mpi4py | |
# install PETSc on the latest for MPI tests | |
- name: Install PETSc | |
if: ${{ matrix.dep-versions == 'latest' }} | |
run: | | |
cd .. | |
pip download petsc==${{ matrix.PETSC_VERSION_LATEST }} | |
tar -xf petsc-${{ matrix.PETSC_VERSION_LATEST }}.tar.gz | |
cd petsc-${{ matrix.PETSC_VERSION_LATEST }} | |
export PETSC_ARCH=real-debug | |
export PETSC_DIR=`pwd` | |
./configure --PETSC_ARCH=$PETSC_ARCH --download-fblaslapack | |
make PETSC_DIR=$PETSC_DIR PETSC_ARCH=$PETSC_ARCH all | |
# Cython 3.0.0 break petsc4py install | |
pip install cython==${{ matrix.CYTHON_VERSION }} | |
pip install petsc4py==${{ matrix.PETSC_VERSION_LATEST }} | |
# We need pySpline/pyGeo to run FFD tests. | |
- name: Install pySpline | |
run: | | |
cd .. | |
git clone https://github.com/mdolab/pyspline.git | |
cd pyspline | |
cp config/defaults/config.LINUX_GFORTRAN.mk config/config.mk | |
make | |
pip install -e . | |
- name: Install pyGeo ${{ matrix.PYGEO_VERSION_OLDEST }} | |
if: ${{ matrix.dep-versions == 'oldest' }} | |
run: | | |
pip install "pygeo[testing] @ git+https://github.com/mdolab/pygeo.git@v${{ matrix.PYGEO_VERSION_OLDEST }}" | |
- name: Install pyGeo latest | |
if: ${{ matrix.dep-versions == 'latest' }} | |
run: | | |
pip install "pygeo[testing] @ git+https://github.com/mdolab/pygeo.git" | |
- name: List installed Python packages | |
run: | | |
pip list -v | |
- name: Run tests (latest) | |
env: | |
OMPI_MCA_btl: ^openib # prevent OpenMPI warning messages | |
if: ${{ matrix.dep-versions == 'latest' }} | |
run: | | |
testflo -n 2 -v openaerostruct --coverage --coverpkg openaerostruct | |
coverage xml | |
# skip MPI tests on the oldest | |
- name: Run tests (oldest) | |
env: | |
OMPI_MCA_btl: ^openib # prevent OpenMPI warning messages | |
if: ${{ matrix.dep-versions == 'oldest' }} | |
run: | | |
testflo -n 2 -v --exclude \*MPI\* openaerostruct --coverage --coverpkg openaerostruct | |
coverage xml | |
- name: Upload Coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
fail_ci_if_error: true | |
verbose: true | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
# --- linting and formatting --- | |
black: | |
uses: mdolab/.github/.github/workflows/black.yaml@main | |
flake8: | |
uses: mdolab/.github/.github/workflows/flake8.yaml@main | |
# --- publish to PyPI | |
pypi: | |
needs: [test, flake8, black] | |
uses: mdolab/.github/.github/workflows/pypi.yaml@main | |
secrets: inherit |