Skip to content

Commit

Permalink
Merge pull request #11 from Pressio/2-Enable-github-actions-via-docker
Browse files Browse the repository at this point in the history
#2: Enable GitHub actions via docker
  • Loading branch information
fnrizzi authored Jan 30, 2022
2 parents fca5241 + a400144 commit fff2282
Show file tree
Hide file tree
Showing 5 changed files with 231 additions and 52 deletions.
74 changes: 26 additions & 48 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,61 +5,43 @@ name: Build/Test SHAW # GUI display name

on: # Triggers, see https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows
push:
branches: [master, develop]
branches: [ master, develop ]
pull_request:
branches: [master, develop]
branches: [ master, develop ]

#concurrency: # Concurrency group: which jobs run together and which cancel each other
# concurrency: # Concurrency group: which jobs run together and which cancel each other
# group: CI-${{ github.head_ref }}
# cancel-in-progress: true

jobs:
CI:
runs-on: ubuntu-latest

strategy:
fail-fast: false # true -> cancel all jobs if any fails
max-parallel: 8

# Build matrix for your jobs: you can define different variations to run each job in
# matrix configurations - reachable with ${{ matrix.config.<key> }}.
# Extra options:
# - cxx: path to C++ compiler
# - cxx: C++ compiler
# - mode: build mode inside Pressio (Debug / Release)
matrix:
config:
- { cxx: clang++ }
- { cxx: g++ }
- { cxx: clang++-10, image: ubuntu-20.04-kokkos_3.5.00-kokkoskernels_3.5.00-yamlcpp_0.7.0-openmp }
- { cxx: g++-10, image: ubuntu-20.04-kokkos_3.5.00-kokkoskernels_3.5.00-yamlcpp_0.7.0-openmp-clang }

env: # environment variables available to all steps
CXX: ${{ matrix.config.cxx }}
APT_PACKAGES: python3 pip python-is-python3 g++ clang gpg wget libyaml-cpp-dev
PIP_PACKAGES: pytest numpy scipy matplotlib
SHAWDIR: /home/runner/work/SHAW/SHAW
WORKDIR: /home/runner/work/build
SHAWBUILDDEB_DIR: /home/runner/work/build/shaw-build-debug
SHAWBUILDREL_DIR: /home/runner/work/build/shaw-build-release
SHAW_DIR: /__w/SHAW/SHAW
WORK_DIR: /out/build
SHAWBUILDDEB_DIR: /out/build/shaw-build-debug
SHAWBUILDREL_DIR: /out/build/shaw-build-release

container: pressiomodelreduction/${{ matrix.config.image }}

steps:
- uses: actions/checkout@v2 # check out the repository

- name: Install packages
run: |
sudo apt-get update
sudo apt-get install -y --install-suggests $APT_PACKAGES
# - name: Install CMake
# run: |
# export CMAKE_KEYRING=/usr/share/keyrings/kitware-archive-keyring.gpg
# wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null \
# | gpg --dearmor - \
# | sudo tee $CMAKE_KEYRING >/dev/null
# echo "deb [signed-by=$CMAKE_KEYRING] https://apt.kitware.com/ubuntu/ focal main" \
# | sudo tee /etc/apt/sources.list.d/kitware.list >/dev/null
# sudo apt-get update
# rm $CMAKE_KEYRING
# sudo apt-get install -y kitware-archive-keyring cmake

