From 91578a61624981f9958dcb6963bbd27b32609ad6 Mon Sep 17 00:00:00 2001 From: iAmir Date: Tue, 15 Oct 2024 20:33:02 +0330 Subject: [PATCH] add docker and update CI to use it instead of ubuntu18 --- .github/workflows/build.yml | 61 ++++++------------------------------- docker/Dockerfile | 29 ++++++++++++++++++ docker/build.sh | 26 ++++++++++++++++ docker/docker-entrypoint.sh | 13 ++++++++ 4 files changed, 77 insertions(+), 52 deletions(-) create mode 100644 docker/Dockerfile create mode 100644 docker/build.sh create mode 100644 docker/docker-entrypoint.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 734a053e..368b3e17 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -90,47 +90,13 @@ jobs: with: name: streamer-win-debug-${{ steps.current-time.outputs.formattedTime }}-${{ steps.vars.outputs.sha_short }} path: build/bin/Debug - build-linux-debug: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - with: - submodules: recursive - - - name: Declare github variables - id: vars - shell: bash - run: | - echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - - name: install packages - run: sudo apt-get install g++-multilib - - - name: Install CMake - uses: lukka/get-cmake@v3.19.0 - - - name: Generate build files - run: mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Debug - - - name: Build - run: | - cd build - cmake --build . --config Debug + build-linux: + runs-on: ubuntu-latest - - name: Get current time - uses: josStorer/get-current-time@v2 - id: current-time - with: - format: YYYYMMDD + strategy: + matrix: + config: [Debug, Release] - - name: Upload artifacts - uses: actions/upload-artifact@v3 - with: - name: streamer-linux-debug-${{ steps.current-time.outputs.formattedTime }}-${{ steps.vars.outputs.sha_short }} - path: build/bin - build-linux-release: - runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v2 with: @@ -143,19 +109,10 @@ jobs: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - name: install packages - run: sudo apt-get install g++-multilib - - - name: Install CMake - uses: lukka/get-cmake@v3.19.0 - - - name: Generate build files - run: mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release - - name: Build run: | - cd build - cmake --build . --config Release + cd docker + CONFIG=${{ matrix.config == 'Debug' && 'Debug' || 'MinSizeRel' }} ./build.sh - name: Get current time uses: josStorer/get-current-time@v2 @@ -166,5 +123,5 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v3 with: - name: streamer-linux-release-${{ steps.current-time.outputs.formattedTime }}-${{ steps.vars.outputs.sha_short }} - path: build/bin + name: streamer-linux-${{ matrix.config == 'Debug' && '-debug' || '-release' }}-${{ steps.current-time.outputs.formattedTime }}-${{ steps.vars.outputs.sha_short }} + path: docker/build/bin diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..f3f43b19 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,29 @@ +FROM ubuntu:18.04 +RUN \ + dpkg --add-architecture i386 && \ + apt-get update && \ + apt-get install -y \ + gpg \ + wget \ + && \ + wget -O- https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | \ + gpg --dearmor - | \ + tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null && \ + echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ bionic main' | \ + tee /etc/apt/sources.list.d/kitware.list >/dev/null && \ + apt-get update && \ + apt-get install -y \ + cmake \ + ninja-build \ + g++-multilib \ + libstdc++6:i386 \ + libc6:i386 \ + && \ + useradd -m user + +USER user + +ENV PATH=~/.local/bin:${PATH} + +COPY docker-entrypoint.sh / +CMD /docker-entrypoint.sh diff --git a/docker/build.sh b/docker/build.sh new file mode 100644 index 00000000..4e5a752d --- /dev/null +++ b/docker/build.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Available configs: Debug, RelWithDebInfo, [Release] +[[ -z "$CONFIG" ]] \ +&& config=Release \ +|| config="$CONFIG" + +docker build \ + -t streamer-omp/build:ubuntu-18.04 ./ \ +|| exit 1 + +folders=('build') +for folder in "${folders[@]}"; do + if [[ ! -d "./${folder}" ]]; then + mkdir ${folder} + fi +done + +docker run \ + --rm \ + -t \ + -w /code \ + -v $PWD/..:/code \ + -v $PWD/build:/code/build \ + -e CONFIG=${config} \ + streamer-omp/build:ubuntu-18.04 diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh new file mode 100644 index 00000000..8ace856f --- /dev/null +++ b/docker/docker-entrypoint.sh @@ -0,0 +1,13 @@ +#!/bin/sh +[ -z $CONFIG ] && config=Release || config="$CONFIG" + +cmake \ + -S . \ + -B build \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=$config \ +&& +cmake \ + --build build \ + --config $config \ + --parallel $(nproc)