diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..302463f8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,36 @@ +.cache/ +.vscode/ +build/ + +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..3eeb5a14 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,60 @@ +# This starter workflow is for a CMake project running on a single platform. There is a different starter workflow if you need cross-platform coverage. +# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-multi-platform.yml +name: CMake on a single platform + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + PRESET: preferred + +jobs: + docker_build_and_publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + docker: + - 'docker/**' + - name: Build and push the image + if: steps.filter.outputs.docker == 'true' + run: | + docker login --username filippobrizzi --password ${{ secrets.GH_PAT }} ghcr.io + cd ${{github.workspace}}/docker + ./build.sh + source ./version.sh + docker image tag ${IMAGE}:latest ghcr.io/filippobrizzi/${IMAGE}:latest + docker push ghcr.io/filippobrizzi/${IMAGE}:latest + build: + # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. + # You can convert this to a matrix build if you need cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Install dependencies + run: sudo apt update && sudo apt install -y ninja-build + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: cmake -B ${{github.workspace}}/build -DBUILD_MODULES=all -DCMAKE_BUILD_TYPE=Release + + - name: Build + # Build your program with the given configuration + run: cmake --build ${{github.workspace}}/build -- all examples + + - name: Test + working-directory: ${{github.workspace}}/build + # Execute tests defined by the CMake configuration. + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: make check diff --git a/docker/Dockerfile_deps b/docker/Dockerfile_deps new file mode 100644 index 00000000..e30b734a --- /dev/null +++ b/docker/Dockerfile_deps @@ -0,0 +1,13 @@ +ARG BASE_IMAGE +FROM ${BASE_IMAGE} + +COPY . /tmp/eolo/ +RUN ls /tmp/eolo/ + +RUN mkdir /tmp/build +WORKDIR /tmp/build +RUN cmake ../eolo/ --preset docker +RUN ninja all && \ + ninja install + +RUN cd ../ && rm -rf eolo && rm -rf build diff --git a/docker/build_deps.sh b/docker/build_deps.sh new file mode 100755 index 00000000..32f514cb --- /dev/null +++ b/docker/build_deps.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +source ./version.sh + +ncores=$(cat /proc/cpuinfo | grep processor | wc -l) +((ncores--)) + +SUFFIX=deps + +pushd ../ + +docker build . -t ${IMAGE}_${SUFFIX}:${VERSION} -f docker/Dockerfile_deps --cpuset-cpus "0-$ncores" --build-arg BASE_IMAGE=${IMAGE}:${VERSION} --build-arg CODEBASE=${CODEBASE} --progress=plain --no-cache + +popd