Skip to content

CI

CI #6

Workflow file for this run

name: CI
on:
push:
branches:
- "master"
pull_request:
branches:
- "master"
schedule:
# Nightly tests run on master by default:
# Scheduled workflows run on the latest commit on the default or base branch.
# (from https://help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule)
- cron: "0 0 * * *"
jobs:
unix:
runs-on: ${{ matrix.os }}
name: ${{ matrix.name }}
env:
CCACHE_BASEDIR: "${{ github.workspace }}"
CCACHE_DIR: "${{ github.workspace }}/.ccache"
CCACHE_COMPRESS: true
CCACHE_COMPRESSLEVEL: 6
CCACHE_MAXSIZE: 400M
strategy:
fail-fast: false
matrix:
include:
- name: Linux CUDA 12.4
os: ubuntu-latest
env: ubuntu-latest
python-version: "3.13"
cuda-version: "12.4"
OPENCL: false
CMAKE_FLAGS: |
-DOPENMM_BUILD_CUDA_TESTS=OFF \
-DOPENMM_BUILD_OPENCL_TESTS=OFF \
-DOPENMM_BUILD_CPU_LIB=OFF \
-DOPENMM_BUILD_PYTHON_WRAPPERS=OFF \
-DOPENMM_BUILD_REFERENCE_TESTS=OFF \
-DOPENMM_BUILD_SERIALIZATION_TESTS=OFF \
-DOPENMM_BUILD_C_AND_FORTRAN_WRAPPERS=OFF \
-DOPENMM_BUILD_EXAMPLES=OFF \
-DCUDA_CUDART_LIBRARY=/usr/local/cuda-12.4/lib64/libcudart.so \
-DCUDA_NVCC_EXECUTABLE=/usr/local/cuda-12.4/bin/nvcc \
-DCUDA_SDK_ROOT_DIR=/usr/local/cuda-12.4/ \
-DCUDA_TOOLKIT_INCLUDE=/usr/local/cuda-12.4/include \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.4/ \
- name: Linux CUDA 11.8
os: ubuntu-latest
env: ubuntu-latest
python-version: "3.13"
OPENCL: false
cuda-version: "11.8"
CMAKE_FLAGS: |
-DOPENMM_BUILD_CUDA_TESTS=OFF \
-DOPENMM_BUILD_OPENCL_TESTS=OFF \
-DOPENMM_BUILD_CPU_LIB=OFF \
-DOPENMM_BUILD_PYTHON_WRAPPERS=OFF \
-DOPENMM_BUILD_REFERENCE_TESTS=OFF \
-DOPENMM_BUILD_SERIALIZATION_TESTS=OFF \
-DOPENMM_BUILD_C_AND_FORTRAN_WRAPPERS=OFF \
-DOPENMM_BUILD_EXAMPLES=OFF \
-DCUDA_CUDART_LIBRARY=/usr/local/cuda-11.2/lib64/libcudart.so \
-DCUDA_NVCC_EXECUTABLE=/usr/local/cuda-11.2/bin/nvcc \
-DCUDA_SDK_ROOT_DIR=/usr/local/cuda-11.2/ \
-DCUDA_TOOLKIT_INCLUDE=/usr/local/cuda-11.2/include \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.2/ \
- name: Linux Intel OpenCL
os: ubuntu-latest
env: ubuntu-latest
python-version: "3.13"
OPENCL: true
cuda-version: ""
CMAKE_FLAGS: |
-DOPENMM_BUILD_OPENCL_LIB=ON \
-DOPENMM_BUILD_OPENCL_TESTS=ON \
-DOPENMM_BUILD_STATIC_LIB=OFF \
-DOPENMM_BUILD_CPU_LIB=OFF \
-DOPENMM_BUILD_REFERENCE_TESTS=OFF \
-DOPENMM_BUILD_SERIALIZATION_TESTS=OFF \
-DOPENMM_BUILD_PME_PLUGIN=OFF \
-DOPENMM_BUILD_AMOEBA_PLUGIN=OFF \
-DOPENMM_BUILD_PYTHON_WRAPPERS=OFF \
-DOPENMM_BUILD_C_AND_FORTRAN_WRAPPERS=OFF \
-DOPENMM_BUILD_EXAMPLES=OFF \
- name: Linux HIP
os: ubuntu-latest
env: ubuntu-latest-hip
python-version: "3.13"
OPENCL: false
CMAKE_FLAGS: |
-DOPENMM_BUILD_HIP_LIB=ON \
-DOPENMM_BUILD_HIP_TESTS=OFF \
-DOPENMM_BUILD_CPU_LIB=OFF \
-DOPENMM_BUILD_PYTHON_WRAPPERS=OFF \
-DOPENMM_BUILD_REFERENCE_TESTS=OFF \
-DOPENMM_BUILD_SERIALIZATION_TESTS=OFF \
-DOPENMM_BUILD_C_AND_FORTRAN_WRAPPERS=OFF \
-DOPENMM_BUILD_EXAMPLES=OFF
- name: Linux CPU Python 3.13 with static lib
os: ubuntu-latest
env: ubuntu-latest
python-version: "3.13"
OPENCL: false
cuda-version: ""
CC: $CCACHE/clang
CXX: $CCACHE/clang++
CMAKE_FLAGS: |
-DOPENMM_BUILD_STATIC_LIB=ON \
-DOPENMM_BUILD_OPENCL_LIB=OFF \
-DOPENMM_BUILD_OPENCL_TESTS=OFF \
- name: Linux CPU Python 3.13 with condaforge compilers
python-version: "3.13"
os: ubuntu-latest
env: ubuntu-latest
OPENCL: false
cuda-version: ""
compilers: conda-forge
CMAKE_FLAGS: |
-DOPENMM_BUILD_OPENCL_LIB=OFF \
-DOPENMM_BUILD_OPENCL_TESTS=OFF \
- name: Linux CPU Python 3.10
python-version: "3.10"
os: ubuntu-latest
env: ubuntu-latest
OPENCL: false
cuda-version: ""
CMAKE_FLAGS: |
-DOPENMM_BUILD_OPENCL_LIB=OFF \
-DOPENMM_BUILD_OPENCL_TESTS=OFF \
- name: Linux CPU Python 3.13
python-version: "3.13"
os: ubuntu-latest
env: ubuntu-latest
OPENCL: false
cuda-version: ""
CMAKE_FLAGS: |
-DOPENMM_BUILD_OPENCL_LIB=OFF \
-DOPENMM_BUILD_OPENCL_TESTS=OFF \
- name: Linux ARM Python 3.14
python-version: "3.14"
os: ubuntu-24.04-arm
env: ubuntu-arm
OPENCL: false
cuda-version: ""
CMAKE_FLAGS: |
-DOPENMM_BUILD_OPENCL_LIB=OFF \
-DOPENMM_BUILD_OPENCL_TESTS=OFF \
- name: MacOS Intel Python 3.13
python-version: "3.13"
os: macos-15-intel
env: macos
OPENCL: false
cuda-version: ""
CMAKE_FLAGS: |
-DOPENMM_BUILD_OPENCL_LIB=ON \
-DOPENMM_BUILD_OPENCL_TESTS=OFF \
- name: MacOS ARM Python 3.13
python-version: "3.13"
os: macos-latest
env: macos
OPENCL: false
cuda-version: ""
CMAKE_FLAGS: |
-DOPENMM_BUILD_OPENCL_LIB=ON \
-DOPENMM_BUILD_OPENCL_TESTS=OFF \
steps:
- uses: actions/checkout@v3
- uses: conda-incubator/setup-miniconda@v3
name: "Prepare base dependencies"
with:
python-version: ${{ matrix.python-version }}
activate-environment: build
environment-file: devtools/ci/gh-actions/conda-envs/build-${{ matrix.env }}.yml
auto-activate-base: false
miniforge-variant: Miniforge3
use-mamba: true
# See https://github.com/kou/arrow/blob/main/ci/scripts/util_free_space.sh. We can delete more if we need to.
- name: "Free disk space"
if: matrix.OPENCL == true && startsWith(matrix.os, 'ubuntu')
run: |
rm -rf /opt/hostedtoolcache/*
- name: "Install CUDA on Ubuntu (if needed)"
if: matrix.cuda-version != '' && startsWith(matrix.os, 'ubuntu')
env:
CUDA_VERSION: ${{ matrix.cuda-version }}
run: source devtools/ci/gh-actions/scripts/install_cuda.sh
- name: "Install OpenCL on Ubuntu (if needed)"
if: matrix.OPENCL == true && startsWith(matrix.os, 'ubuntu')
run: source devtools/ci/gh-actions/scripts/install_intel_opencl.sh
- name: "Install conda-forge compilers on Ubuntu or M1 (if needed)"
if: matrix.compilers == 'conda-forge'
shell: bash -l {0}
run: conda install -c conda-forge compilers
- name: "Set SDK on MacOS (if needed)"
if: startsWith(matrix.os, 'macos')
run: source devtools/ci/gh-actions/scripts/install_macos_sdk.sh
- name: "Prepare ccache"
id: prepare-ccache
shell: bash -l {0}
run: |
echo "key=$(echo "${{ matrix.name }}" | tr -d ' .')" >> $GITHUB_OUTPUT
echo "timestamp=$(date +%Y%m%d-%H%M%S)" >> $GITHUB_OUTPUT
ccache -p
ccache -z
- name: "Restore ccache"
uses: actions/cache@v4
with:
path: .ccache
key: ccache-${{ secrets.CACHE_VERSION }}-${{ steps.prepare-ccache.outputs.key }}-${{ steps.prepare-ccache.outputs.timestamp }}
restore-keys: |
ccache-${{ secrets.CACHE_VERSION }}-${{ steps.prepare-ccache.outputs.key }}-
- name: "Configure build with CMake"
shell: bash -l {0}
run: |
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX} \
-DCMAKE_PREFIX_PATH=${CONDA_PREFIX} \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
${{ matrix.CMAKE_FLAGS }}
- name: "Build OpenMM"
shell: bash -l {0}
run: |
cd build
make -j2 install
- name: "Build Python wrappers"
shell: bash -l {0}
if: ${{ !contains(matrix.CMAKE_FLAGS, 'OPENMM_BUILD_PYTHON_WRAPPERS=OFF') }}
run: |
cd build
make -j2 PythonInstall
- name: "Check ccache performance"
shell: bash -l {0}
run: ccache -s
- name: "Test OpenMM"
shell: bash -l {0}
id: testcore
run: |
set -x
cd build
if [[ ${{ matrix.OPENCL }} == true ]]; then
source /opt/intel/oneapi/setvars.sh
fi
python ../devtools/run-ctest.py --parallel 2 --timeout 600 --job-duration 900 --attempts 3
if [[ ${{ matrix.os }} == ubuntu-* ]]; then SHLIB=so; else SHLIB=dylib; fi
# This is always built
test -f ${CONDA_PREFIX}/lib/libOpenMM.$SHLIB
# With CUDA, we _expect_ CUDA plugins :)
if [[ "${{ matrix.cuda-version }}" != "" ]]; then
test -f ${CONDA_PREFIX}/lib/plugins/libOpenMMCUDA.$SHLIB
fi
# OpenCL should also be there for CUDA and, well, OpenCL
if [[ "${{ matrix.cuda-version }}" != "" || ${{ matrix.OPENCL }} == true ]]; then
test -f ${CONDA_PREFIX}/lib/plugins/libOpenMMOpenCL.$SHLIB
# Check for HIP plugin
elif [[ ${{ matrix.env }} == *hip ]]; then
test -f ${CONDA_PREFIX}/lib/plugins/libOpenMMHIP.$SHLIB
# CPU builds should provide both CPU and PME
else
test -f ${CONDA_PREFIX}/lib/plugins/libOpenMMCPU.$SHLIB
test -f ${CONDA_PREFIX}/lib/plugins/libOpenMMPME.$SHLIB
fi
- name: "Test Python wrappers"
shell: bash -l {0}
if: ${{ !contains(matrix.CMAKE_FLAGS, 'OPENMM_BUILD_PYTHON_WRAPPERS=OFF') && (steps.testcore.outcome == 'failure' || steps.testcore.outcome == 'success') }}
run: |
set -x
python -m openmm.testInstallation
python -c "import openmm as mm; print('---Loaded---', *mm.pluginLoadedLibNames, '---Failed---', *mm.Platform.getPluginLoadFailures(), sep='\n')"
cd build/python/tests
python -m pytest -v -n 2
windows:
runs-on: windows-latest
name: ${{ matrix.name }}
env:
# `make pythoninstall` will always put the files in the workspace unit
# workaround: make sure conda envs are created in the same unit as workspace
CONDA_ENVS_PATH: "D:/conda-envs"
CCACHE_BASEDIR: "${{ github.workspace }}"
CCACHE_DIR: "${{ github.workspace }}\\.ccache"
CCACHE_COMPRESS: true
CCACHE_COMPRESSLEVEL: 6
CCACHE_MAXSIZE: 400M
strategy:
fail-fast: false
matrix:
include:
- name: Windows CUDA 11.2 Python 3.13
python-version: "3.13"
cuda-version: "11.2"
CMAKE_FLAGS: |
-DCUDA_TOOLKIT_ROOT_DIR="%CUDA_TOOLKIT_ROOT_DIR%" ^
-DOPENMM_BUILD_CUDA_TESTS=OFF ^
-DOPENMM_BUILD_OPENCL_TESTS=OFF ^
-DOPENMM_BUILD_CPU_LIB=ON ^
-DOPENMM_BUILD_PYTHON_WRAPPERS=ON ^
-DOPENMM_BUILD_REFERENCE_TESTS=ON ^
-DOPENMM_BUILD_SERIALIZATION_TESTS=ON ^
-DOPENMM_BUILD_C_AND_FORTRAN_WRAPPERS=ON ^
-DOPENMM_BUILD_EXAMPLES=ON ^
steps:
- uses: actions/checkout@v3
- uses: conda-incubator/setup-miniconda@v2
name: "Prepare base dependencies"
with:
python-version: ${{ matrix.python-version }}
activate-environment: build
environment-file: devtools/ci/gh-actions/conda-envs/build-windows-latest.yml
auto-activate-base: false
- name: "Install CUDA (if needed)"
shell: cmd /C call {0}
if: matrix.cuda-version != ''
env:
CUDA_VERSION: ${{ matrix.cuda-version }}
run: call devtools/ci/gh-actions/scripts/install_cuda.bat
- name: "Prepare ccache"
id: prepare-ccache
shell: cmd /C call {0}
run: |
set name=${{ matrix.name }}
set name=%name: =%
set name=%name:.=%
for /f "usebackq tokens=*" %%a in (`%CONDA_PREFIX%\Library\usr\bin\date.exe +%%Y%%m%%d-%%H%%M%%S`) do set "timestamp=%%a"
echo key=%name%>> %GITHUB_OUTPUT%
echo timestamp=%timestamp%>> %GITHUB_OUTPUT%
ccache -p
ccache -z
- name: "Restore ccache"
uses: actions/cache@v4
with:
path: .ccache
key: ccache-${{ secrets.CACHE_VERSION }}-${{ steps.prepare-ccache.outputs.key }}-${{ steps.prepare-ccache.outputs.timestamp }}
restore-keys: |
ccache-${{ secrets.CACHE_VERSION }}-${{ steps.prepare-ccache.outputs.key }}-
- name: "Configure build with CMake"
shell: cmd /C call {0}
env:
CMAKE_FLAGS: ${{ matrix.CMAKE_FLAGS }}
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
mkdir build
cd build
cmake -G "NMake Makefiles JOM" ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX%/Library ^
-DCMAKE_PREFIX_PATH=%CONDA_PREFIX%/Library ^
-DOPENCL_INCLUDE_DIR=%CONDA_PREFIX%/Library/include ^
-DOPENCL_LIBRARY=%CONDA_PREFIX%/Library/lib/OpenCL.lib ^
-DCMAKE_C_COMPILER_LAUNCHER=ccache ^
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache ^
-DCMAKE_CXX_COMPILER=cl.exe ^
-DCMAKE_C_COMPILER=cl.exe ^
-DOPENMM_BUILD_EXAMPLES=OFF ^
-DOPENMM_BUILD_OPENCL_TESTS=OFF ^
%CMAKE_FLAGS%
..
- name: "Build OpenMM"
shell: cmd /C call {0}
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
cd build
jom -j 2
if errorlevel 1 exit 1
jom -j 2 install
if errorlevel 1 exit 1
- name: "Build Python wrappers"
shell: cmd /C call {0}
if: ${{ !contains(matrix.CMAKE_FLAGS, 'OPENMM_BUILD_PYTHON_WRAPPERS=OFF') }}
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
cd build
jom -j 2 PythonInstall
- name: "Check ccache performance"
shell: cmd /C call {0}
run: ccache -s
- name: "Test OpenMM"
shell: cmd /C call {0}
id: testcore
run: |
@echo on
cd build
python ..\devtools\run-ctest.py --parallel 2 --timeout 600 --job-duration 900 --attempts 3
if errorlevel 1 exit 1
if not exist %CONDA_PREFIX%/Library/lib/OpenMM.lib exit 1
if not "${{ matrix.cuda-version }}" == "" (
if not exist %CONDA_PREFIX%/Library/lib/plugins/OpenMMCUDA.lib exit 1
if not exist %CONDA_PREFIX%/Library/lib/plugins/OpenMMOpenCL.lib exit 1
) else (
if not exist %CONDA_PREFIX%/Library/lib/plugins/OpenMMCPU.lib exit 1
if not exist %CONDA_PREFIX%/Library/lib/plugins/OpenMMPME.lib exit 1
)
- name: "Test Python wrappers"
shell: cmd /C call {0}
if: ${{ !contains(matrix.CMAKE_FLAGS, 'OPENMM_BUILD_PYTHON_WRAPPERS=OFF') && (steps.testcore.outcome == 'failure' || steps.testcore.outcome == 'success') }}
run: |
@echo on
python -m openmm.testInstallation
python -c "import openmm as mm; print('---Loaded---', *mm.pluginLoadedLibNames, '---Failed---', *mm.Platform.getPluginLoadFailures(), sep='\n')"
cd build\python\tests
python -m pytest -v -n 2
docker:
name: ${{ matrix.name }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: PowerPC CPU/CUDA 11.8 Python 3.13 with condaforge compilers
docker-image: quay.io/condaforge/linux-anvil-ppc64le-cuda:11.8
python-version: "3.13"
compilers: compilers
#- name: PowerPC CPU Python 3.13 devtoolset-7 compilers
# docker-image: quay.io/condaforge/linux-anvil-ppc64le
# python-version: "3.13"
# compilers: devtoolset-7
# - name: ARM CPU Python 3.13 with condaforge compilers
# docker-image: quay.io/condaforge/linux-anvil-aarch64
# python-version: "3.13"
# compilers: compilers
steps:
- uses: actions/checkout@v3
# Following bits adapted from conda-forge Azure configs.
# If it stops working, check any feedstock with ppc64le or aarch64
# enabled, and adapt from:
# .azure-pipelines/azure-pipelines-linux.yml
# .scripts/run_docker_build.sh
# .scripts/build_steps.sh
- name: "Prepare docker"
run: |
docker run --rm --privileged multiarch/qemu-user-static:register --reset --credential yes
ls /proc/sys/fs/binfmt_misc/
docker info
# In order for the conda-build process in the container to write to the mounted
# volumes, we need to run with the same id as the host machine, which is
# normally the owner of the mounted volumes, or at least has write permission
export HOST_USER_ID=$(id -u)
# Check if docker-machine is being used (normally on OSX) and get the uid from
# the VM
if hash docker-machine 2> /dev/null && docker-machine active > /dev/null; then
export HOST_USER_ID=$(docker-machine ssh $(docker-machine active) id -u)
fi
echo "HOST_USER_ID=${HOST_USER_ID}" >> ${GITHUB_ENV}
- name: "Prepare ccache"
id: prepare-ccache
shell: bash -l {0}
run: |
echo "key=$(echo "${{ matrix.name }}" | tr -d ' .')" >> $GITHUB_OUTPUT
echo "timestamp=$(date +%Y%m%d-%H%M%S)" >> $GITHUB_OUTPUT
- name: "Restore ccache"
uses: actions/cache@v4
with:
path: .ccache
key: ccache-${{ secrets.CACHE_VERSION }}-${{ steps.prepare-ccache.outputs.key }}-${{ steps.prepare-ccache.outputs.timestamp }}
restore-keys: |
ccache-${{ secrets.CACHE_VERSION }}-${{ steps.prepare-ccache.outputs.key }}-
- name: Run docker
env:
PYTHON_VER: ${{ matrix.python-version }}
DOCKER_IMAGE: ${{ matrix.docker-image }}
COMPILERS: ${{ matrix.compilers }}
run: |
echo "::group::Start docker..."
docker run \
-v "${GITHUB_WORKSPACE}":/home/conda/workspace:rw,z \
-e HOST_USER_ID \
-e CPU_COUNT \
-e PYTHON_VER \
-e COMPILERS \
${DOCKER_IMAGE} \
bash \
/home/conda/workspace/devtools/ci/gh-actions/scripts/run_steps_inside_docker_image.sh
test -f docker_steps_run_successfully
docs:
name: Docs
env:
CCACHE_BASEDIR: "${{ github.workspace }}"
CCACHE_DIR: "${{ github.workspace }}/.ccache"
CCACHE_COMPRESS: true
CCACHE_COMPRESSLEVEL: 6
CCACHE_MAXSIZE: 400M
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: conda-incubator/setup-miniconda@v2
name: "Prepare base dependencies"
with:
python-version: "3.13"
activate-environment: build
environment-file: devtools/ci/gh-actions/conda-envs/docs.yml
auto-activate-base: false
- name: "Install TeX"
run: |
set -x
echo 'APT::Acquire::Retries "5";' | sudo tee /etc/apt/apt.conf.d/80-retries
sudo apt-get update
sudo apt-get install -y \
latexmk \
texlive-latex-recommended \
texlive-fonts-recommended \
texlive-latex-extra \
texlive-xetex \
fonts-freefont-otf
- name: "Prepare ccache"
id: prepare-ccache
shell: bash -l {0}
run: |
echo "key=$(echo "${{ matrix.name }}" | tr -d ' .')" >> $GITHUB_OUTPUT
echo "timestamp=$(date +%Y%m%d-%H%M%S)" >> $GITHUB_OUTPUT
ccache -p
ccache -z
- name: "Restore ccache"
uses: actions/cache@v4
with:
path: .ccache
key: ccache-${{ secrets.CACHE_VERSION }}-${{ steps.prepare-ccache.outputs.key }}-${{ steps.prepare-ccache.outputs.timestamp }}
restore-keys: |
ccache-${{ secrets.CACHE_VERSION }}-${{ steps.prepare-ccache.outputs.key }}-
- name: "Configure build with CMake"
shell: bash -l {0}
run: |
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX} \
-DCMAKE_PREFIX_PATH=${CONDA_PREFIX} \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DOPENMM_GENERATE_API_DOCS=ON \
-DOPENMM_BUILD_PYTHON_WRAPPERS=ON \
-DOPENMM_BUILD_OPENCL_LIB=OFF \
-DOPENMM_BUILD_REFERENCE_TESTS=OFF \
-DOPENMM_BUILD_CPU_TESTS=OFF \
-DOPENMM_BUILD_CUDA_TESTS=OFF \
-DOPENMM_BUILD_OPENCL_TESTS=OFF \
-DOPENMM_BUILD_SERIALIZATION_TESTS=OFF \
-DOPENMM_BUILD_C_AND_FORTRAN_WRAPPERS=OFF \
-DOPENMM_BUILD_EXAMPLES=OFF
- name: Build docs
shell: bash -l {0}
run: |
set -x
cd build
make -j2 install PythonInstall
make -j2 sphinxhtml
make -j2 sphinxpdf
make -j2 C++ApiDocs
make -j2 PythonApiDocs
mkdir -p api-docs
mv sphinx-docs/userguide/html api-docs/userguide
mv sphinx-docs/userguide/latex/*.pdf api-docs/userguide/
mv sphinx-docs/developerguide/html api-docs/developerguide
mv sphinx-docs/developerguide/latex/*.pdf api-docs/developerguide/
mv api-python api-docs
mv api-c++ api-docs
- name: "Check ccache performance"
shell: bash -l {0}
run: ccache -s
- name: "Deploy docs (only on master)"
if: ${{ github.ref == 'refs/heads/master' && github.event_name != 'schedule' }}
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: 'us-east-1'
SOURCE_DIR: 'build/api-docs'
DEST_DIR: 'development'
- name: Check 404s
shell: bash -l {0}
env:
# Pipe-seperated list of domains to skip
SKIP_DOMAIN: support.amd.com|www.pnas.org|doi.org|commonfund.nih.gov|openmm.org/development
run: |
set +e
# Linkinator accepts regex for its --skip argument, so we
# should pre-process the domains into the relevant pattern
SKIP_REGEX=$(python -c "print(
r'^(https?://)?([a-zA-Z0-9\-_.]+\.)?', # Optionally match protocol and subdomains
'(', # Open sub-pattern for domain names
'$SKIP_DOMAIN'.replace('.', r'\.'), # Escape out periods
')', # Close sub-pattern of domains
'(/.*)?$', # only match if this is the end of the domain name
sep='', # Concatenate the above strings exactly
end='' # No newline at end of print()
)")
for d in api-c++ api-python developerguide userguide; do
echo "::group:: Check ${d}"
npx linkinator@7.6.1 ./${d}/ --recurse --timeout=20000 --retry-errors --skip "$SKIP_REGEX" --server-root ./build/api-docs --verbosity error
((exitcode+=$?))
echo "::endgroup::"
done
echo "::group:: Check README"
npx linkinator@7.6.1 ./README.md --markdown --retry-errors --skip "$SKIP_REGEX"
((exitcode+=$?))
echo "::endgroup::"
exit $exitcode