pipeline {
    agent none

    options {
        timeout(time: 6, unit: 'HOURS')
    }

    stages {
        stage('Build') {
            parallel {
                stage('spack-serial') {
                    agent {
                        docker {
                          image 'ubuntu:22.04'
                          label 'docker'
                        }
                    }
                    steps {
                        sh '''
                          DEBIAN_FRONTEND=noninteractive && \
                          apt-get update && apt-get upgrade -y && apt-get install -y \
                          build-essential \
                          wget \
                          git \
                          bc \
                          python3-dev \
                          && \
                          apt-get clean && rm -rf /var/lib/apt/lists/*

                          rm -rf spack && \
                          git clone https://github.com/spack/spack.git && \
                          . ./spack/share/spack/setup-env.sh && \
                          spack install kokkos@develop+tests && \
                          spack load cmake && \
                          spack test run kokkos && \
                          spack test results -l
                          '''
                    }      
                }   
                stage('spack-cuda') {
                    agent {
                        docker {
                          image 'nvidia/cuda:12.1.0-devel-ubuntu22.04'
                          label 'nvidia-docker && ampere'
                        }
                    }
                    steps {
                        sh '''
                          DEBIAN_FRONTEND=noninteractive && \
                          apt-get update && apt-get upgrade -y && apt-get install -y \
                          build-essential \
                          wget \
                          git \
                          bc \
                          python3-dev \
                          gfortran \
                          && \
                          apt-get clean && rm -rf /var/lib/apt/lists/*

                          rm -rf spack && \
                          git clone https://github.com/spack/spack.git && \
                          . ./spack/share/spack/setup-env.sh && \
                          spack install kokkos@develop+cuda+wrapper+tests cuda_arch=80 ^cuda@12.1.0 && \
                          spack load cmake  && \
                          spack load kokkos-nvcc-wrapper && \
                          spack load cuda && \
                          spack load kokkos && \
                          spack test run kokkos && \
                          spack test results -l
                          '''
                    }      
                }   
                stage('GCC-13') {
                    agent {
                        docker {
                            image 'gcc:13.1'
                            label 'docker'
                        }
                    }
                    steps {
                        sh '''
                          DEBIAN_FRONTEND=noninteractive && \
                          apt-get update && apt-get upgrade -y && apt-get install -y \
                          cmake \
                          && \
                          apt-get clean && rm -rf /var/lib/apt/lists/*

                          mkdir -p build && cd build && \
                          cmake \
                            -DCMAKE_BUILD_TYPE=Release \
                            -DCMAKE_CXX_STANDARD=23 \
                            -DCMAKE_CXX_FLAGS=-Werror \
                            -DKokkos_ARCH_NATIVE=ON \
                            -DKokkos_ENABLE_COMPILER_WARNINGS=ON \
                            -DKokkos_ENABLE_BENCHMARKS=ON \
                            -DKokkos_ENABLE_EXAMPLES=ON \
                            -DKokkos_ENABLE_TESTS=ON \
                            -DKokkos_ENABLE_DEPRECATION_WARNINGS=OFF \
                            -DKokkos_ENABLE_SERIAL=ON \
                          .. && \
                          make -j8 && ctest --verbose
                          '''
                    }
                }
            }
        }
    }
}
