name: arpack-ng on: [push, pull_request] jobs: ubuntu_latest_cmake: runs-on: ubuntu-latest steps: - name: Clone and check out repository code uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{github.event.pull_request.head.ref}} # Branch where changes are implemented. repository: ${{github.event.pull_request.head.repo.full_name}} # Repo where changes are implemented. - name: Check commit run: | git log -1 - name: Update OS run: sudo apt-get update - name: Install apt-get dependencies run: sudo apt-get install -y gfortran gcc g++ openmpi-bin libopenmpi-dev libblas-dev liblapack-dev libeigen3-dev cmake - name: Run job run: | mkdir build cd build cmake -DEXAMPLES=ON -DMPI=ON -DICB=ON -DEIGEN=ON .. make all CTEST_OUTPUT_ON_FAILURE=1 make test make package_source ubuntu_latest_cmake_install: runs-on: ubuntu-latest steps: - name: Clone and check out repository code uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{github.event.pull_request.head.ref}} # Branch where changes are implemented. repository: ${{github.event.pull_request.head.repo.full_name}} # Repo where changes are implemented. - name: Check commit run: | git log -1 - name: Update OS run: sudo apt-get update - name: Install apt-get dependencies run: sudo apt-get install -y gfortran gcc g++ openmpi-bin libopenmpi-dev libblas-dev liblapack-dev libeigen3-dev cmake - name: Run job run: | mkdir build cd build cmake .. bash ./tstCMakeInstall.sh bash ./tstCMakeInstall.sh 64- bash ./tstCMakeInstall.sh -ILP64 bash ./tstCMakeInstall.sh 64-ILP64 ubuntu_latest_autotools: runs-on: ubuntu-latest steps: - name: Clone and check out repository code uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{github.event.pull_request.head.ref}} # Branch where changes are implemented. repository: ${{github.event.pull_request.head.repo.full_name}} # Repo where changes are implemented. - name: Check commit run: | git log -1 - name: Update OS run: sudo apt-get update - name: Install apt-get dependencies run: sudo apt-get install -y gfortran gcc g++ openmpi-bin libopenmpi-dev libblas-dev liblapack-dev libeigen3-dev automake autoconf pkg-config libtool - name: Run job run: | ./bootstrap ./configure --enable-mpi --enable-icb --enable-eigen make all make check make distcheck ubuntu_latest_autotools_install: runs-on: ubuntu-latest steps: - name: Clone and check out repository code uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{github.event.pull_request.head.ref}} # Branch where changes are implemented. repository: ${{github.event.pull_request.head.repo.full_name}} # Repo where changes are implemented. - name: Check commit run: | git log -1 - name: Update OS run: sudo apt-get update - name: Install apt-get dependencies run: sudo apt-get install -y gfortran gcc g++ openmpi-bin libopenmpi-dev libblas-dev liblapack-dev libeigen3-dev automake autoconf pkg-config libtool - name: Run job run: | ./bootstrap ./configure bash ./tstAutotoolsInstall.sh bash ./tstAutotoolsInstall.sh 64- bash ./tstAutotoolsInstall.sh -ILP64 bash ./tstAutotoolsInstall.sh 64-ILP64 ubuntu_latest_cmake_python: runs-on: ubuntu-latest steps: - name: Clone and check out repository code uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{github.event.pull_request.head.ref}} # Branch where changes are implemented. repository: ${{github.event.pull_request.head.repo.full_name}} # Repo where changes are implemented. - name: Check commit run: | git log -1 - name: Update OS run: sudo apt-get update - name: Install apt-get dependencies run: sudo apt-get install -y gfortran gcc g++ openmpi-bin libopenmpi-dev libblas-dev liblapack-dev cmake libeigen3-dev - name: Install python dependencies run: sudo apt-get -y install python3-minimal python3-pip python3-numpy - name: Build boost-python for python3 (not provided by apt-cache) run : | sudo apt-get -y install wget wget https://sourceforge.net/projects/boost/files/boost/1.79.0/boost_1_79_0.tar.gz tar -xf boost_1_79_0.tar.gz cd boost_1_79_0 ./bootstrap.sh --with-libraries=python --with-python=/usr/bin/python3 --with-toolset=gcc sudo ./b2 toolset=gcc install sudo apt-get install locate sudo updatedb - name: Run job run: | mkdir build cd build cmake -DEXAMPLES=ON -DMPI=ON -DICB=ON -DEIGEN=ON -DPYTHON3=ON .. make all CTEST_OUTPUT_ON_FAILURE=1 make test ubuntu_latest_autotools_ilp64: runs-on: ubuntu-latest steps: - name: Clone and check out repository code uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{github.event.pull_request.head.ref}} # Branch where changes are implemented. repository: ${{github.event.pull_request.head.repo.full_name}} # Repo where changes are implemented. - name: Check commit run: | git log -1 - name: Update OS run: sudo apt-get update - name: Install apt-get dependencies run: sudo apt-get install -y gfortran gcc g++ openmpi-bin libopenmpi-dev libblas-dev liblapack-dev automake autoconf pkg-config libtool libeigen3-dev - name: Install Intel MKL (ILP64 blas/lapack) run: echo yes | sudo apt-get -y install intel-mkl libmkl-dev - name: Run job run: | ./bootstrap ./configure --enable-icb --with-blas=mkl_gf_ilp64 --with-lapack=mkl_gf_ilp64 make all make check env: FFLAGS: "-DMKL_ILP64 -I/usr/include/mkl" FCFLAGS: "-DMKL_ILP64 -I/usr/include/mkl" LIBS: "-Wl,--no-as-needed -L/usr/lib/x86_64-linux-gnu -lmkl_sequential -lmkl_core -lpthread -lm -ldl" INTERFACE64: "1" macos_latest_cmake: runs-on: macos-latest steps: - name: Clone and check out repository code uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{github.event.pull_request.head.ref}} # Branch where changes are implemented. repository: ${{github.event.pull_request.head.repo.full_name}} # Repo where changes are implemented. - name: Check commit run: | git log -1 - name: Install brew dependencies run: | brew reinstall gcc # brings gfortran on path brew install cmake open-mpi eigen veclibfort - name: Run job run: | mkdir -p build cd build export FC=mpif90 # Uses gfortran. export CC=mpicc # Uses clang. export CFLAGS="-Qunused-arguments" export CXX=mpic++ # Uses clang++. export CXXFLAGS="-Qunused-arguments" export VECLIBFORT_PREFIX=$(brew --prefix veclibfort) cmake \ -DBLAS_LIBRARIES="${VECLIBFORT_PREFIX}/lib/libvecLibFort.dylib" \ -DLAPACK_LIBRARIES="${VECLIBFORT_PREFIX}/lib/libvecLibFort.dylib" \ -DEXAMPLES=ON -DICB=ON -DEIGEN=ON -DMPI=ON .. make all CTEST_OUTPUT_ON_FAILURE=1 make test macos_latest_cmake_python: runs-on: macos-latest steps: - name: Clone and check out repository code uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{github.event.pull_request.head.ref}} # Branch where changes are implemented. repository: ${{github.event.pull_request.head.repo.full_name}} # Repo where changes are implemented. - name: Check commit run: | git log -1 - name: Install brew dependencies run: | # Unlink and re-link to prevent errors when github mac runner images # install python outside of brew, for example: # https://github.com/orgs/Homebrew/discussions/3895 # https://github.com/actions/setup-python/issues/577 # https://github.com/actions/runner-images/issues/6459 # https://github.com/actions/runner-images/issues/6507 # https://github.com/actions/runner-images/issues/2322 brew list -1 | grep python | while read formula; do brew unlink $formula; brew link --overwrite $formula; done brew reinstall gcc # brings gfortran on path brew install cmake eigen boost-python3 python3 numpy veclibfort - name: Run job run: | mkdir -p build cd build export FC=gfortran export CC=clang export CFLAGS="-Qunused-arguments" export CXX=clang++ export CXXFLAGS="-Qunused-arguments" export VECLIBFORT_PREFIX=$(brew --prefix veclibfort) cmake \ -DBLAS_LIBRARIES="${VECLIBFORT_PREFIX}/lib/libvecLibFort.dylib" \ -DLAPACK_LIBRARIES="${VECLIBFORT_PREFIX}/lib/libvecLibFort.dylib" \ -DEXAMPLES=ON -DICB=ON -DEIGEN=ON -DPYTHON3=ON .. make all CTEST_OUTPUT_ON_FAILURE=1 make test macos_latest_autotools: runs-on: macos-latest steps: - name: Clone and check out repository code uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{github.event.pull_request.head.ref}} # Branch where changes are implemented. repository: ${{github.event.pull_request.head.repo.full_name}} # Repo where changes are implemented. - name: Check commit run: | git log -1 - name: Install brew dependencies run: | brew reinstall gcc # brings gfortran on path brew install autoconf automake libtool pkgconfig open-mpi eigen veclibfort - name: Run job run: | ./bootstrap export VECLIBFORT_PREFIX=$(brew --prefix veclibfort) BLAS_LIBS="-L${VECLIBFORT_PREFIX}/lib -lvecLibFort" \ LAPACK_LIBS="-L${VECLIBFORT_PREFIX}/lib -lvecLibFort" \ ./configure --enable-icb --enable-eigen --enable-mpi make all make check windows_latest_cmake: runs-on: windows-latest name: MinGW-w64 ${{ matrix.msystem }} INTERFACE64=${{ matrix.int64 }}/MPI=${{ matrix.mpi }} strategy: fail-fast: false matrix: msystem: [UCRT64, CLANG64] int64: [ON, OFF] mpi: [ON, OFF] exclude: - int64: ON mpi: ON defaults: run: # Use MSYS2 as default shell shell: msys2 {0} steps: - name: Install MSYS2 build environment uses: msys2/setup-msys2@v2 with: update: true msystem: ${{ matrix.msystem }} install: >- base-devel git pacboy: >- cmake:p ninja:p cc:p fc:p eigen3:p - name: Install OpenBLAS and MS-MPI from MSYS2 run: | if [[ ${{ matrix.int64 }} != ON ]]; then pacboy -S openblas:p --noconfirm else pacboy -S openblas64:p --noconfirm fi if [[ ${{ matrix.mpi }} = ON ]]; then # This installs only the link library. # The actual library will be installed in the next step. pacboy -S msmpi:p --noconfirm fi - name: Install MS-MPI (for mpiexec) uses: mpi4py/setup-mpi@v1 - name: Clone and check out repository code uses: actions/checkout@v7 with: fetch-depth: 0 ref: ${{github.event.pull_request.head.ref}} # Branch where changes are implemented. repository: ${{github.event.pull_request.head.repo.full_name}} # Repo where changes are implemented. - name: Check commit run: | git log -1 - name: Run job run: | mkdir -p build && cd build echo "::group::Configure" if [[ ${{ matrix.int64 }} == ON ]]; then _blas_lib_flag="-DBLAS_LIBRARIES=openblas_64" fi cmake \ -GNinja \ -DICB=ON \ -DEIGEN=ON \ -DEXAMPLES=ON \ -DMPI=${{ matrix.mpi }} \ -DINTERFACE64=${{ matrix.int64 }} \ ${_blas_lib_flag} \ .. echo "::endgroup::" echo "::group::Build" cmake --build . -v echo "::endgroup::" - name: Run tests id: run-ctest run: | if [[ ${{ matrix.mpi }} == ON ]]; then export PATH="/c/Program Files/Microsoft MPI/Bin":$PATH # add mpiexec to msys2 path fi cd build ctest - name: Re-run tests if: always() && (steps.run-ctest.outcome == 'failure') timeout-minutes: 60 run: | if [[ ${{ matrix.mpi }} == ON ]]; then export PATH="/c/Program Files/Microsoft MPI/Bin":$PATH # add mpiexec to msys2 path fi cd build echo "::group::Re-run ctest" ctest --rerun-failed --output-on-failure || true echo "::endgroup::" echo "::group::Log from these tests" [ ! -f Testing/Temporary/LastTest.log ] || cat Testing/Temporary/LastTest.log echo "::endgroup::" echo "::group::Content of arpackmm.run.log" [ ! -f EXAMPLES/MATRIX_MARKET/arpackmm.run.log ] || cat EXAMPLES/MATRIX_MARKET/arpackmm.run.log echo "::endgroup::"