- name: Check environment
run: |
echo ======================================================
Expand All @@ -73,36 +55,31 @@ jobs:
echo ======================================================
cmake --version
echo ======================================================
echo Source directory: $SHAWDIR
echo work directory: $WORKDIR
echo Source directory: $SHAW_DIR
echo work directory: $WORK_DIR
echo ======================================================
git --version
cd $SHAWDIR
cd $SHAW_DIR
git status
git branch
- name: Install required Python modules
run: |
sudo pip install $PIP_PACKAGES
pip install $PIP_PACKAGES
echo ======================================================
pip list
echo ======================================================
- name: Build/Install TPLs
run: |
mkdir $WORKDIR
cd $SHAWDIR/bash_scripts
bash build_tpls.sh $WORKDIR
- name: Configure SHAW (debug)
run: |
cd $WORKDIR
cd $WORK_DIR
cmake \
-DCMAKE_VERBOSE_MAKEFILE:STRING=On \
-DCMAKE_BUILD_TYPE:STRING=Debug \
-DKokkosKernels_DIR=$WORKDIR/tpls/kokkos-kernels-install/lib/cmake/KokkosKernels \
-B $SHAWBUILDDEB_DIR -S $SHAWDIR
#-Dyaml-cpp_DIR=$WORKDIR/tpls/yamlcpp-install/share/cmake \
-DKokkosKernels_DIR=/tpl/kokkoskernels/lib/cmake/KokkosKernels \
-Dyaml-cpp_DIR=/tpl/yamlcpp/share/cmake/yaml-cpp \
-DYAMLCPP_DIR=/tpl/yamlcpp \
-B $SHAWBUILDDEB_DIR -S $SHAW_DIR
- name: Build/run C++ tests (debug)
run: |
Expand All @@ -113,13 +90,14 @@ jobs:
- name: Configure SHAW (release)
run: |
cd $WORKDIR
cd $WORK_DIR
cmake \
-DCMAKE_VERBOSE_MAKEFILE:STRING=On \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DKokkosKernels_DIR=$WORKDIR/tpls/kokkos-kernels-install/lib/cmake/KokkosKernels \
-B $SHAWBUILDREL_DIR -S $SHAWDIR
#-Dyaml-cpp_DIR=$WORKDIR/tpls/yamlcpp-install/share/cmake \
-DKokkosKernels_DIR=/tpl/kokkoskernels/lib/cmake/KokkosKernels \
-Dyaml-cpp_DIR=/tpl/yamlcpp/share/cmake/yaml-cpp \
-DYAMLCPP_DIR=/tpl/yamlcpp \
-B $SHAWBUILDREL_DIR -S $SHAW_DIR
- name: Build/run C++ tests (release)
run: |
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.idea
venv
14 changes: 10 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,17 @@ set(CMAKE_CXX_EXTENSIONS OFF)

#==================================

find_package(yaml-cpp REQUIRED)
message(STATUS ${YAML_CPP_INCLUDE_DIR})
include_directories(${YAML_CPP_INCLUDE_DIR})
find_package(yaml-cpp REQUIRED HINTS ${YAMLCPP_DIR})
include_directories(${YAMLCPP_DIR}/include)

find_package(KokkosKernels REQUIRED)
if(EXISTS "${YAMLCPP_DIR}/lib64/libyaml-cpp.a")
set(YAML_CPP_LIBRARIES ${YAMLCPP_DIR}/lib64/libyaml-cpp.a)
endif()
if(EXISTS "${YAMLCPP_DIR}/lib/libyaml-cpp.a")
set(YAML_CPP_LIBRARIES ${YAMLCPP_DIR}/lib/libyaml-cpp.a)
endif()

find_package(KokkosKernels REQUIRED HINTS ${KOKKOSKERNELS_DIR})

