Skip to content

Squash-merge of master branch #2270

Squash-merge of master branch

Squash-merge of master branch #2270

Workflow file for this run

name: "Library"
on:
push:
jobs:
basicchecks:
name: Basic checks
runs-on: ubuntu-latest
outputs:
hassecrets: ${{ steps.checksecrets.outputs.hassecrets }}
env:
CCACHE: ccache
CCACHE_DIR: ${{ github.workspace }}/ccache
steps:
- name: Checkout Colvars
uses: actions/checkout@v4
- name: Load compiler cache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/ccache
key: ${{ runner.os }}-build-basic-${{ github.sha }}
restore-keys: ${{ runner.os }}-build-basic-
- name: Get small downloadable packages
uses: actions/checkout@v4
with:
repository: 'Colvars/build-tools-packages'
ref: 'master'
path: 'devel-tools/packages'
- name: Install build dependencies for library
run: |
sudo apt -y install ccache tcl8.6-dev clang
- name: Test build recipes
run: bash devel-tools/check_build_recipes
- name: Convert BibTeX references to code
shell: bash
working-directory: doc
run: |
make update-code-refs
if [ -n "$(git status --porcelain ../src/colvarmodule_refs.h)" ] ; then
echo "Code citations out of date; please run make update-code-refs in the doc folder" >& 2
exit 1
fi
- name: Build and test library (Clang)
env:
CMAKE_BUILD_DIR: build
CXX: clang++
CC: clang
run: cmake -P devel-tools/build_test_library.cmake
- name: Check documentation of command-line scripting interface
shell: bash
working-directory: doc
run: |
make update-cvscript-cmdline-doc
if [ -n "$(git status --porcelain cvscript-tcl.tex)" ] ; then
echo "Command-line scripting doc out of date; please run make update-cvscript-cmdline-doc and commit changes" >& 2
exit 1
fi
- name: Build and test library (GCC)
env:
CMAKE_BUILD_DIR: build-gcc
CXX: g++
CC: gcc
run: cmake -P devel-tools/build_test_library.cmake
- name: Build library with debug code enabled (GCC)
run: cmake -D COLVARS_DEBUG=ON -P devel-tools/build_test_library.cmake
- name: Check whether secrets are available
id: checksecrets
env:
PULL_ORACLE_DEVELOPER_STUDIO: ${{ secrets.PULL_ORACLE_DEVELOPER_STUDIO }}
run: |
echo "hassecrets=${{ env.PULL_ORACLE_DEVELOPER_STUDIO != '' }}" >> $GITHUB_OUTPUT
- name: Print ccache stats
run: ccache -s -v
- name: Keep only one cache besides the one from this job
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: |
bash ${{ github.workspace }}/devel-tools/cleanup-gh-cache.sh ${{ runner.os }}-build-basic-
build-doc:
name: Build documentation
runs-on: ubuntu-latest
needs: basicchecks
steps:
- uses: actions/checkout@v4
- name: Install Apptainer
shell: bash
run: |
sudo add-apt-repository -y ppa:apptainer/ppa
sudo apt update
sudo apt install -y apptainer-suid
- name: Get container image
shell: bash
working-directory: devel-tools
run: |
apptainer pull texlive.sif oras://ghcr.io/colvars/devel-containers:texlive
- name: Checkout website repository
uses: actions/checkout@v4
with:
ssh-key: ${{ secrets.PULL_PUSH_COLVARS_GITHUB_IO }}
repository: 'Colvars/colvars.github.io'
path: 'website'
- name: Build doc for current branch
working-directory: doc
run: |
make clean-all
apptainer exec ${{ github.workspace }}/devel-tools/texlive.sif make
- name: Install SSH key for access to website repository
if: contains(github.event.head_commit.message, '[update-doc]')
env:
WEBSITE_SSH_KEY: ${{ secrets.PULL_PUSH_COLVARS_GITHUB_IO }}
run: |
mkdir -p -m 700 ~/.ssh
echo "${WEBSITE_SSH_KEY}" > ~/.ssh/website
chmod 600 ~/.ssh/website
- name: Push updated doc to website repository
working-directory: doc
if: contains(github.event.head_commit.message, '[update-doc]')
env:
COLVARS_WEBSITE_TREE: ${{ github.workspace }}/website
run: |
apptainer exec ${{ github.workspace }}/devel-tools/texlive.sif make install
export GIT_SSH="ssh -i ~/.ssh/website"
git config --global user.email "[email protected]"
git config --global user.name "CI runner"
bash update_website.sh ${{ github.workspace }}/website
codeql:
name: CodeQL analysis
runs-on: ubuntu-latest
needs: basicchecks
if: ${{ ! github.event.repository.private }}
steps:
- uses: actions/checkout@v4
- name: Install build dependencies for library
run: |
sudo apt-get -y install tcl8.6-dev
- name: Checkout OpenMM (for Lepton library)
uses: actions/checkout@v4
with:
repository: 'openmm/openmm'
ref: 'master'
path: 'openmm-source'
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: cpp
- name: Build Colvars library with CMake
run: cmake -P devel-tools/build_test_library.cmake
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
static-analyser:
name: Clang 14 Static Analyser
runs-on: ubuntu-latest
needs: basicchecks
steps:
- uses: actions/checkout@v4
- name: Install build dependencies for library
run: |
sudo apt -y install tcl8.6-dev clang-14 clang-tools-14
- name: Checkout OpenMM (for Lepton library)
uses: actions/checkout@v4
with:
repository: 'openmm/openmm'
ref: 'master'
path: 'openmm-source'
- name: Perform Clang Static Analyser
env:
CXX: clang++-14
CC: clang-14
run: |
scan-build-14 --use-cc=clang-14 --use-c++=clang++-14 cmake -P devel-tools/build_test_library.cmake 2>&1 | tee build_analyser.log
grep "CMake Error" build_analyser.log > build_errors.log || true
if [ -s build_errors.log ] ; then
echo "Found compiler errors during build"
cat build_analyser.log
exit 1
fi
- name: Analyze logs
run: | # Retrieve warnings generated but not the ones of OpenMM
awk '/colvars\/colvars\/[^openmm].*warning:/,/warning.*generated|^$/' build_analyser.log | tee warnings_analyser.log || true
if [ -s warnings_analyser.log ] ; then
echo "Found compiler warning during build"
exit 1
fi
- name: Archive warnings artifacts
uses: actions/upload-artifact@v4
if: failure()
with:
name: warnings_clang_static_analyser
path: warnings_analyser.log
address-sanitizer:
name: Clang 16 address sanitizer
runs-on: ubuntu-latest
needs: basicchecks
env:
CCACHE: ccache
CCACHE_DIR: ${{ github.workspace }}/ccache
steps:
- uses: actions/checkout@v4
- name: Load compiler ccache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/ccache
key: ${{ runner.os }}-build-asan-${{ github.sha }}
restore-keys: ${{ runner.os }}-build-asan-
- name: Checkout OpenMM (for Lepton library)
uses: actions/checkout@v4
with:
repository: 'openmm/openmm'
ref: 'master'
path: 'openmm-source'
- name: Install Apptainer
shell: bash
run: |
sudo add-apt-repository -y ppa:apptainer/ppa
sudo apt update
sudo apt install -y apptainer-suid
- name: Get container images for build dependencies
shell: bash
working-directory: devel-tools
run: |
apptainer pull CentOS9-devel.sif oras://ghcr.io/colvars/devel-containers:CentOS9-devel
- name: Build with Clang 16 and address sanitizer
env:
CXX: clang++
CC: clang
CMAKE_ADDRESS_SANITIZER: ON
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel.sif \
cmake -P devel-tools/build_test_library.cmake
- name: Archive warnings artifacts
uses: actions/upload-artifact@v4
if: failure()
with:
name: Clang_address_sanitizer_output
path: ${{github.workspace}}/build/Testing/Temporary/LastTest.log
- name: Keep only one cache besides the one from this job
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: |
bash ${{ github.workspace }}/devel-tools/cleanup-gh-cache.sh ${{ runner.os }}-build-asan-
build-linux-x86_64-many:
name: Linux x86_64 (GCC, Clang)
runs-on: ubuntu-latest
needs: basicchecks
env:
CCACHE: ccache
CMAKE_GENERATOR: Ninja
CCACHE_DIR: ${{ github.workspace }}/ccache
steps:
- uses: actions/checkout@v4
- name: Load compiler ccache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/ccache
key: ${{ runner.os }}-build-multiple-${{ github.sha }}
restore-keys: ${{ runner.os }}-build-multiple-
- name: Get small downloadable packages
uses: actions/checkout@v4
with:
repository: 'Colvars/build-tools-packages'
ref: 'master'
path: 'devel-tools/packages'
- name: Install Apptainer
shell: bash
run: |
sudo add-apt-repository -y ppa:apptainer/ppa
sudo apt update
sudo apt install -y apptainer-suid
- name: Get container images for build dependencies
shell: bash
working-directory: devel-tools
run: |
apptainer pull CentOS7-devel.sif oras://ghcr.io/colvars/devel-containers:CentOS7-devel
apptainer pull CentOS9-devel.sif oras://ghcr.io/colvars/devel-containers:CentOS9-devel
- name: GCC 4.8, C++11 (CentOS 7)
env:
CXX_STANDARD: 11
CXX: g++
CXX_VERSION: 4.8
CC: gcc
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS7-devel.sif \
cmake3 -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: Clang 3.4, C++11 (CentOS 7)
env:
CXX_STANDARD: 11
CXX: clang++
CXX_VERSION: 11
CC: clang
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS7-devel.sif \
cmake3 -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: Clang 7, C++17 (CentOS 7)
env:
CXX_STANDARD: 17
CXX: clang++
CXX_VERSION: 7
CC: clang
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS7-devel.sif \
scl enable llvm-toolset-${CXX_VERSION} -- \
cmake3 -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: GCC 8, C++17 (CentOS 7)
env:
CXX_STANDARD: 17
CXX: g++
CXX_VERSION: 8
CC: gcc
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS7-devel.sif \
scl enable devtoolset-${CXX_VERSION} -- \
cmake3 -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: GCC 9, C++14 (CentOS 7)
env:
CXX_STANDARD: 14
CXX: g++
CXX_VERSION: 9
CC: gcc
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS7-devel.sif \
scl enable devtoolset-${CXX_VERSION} -- \
cmake3 -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: GCC 10, C++17 (CentOS 7)
env:
CXX_STANDARD: 17
CXX: g++
CXX_VERSION: 10
CC: gcc
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS7-devel.sif \
scl enable devtoolset-${CXX_VERSION} -- \
cmake3 -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: GCC 11, C++11 (CentOS 9)
env:
CXX_STANDARD: 11
CXX: g++
CXX_VERSION: 11
CC: gcc
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel.sif \
cmake -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: GCC 11, C++20 (CentOS 9)
env:
CXX_STANDARD: 20
CXX: g++
CXX_VERSION: 11
CC: gcc
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel.sif \
cmake -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: GCC 12, C++20 (CentOS 9)
env:
CXX_STANDARD: 20
CXX: g++
CXX_VERSION: 12
CC: gcc
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel.sif \
scl enable gcc-toolset-12 -- \
cmake -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: GCC 13, C++20 (CentOS 9)
env:
CXX_STANDARD: 20
CXX: g++
CXX_VERSION: 13
CC: gcc
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel.sif \
scl enable gcc-toolset-13 -- \
cmake -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: Clang 16, C++11 (CentOS 9)
env:
CXX_STANDARD: 11
CXX: clang++
CXX_VERSION: 16
CC: clang
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel.sif \
cmake -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: Clang 16, C++20 (CentOS 9)
env:
CXX_STANDARD: 20
CXX: clang++
CXX_VERSION: 16
CC: clang
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel.sif \
cmake -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake
- name: Keep only one cache besides the one from this job
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: |
bash ${{ github.workspace }}/devel-tools/cleanup-gh-cache.sh Linux-build-multiple-
build-linux-x86_64-sun:
name: Linux x86_64 (Sun compiler)
runs-on: ubuntu-latest
needs: basicchecks
if: needs.basicchecks.outputs.hassecrets == 'true'
steps:
- uses: actions/checkout@v4
- name: Checkout Sun compiler (Oracle Developer Studio)
uses: actions/checkout@v4
with:
repository: 'Colvars/oracle'
ssh-key: ${{ secrets.PULL_ORACLE_DEVELOPER_STUDIO }}
ref: 'master'
path: ${{github.workspace}}/oracle
- name: Get small downloadable packages
uses: actions/checkout@v4
with:
repository: 'Colvars/build-tools-packages'
ref: 'master'
path: 'devel-tools/packages'
- name: Install Apptainer
shell: bash
run: |
sudo add-apt-repository -y ppa:apptainer/ppa
sudo apt update
sudo apt install -y apptainer-suid
- name: Get container images for build dependencies
shell: bash
working-directory: devel-tools
run: |
apptainer pull CentOS7-devel.sif oras://ghcr.io/colvars/devel-containers:CentOS7-devel
- name: Build library with Sun compiler (Oracle Developer Studio)
shell: bash
env:
CC: ${{github.workspace}}/oracle/developerstudio12.6/bin/cc
CXX: ${{github.workspace}}/oracle/developerstudio12.6/bin/CC
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS7-devel.sif \
cmake3 -D CMAKE_CXX_STANDARD=11 -P devel-tools/build_test_library.cmake
build-linux-x86_64-intel:
name: Linux x86_64 (Intel oneAPI)
runs-on: ubuntu-latest
needs: basicchecks
env:
CCACHE: ccache
CMAKE_GENERATOR: Ninja
CCACHE_DIR: ${{ github.workspace }}/ccache
steps:
- uses: actions/checkout@v4
- name: Load compiler ccache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/ccache
key: ${{ runner.os }}-build-oneapi-${{ github.sha }}
restore-keys: ${{ runner.os }}-build-oneapi-
- name: Get small downloadable packages
uses: actions/checkout@v4
with:
repository: 'Colvars/build-tools-packages'
ref: 'master'
path: 'devel-tools/packages'
- name: Install Apptainer
shell: bash
run: |
sudo add-apt-repository -y ppa:apptainer/ppa
sudo apt update
sudo apt install -y apptainer-suid
- name: Get container images for build dependencies
shell: bash
working-directory: devel-tools
run: |
apptainer pull CentOS9-devel-oneAPI.sif oras://ghcr.io/colvars/devel-containers:CentOS9-devel-oneAPI
- name: Intel oneAPI 2024.2, C++11
shell: bash
env:
CC: icx
CXX: icpx
CXX_STANDARD: 11
BASH_ENV: "/etc/profile.d/oneapi.sh"
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel-oneAPI.sif \
bash -c "cmake -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake"
- name: Intel oneAPI 2024.2, C++14
shell: bash
env:
CC: icx
CXX: icpx
CXX_STANDARD: 14
BASH_ENV: "/etc/profile.d/oneapi.sh"
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel-oneAPI.sif \
bash -c "cmake -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake"
- name: Intel oneAPI 2024.2, C++17
shell: bash
env:
CC: icx
CXX: icpx
CXX_STANDARD: 17
BASH_ENV: "/etc/profile.d/oneapi.sh"
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel-oneAPI.sif \
bash -c "cmake -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake"
- name: Intel oneAPI 2024.2, C++20
shell: bash
env:
CC: icx
CXX: icpx
CXX_STANDARD: 20
BASH_ENV: "/etc/profile.d/oneapi.sh"
run: |
apptainer exec ${{github.workspace}}/devel-tools/CentOS9-devel-oneAPI.sif \
bash -c "cmake -D CMAKE_CXX_STANDARD=${CXX_STANDARD} -P devel-tools/build_test_library.cmake"
build-windows-x86_64-msvc:
name: Windows x86_64 (MSVC)
runs-on: windows-latest
needs: basicchecks
steps:
- uses: actions/checkout@v4
- name: Get small downloadable packages
uses: actions/checkout@v4
with:
repository: 'Colvars/build-tools-packages'
ref: 'master'
path: 'devel-tools/packages'
- name: Build and test library with CMake
# We need to set CMAKE_SYSTEM_NAME manually in script mode
run: cmake -D CMAKE_SYSTEM_NAME=Windows -P devel-tools/build_test_library.cmake
build-macos-ARM64-clang:
name: macOS ARM64 (AppleClang)
runs-on: macos-latest
needs: basicchecks
steps:
- uses: actions/checkout@v4
- name: Get small downloadable packages
uses: actions/checkout@v4
with:
repository: 'Colvars/build-tools-packages'
ref: 'master'
path: 'devel-tools/packages'
- name: Build and test library with CMake
# We need to set CMAKE_SYSTEM_NAME manually in script mode
run: cmake -D CMAKE_SYSTEM_NAME=Darwin -P devel-tools/build_test_library.cmake