# executables
add_executable(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
FROM ubuntu:focal
# Declaring build variables
# Timezone
ARG TZ=Europe/Warsaw
# CMake Version
ARG CMAKE_VERSION=3.18.6
# Compilers
ARG CLANG_VER=10
ARG CC=clang-$CLANG_VER
ARG CXX=clang++-$CLANG_VER
ARG GFORTRAN=gfortran-9
ARG CC_PATH=/usr/bin/$CC
ARG CXX_PATH=/usr/bin/$CXX
# Options
ARG ENABLE_OPENMP=On
# TPLs
ARG KOKKOS_VER=3.5.00
ARG KOKKOSKERNELS_VER=3.5.00
ARG YAMLCPP_VER=0.7.0
ARG SRC=/src
ARG LIB=/tpl
ARG KOKKOS_SRC=$SRC/kokkos
ARG KOKKOSKERNELS_SRC=$SRC/kokkoskernels
ARG YAMLCPP_SRC=$SRC/yamlcpp
ARG KOKKOS_LIB=$LIB/kokkos
ARG KOKKOSKERNELS_LIB=$LIB/kokkoskernels
ARG YAMLCPP_LIB=$LIB/yamlcpp
ARG SHAWBUILDDEB_DIR=/out/build/shaw-build-debug
ARG SHAWBUILDREL_DIR=/out/build/shaw-build-release

# Setting timezone
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Creating in and out directories
RUN mkdir /in
RUN mkdir /out
RUN mkdir -p $KOKKOS_SRC
RUN mkdir -p $KOKKOSKERNELS_SRC
RUN mkdir -p $YAMLCPP_SRC
RUN mkdir -p $KOKKOS_LIB
RUN mkdir -p $KOKKOSKERNELS_LIB
RUN mkdir -p $YAMLCPP_LIB
RUN mkdir -p $SHAWBUILDDEB_DIR
RUN mkdir -p $SHAWBUILDREL_DIR

# System update and packages installation
RUN apt-get update && apt-get upgrade -y
# Installing Utilities
RUN apt-get install -y wget git make hwloc python3-pip python-is-python3
# Installing OpenMPI
RUN apt-get install -y openmpi-bin openmpi-doc
# Installing Libraries
RUN apt-get install -y libopenblas-dev liblapack-dev

# CMake installation
RUN wget -O cmake.sh https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/cmake-$CMAKE_VERSION-Linux-x86_64.sh
RUN sh cmake.sh --skip-license --exclude-subdir --prefix=/usr/local/
RUN rm cmake.sh

# Compilers installation
RUN apt-get install -y $CC $CC-doc $GFORTRAN

# Building TPLs
# Building Kokkos
WORKDIR $KOKKOS_SRC
RUN wget -O $KOKKOS_VER.tar.gz https://github.com/kokkos/kokkos/archive/refs/tags/$KOKKOS_VER.tar.gz
RUN tar -xzf $KOKKOS_VER.tar.gz
WORKDIR $KOKKOS_SRC/kokkos-$KOKKOS_VER
RUN mkdir build && cd build && cmake .. -DCMAKE_CXX_COMPILER=$CXX_PATH -DCMAKE_INSTALL_PREFIX=$KOKKOS_LIB -DKokkos_ENABLE_SERIAL=$ENABLE_OPENMP -DKokkos_ENABLE_OPENMP=On -DKokkos_ARCH_HSW=On -DKokkos_HWLOC_DIR=/usr/bin -DKokkos_ENABLE_AGGRESSIVE_VECTORIZATION=Off -DKokkos_ENABLE_TESTS=On && make install -j 8 && make test -j 8
# Building Kokkoskernels
WORKDIR $KOKKOSKERNELS_SRC
RUN wget -O $KOKKOSKERNELS_VER.tar.gz https://github.com/kokkos/kokkos-kernels/archive/refs/tags/$KOKKOSKERNELS_VER.tar.gz
RUN tar -xzf $KOKKOSKERNELS_VER.tar.gz
WORKDIR $KOKKOSKERNELS_SRC/kokkos-kernels-$KOKKOSKERNELS_VER
RUN mkdir build && cd build && cmake .. -DCMAKE_CXX_COMPILER=$CXX_PATH -DCMAKE_INSTALL_PREFIX=$KOKKOSKERNELS_LIB -DKokkos_ROOT=$KOKKOS_LIB/lib/cmake/Kokkos -DKokkosKernels_ENABLE_TPL_LAPACK=On -DKokkosKernels_ENABLE_TPL_BLAS=On -DKokkosKernels_INST_DOUBLE=On -DKokkosKernels_INST_LAYOUTRIGHT=On -DKokkosKernels_INST_LAYOUTLEFT=On -DKokkosKernels_INST_ORDINAL_INT=Off -DKokkosKernels_INST_ORDINAL_INT64_T=On -DKokkosKernels_INST_OFFSET_INT=Off -DKokkosKernels_INST_OFFSET_SIZE_T=On -DKokkosKernels_ENABLE_TESTS=On && make install -j 8 && make test -j 8
# Building YAMLCPP
WORKDIR $YAMLCPP_SRC
RUN wget -O $YAMLCPP_VER.tar.gz https://github.com/jbeder/yaml-cpp/archive/refs/tags/yaml-cpp-$YAMLCPP_VER.tar.gz
RUN tar -xzf $YAMLCPP_VER.tar.gz
WORKDIR $YAMLCPP_SRC/yaml-cpp-yaml-cpp-$YAMLCPP_VER
RUN mkdir build && cd build && cmake .. -DCMAKE_CXX_COMPILER=$CXX_PATH -DCMAKE_INSTALL_PREFIX=$YAMLCPP_LIB -DYAML_CPP_BUILD_TESTS=On && make install -j 8 && make test -j 8

# Clean up
WORKDIR /
RUN rm -rf $SRC

# Setting environment variables
ENV CC=$CC_PATH
ENV CXX=$CXX_PATH

# Setting workdir to /in
WORKDIR /in
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
FROM ubuntu:focal
# Declaring build variables
# Timezone
ARG TZ=Europe/Warsaw
# CMake Version
ARG CMAKE_VERSION=3.18.6
# Compilers
ARG GNU_VER=10
ARG CC=gcc-$GNU_VER
ARG CXX=g++-$GNU_VER
ARG GFORTRAN=gfortran-$GNU_VER
ARG CC_PATH=/usr/bin/$CC
ARG CXX_PATH=/usr/bin/$CXX
# Options
ARG ENABLE_OPENMP=On
# TPLs
ARG KOKKOS_VER=3.5.00
ARG KOKKOSKERNELS_VER=3.5.00
ARG YAMLCPP_VER=0.7.0
ARG SRC=/src
ARG LIB=/tpl
ARG KOKKOS_SRC=$SRC/kokkos
ARG KOKKOSKERNELS_SRC=$SRC/kokkoskernels
ARG YAMLCPP_SRC=$SRC/yamlcpp
ARG KOKKOS_LIB=$LIB/kokkos
ARG KOKKOSKERNELS_LIB=$LIB/kokkoskernels
ARG YAMLCPP_LIB=$LIB/yamlcpp
ARG SHAWBUILDDEB_DIR=/out/build/shaw-build-debug
ARG SHAWBUILDREL_DIR=/out/build/shaw-build-release

# Setting timezone
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Creating in and out directories
RUN mkdir /in
RUN mkdir /out
RUN mkdir -p $KOKKOS_SRC
RUN mkdir -p $KOKKOSKERNELS_SRC
RUN mkdir -p $YAMLCPP_SRC
RUN mkdir -p $KOKKOS_LIB
RUN mkdir -p $KOKKOSKERNELS_LIB
RUN mkdir -p $YAMLCPP_LIB
RUN mkdir -p $SHAWBUILDDEB_DIR
RUN mkdir -p $SHAWBUILDREL_DIR

# System update and packages installation
RUN apt-get update && apt-get upgrade -y
# Installing Utilities
RUN apt-get install -y wget git make hwloc python3-pip python-is-python3
# Installing OpenMPI
RUN apt-get install -y openmpi-bin openmpi-doc
# Installing Libraries
RUN apt-get install -y libopenblas-dev liblapack-dev

# CMake installation
RUN wget -O cmake.sh https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/cmake-$CMAKE_VERSION-Linux-x86_64.sh
RUN sh cmake.sh --skip-license --exclude-subdir --prefix=/usr/local/
RUN rm cmake.sh

# Compilers installation
RUN apt-get install -y $CC $CXX $GFORTRAN
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/$CC 10
RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/$CXX 10
RUN update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/$GFORTRAN 10
RUN update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 20
RUN update-alternatives --set cc /usr/bin/gcc
RUN update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 20
RUN update-alternatives --set c++ /usr/bin/g++
RUN update-alternatives --install /usr/bin/fortrann fortrann /usr/bin/gfortran 20
RUN update-alternatives --set fortrann /usr/bin/gfortran

# Building TPLs
# Building Kokkos
WORKDIR $KOKKOS_SRC
RUN wget -O $KOKKOS_VER.tar.gz https://github.com/kokkos/kokkos/archive/refs/tags/$KOKKOS_VER.tar.gz
RUN tar -xzf $KOKKOS_VER.tar.gz
WORKDIR $KOKKOS_SRC/kokkos-$KOKKOS_VER
RUN mkdir build && cd build && cmake .. -DCMAKE_CXX_COMPILER=$CXX_PATH -DCMAKE_INSTALL_PREFIX=$KOKKOS_LIB -DKokkos_ENABLE_SERIAL=On -DKokkos_ENABLE_OPENMP=$ENABLE_OPENMP -DKokkos_ARCH_HSW=On -DKokkos_HWLOC_DIR=/usr/bin -DKokkos_ENABLE_AGGRESSIVE_VECTORIZATION=Off -DKokkos_ENABLE_TESTS=On && make install -j 8 && make test -j 8
# Building Kokkoskernels
WORKDIR $KOKKOSKERNELS_SRC
RUN wget -O $KOKKOSKERNELS_VER.tar.gz https://github.com/kokkos/kokkos-kernels/archive/refs/tags/$KOKKOSKERNELS_VER.tar.gz
RUN tar -xzf $KOKKOSKERNELS_VER.tar.gz
WORKDIR $KOKKOSKERNELS_SRC/kokkos-kernels-$KOKKOSKERNELS_VER
RUN mkdir build && cd build && cmake .. -DCMAKE_CXX_COMPILER=$CXX_PATH -DCMAKE_INSTALL_PREFIX=$KOKKOSKERNELS_LIB -DKokkos_ROOT=$KOKKOS_LIB/lib/cmake/Kokkos -DKokkosKernels_ENABLE_TPL_LAPACK=On -DKokkosKernels_ENABLE_TPL_BLAS=On -DKokkosKernels_INST_DOUBLE=On -DKokkosKernels_INST_LAYOUTRIGHT=On -DKokkosKernels_INST_LAYOUTLEFT=On -DKokkosKernels_INST_ORDINAL_INT=Off -DKokkosKernels_INST_ORDINAL_INT64_T=On -DKokkosKernels_INST_OFFSET_INT=Off -DKokkosKernels_INST_OFFSET_SIZE_T=On -DKokkosKernels_ENABLE_TESTS=On && make install -j 8 && make test -j 8
# Building YAMLCPP
WORKDIR $YAMLCPP_SRC
RUN wget -O $YAMLCPP_VER.tar.gz https://github.com/jbeder/yaml-cpp/archive/refs/tags/yaml-cpp-$YAMLCPP_VER.tar.gz
RUN tar -xzf $YAMLCPP_VER.tar.gz
WORKDIR $YAMLCPP_SRC/yaml-cpp-yaml-cpp-$YAMLCPP_VER
RUN mkdir build && cd build && cmake .. -DCMAKE_CXX_COMPILER=$CXX_PATH -DCMAKE_INSTALL_PREFIX=$YAMLCPP_LIB -DYAML_CPP_BUILD_TESTS=On && make install -j 8 && make test -j 8

# Clean up
WORKDIR /
RUN rm -rf $SRC

# Setting environment variables
ENV CC=$CC_PATH
ENV CXX=$CXX_PATH

# Setting workdir to /in
WORKDIR /in

0 comments on commit fff2282

Please sign in to comment.