From 2cf20ce5f2c526f6ca2c2688b4f25550e0c1ce03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20=C5=81ukawski?= Date: Wed, 19 Jun 2024 16:20:05 +0200 Subject: [PATCH 1/6] Create Dockerfile --- docker/Dockerfile | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 docker/Dockerfile diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..4a518e26 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,20 @@ +ARG UBUNTU_TAG +FROM ubuntu:$UBUNTU_TAG + +ARG OPENCV_TAG + +RUN apt-get update && \ + apt-get install -y cmake g++ wget unzip && \ + wget -O opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_TAG}.zip && \ + wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_TAG}.zip && \ + unzip opencv.zip && \ + unzip opencv_contrib.zip && \ + cmake -S opencv-${OPENCV_TAG} -B opencv-${OPENCV_TAG}/build \ + -DOPENCV_EXTRA_MODULES_PATH=opencv_contrib-${OPENCV_TAG}/modules \ + -DBUILD_TESTS=OFF \ + -DBUILD_PERF_TESTS=OFF \ + -DOPENCV_ENABLE_NONFREE=ON && \ + cmake --build opencv-${OPENCV_TAG}/build -j && \ + cmake --install opencv-${OPENCV_TAG}/build && \ + rm -rf opencv.zip opencv_contrib.zip opencv-${OPENCV_TAG} opencv_contrib-${OPENCV_TAG} && \ + apt-get clean From 546c477d683facebd24319752dceadf2603ab30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20=C5=81ukawski?= Date: Wed, 19 Jun 2024 16:47:09 +0200 Subject: [PATCH 2/6] Create CI for building and pushing Docker images --- .github/workflows/docker.yml | 47 ++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/workflows/docker.yml diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 00000000..93f97d17 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,47 @@ +name: Docker + +on: + workflow_dispatch: + inputs: + ubuntu-tag: + description: 'The Ubuntu tag to use for the Docker image' + required: true + type: choice + options: + - '20.04' + - '22.04' + opencv-tag: + description: 'The OpenCV tag to use for the Docker image' + required: true + type: choice + options: + - '3.4' + - '4.x' + - '5.x' + +env: + REGISTRY: ghcr.io + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Check out main project + uses: actions/checkout@v4 + + - name: Log in to the Container Registry + uses: docker/login-action@v3 + with: + registry: ${{env.REGISTRY}} + username: ${{github.actor}} + password: ${{secrets.GITHUB_TOKEN}} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + push: true + tags: vision:ubuntu-${{inputs.ubuntu-tag}} + context: docker + build-args: | + OPENCV_TAG=${{inputs.opencv-tag}} + UBUNTU_TAG=${{inputs.ubuntu-tag}} From 4ffe517d524de0223dad36102e28f3f1579f9184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20=C5=81ukawski?= Date: Wed, 19 Jun 2024 17:01:36 +0200 Subject: [PATCH 3/6] Configure build matrix --- .github/workflows/ci.yml | 1 + .github/workflows/docker.yml | 45 +++++++++++++++++++++--------------- docker/Dockerfile | 2 +- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9ef26a4c..37ca322d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,7 @@ on: push: paths-ignore: - 'doc/**' + - 'docker/**' - '**.md' pull_request: schedule: diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 93f97d17..615d209d 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,30 +1,30 @@ name: Docker on: + push: + # paths: + # - 'docker/**' workflow_dispatch: - inputs: - ubuntu-tag: - description: 'The Ubuntu tag to use for the Docker image' - required: true - type: choice - options: - - '20.04' - - '22.04' - opencv-tag: - description: 'The OpenCV tag to use for the Docker image' - required: true - type: choice - options: - - '3.4' - - '4.x' - - '5.x' env: REGISTRY: ghcr.io + IMAGE_NAME: ${{github.repository}} jobs: docker: + name: build (Ubuntu ${{matrix.ubuntu}}, OpenCV ${{matrix.opencv}}) runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + id-token: write + + strategy: + matrix: + ubuntu: ['20.04', '22.04'] + opencv: ['4.x'] + steps: - name: Check out main project uses: actions/checkout@v4 @@ -36,12 +36,19 @@ jobs: username: ${{github.actor}} password: ${{secrets.GITHUB_TOKEN}} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{env.REGISTRY}}/${{env.IMAGE_NAME}} + - name: Build and push uses: docker/build-push-action@v6 with: push: true - tags: vision:ubuntu-${{inputs.ubuntu-tag}} context: docker + tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:ubuntu-${{matrix.ubuntu}}-opencv-${{matrix.opencv}} + labels: ${{steps.meta.outputs.labels}} build-args: | - OPENCV_TAG=${{inputs.opencv-tag}} - UBUNTU_TAG=${{inputs.ubuntu-tag}} + OPENCV_TAG=${{matrix.opencv}} + UBUNTU_TAG=${{matrix.ubuntu}} diff --git a/docker/Dockerfile b/docker/Dockerfile index 4a518e26..7204bdff 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -14,7 +14,7 @@ RUN apt-get update && \ -DBUILD_TESTS=OFF \ -DBUILD_PERF_TESTS=OFF \ -DOPENCV_ENABLE_NONFREE=ON && \ - cmake --build opencv-${OPENCV_TAG}/build -j && \ + cmake --build opencv-${OPENCV_TAG}/build && \ cmake --install opencv-${OPENCV_TAG}/build && \ rm -rf opencv.zip opencv_contrib.zip opencv-${OPENCV_TAG} opencv_contrib-${OPENCV_TAG} && \ apt-get clean From 60f71760f7b308a2dd72c1127965b2f43ae7540d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20=C5=81ukawski?= Date: Wed, 19 Jun 2024 20:31:35 +0200 Subject: [PATCH 4/6] Add compiler to build matrix --- .github/workflows/ci.yml | 2 ++ .github/workflows/docker.yml | 12 ++++++++---- docker/Dockerfile | 15 +++++++++++++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 37ca322d..79f0ca99 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,6 +3,8 @@ name: Continuous Integration on: push: paths-ignore: + - .github/workflows/docker.yml + - .github/workflows/doxygen.yml - 'doc/**' - 'docker/**' - '**.md' diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 615d209d..c518fd06 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -2,8 +2,8 @@ name: Docker on: push: - # paths: - # - 'docker/**' + paths: + - 'docker/**' workflow_dispatch: env: @@ -12,7 +12,7 @@ env: jobs: docker: - name: build (Ubuntu ${{matrix.ubuntu}}, OpenCV ${{matrix.opencv}}) + name: build (Ubuntu ${{matrix.ubuntu}}, OpenCV ${{matrix.opencv}}, ${{matrix.compiler.label}}) runs-on: ubuntu-latest permissions: @@ -24,6 +24,9 @@ jobs: matrix: ubuntu: ['20.04', '22.04'] opencv: ['4.x'] + compiler: + - { cmd: 'g++', label: 'gcc' } + - { cmd: 'clang', label: 'clang' } steps: - name: Check out main project @@ -47,8 +50,9 @@ jobs: with: push: true context: docker - tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:ubuntu-${{matrix.ubuntu}}-opencv-${{matrix.opencv}} + tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:ubuntu-${{matrix.ubuntu}}-opencv-${{matrix.opencv}}-${{matrix.compiler.label}} labels: ${{steps.meta.outputs.labels}} build-args: | OPENCV_TAG=${{matrix.opencv}} UBUNTU_TAG=${{matrix.ubuntu}} + COMPILER=${{matrix.compiler.cmd}} diff --git a/docker/Dockerfile b/docker/Dockerfile index 7204bdff..9c75a845 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,10 +1,21 @@ ARG UBUNTU_TAG -FROM ubuntu:$UBUNTU_TAG +FROM ubuntu:${UBUNTU_TAG} ARG OPENCV_TAG +ARG COMPILER + +ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ - apt-get install -y cmake g++ wget unzip && \ + apt-get install -y \ + ${COMPILER} \ + cmake \ + wget \ + unzip \ + ccache \ + libpcl-dev \ + swig \ + googletest && \ wget -O opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_TAG}.zip && \ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_TAG}.zip && \ unzip opencv.zip && \ From b5a427147ba6f0fc7222e14b9fcb6d73d0e41a5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20=C5=81ukawski?= Date: Wed, 19 Jun 2024 22:14:28 +0200 Subject: [PATCH 5/6] Remove compiler dependency This reverts 60f71760f7b308a2dd72c1127965b2f43ae7540d. --- .github/workflows/docker.yml | 8 ++------ docker/Dockerfile | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index c518fd06..fed7cfe3 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -12,7 +12,7 @@ env: jobs: docker: - name: build (Ubuntu ${{matrix.ubuntu}}, OpenCV ${{matrix.opencv}}, ${{matrix.compiler.label}}) + name: build (Ubuntu ${{matrix.ubuntu}}, OpenCV ${{matrix.opencv}}) runs-on: ubuntu-latest permissions: @@ -24,9 +24,6 @@ jobs: matrix: ubuntu: ['20.04', '22.04'] opencv: ['4.x'] - compiler: - - { cmd: 'g++', label: 'gcc' } - - { cmd: 'clang', label: 'clang' } steps: - name: Check out main project @@ -50,9 +47,8 @@ jobs: with: push: true context: docker - tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:ubuntu-${{matrix.ubuntu}}-opencv-${{matrix.opencv}}-${{matrix.compiler.label}} + tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:ubuntu-${{matrix.ubuntu}}-opencv-${{matrix.opencv}} labels: ${{steps.meta.outputs.labels}} build-args: | OPENCV_TAG=${{matrix.opencv}} UBUNTU_TAG=${{matrix.ubuntu}} - COMPILER=${{matrix.compiler.cmd}} diff --git a/docker/Dockerfile b/docker/Dockerfile index 9c75a845..1ac39f69 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -2,13 +2,13 @@ ARG UBUNTU_TAG FROM ubuntu:${UBUNTU_TAG} ARG OPENCV_TAG -ARG COMPILER ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y \ - ${COMPILER} \ + g++ \ + clang \ cmake \ wget \ unzip \ From b00e2cdcb40b83085071eb39901a2eb1cdee5b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20=C5=81ukawski?= Date: Wed, 19 Jun 2024 22:44:31 +0200 Subject: [PATCH 6/6] Build against local container --- .github/workflows/ci.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 79f0ca99..e4d8fccf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,10 @@ jobs: build: name: build (${{matrix.os}}, ${{matrix.robotology.yarp}}, ${{matrix.compiler.cc}}) runs-on: ${{matrix.os}} + container: + image: ghcr.io/roboticslab-uc3m/vision:${{matrix.os}}-opencv-4.x + env: + DEBIAN_FRONTEND: noninteractive needs: maybe_skip if: ${{needs.maybe_skip.outputs.should_skip != 'true'}} @@ -66,8 +70,8 @@ jobs: ref: ${{matrix.robotology.yarp}} path: .deps/yarp - - name: Install dependencies via apt - run: sudo apt-get update && sudo apt-get install -qq ccache libopencv-dev libpcl-dev swig googletest + # - name: Install dependencies via apt + # run: apt-get update && apt-get upgrade -qqy - name: Set up CMake uses: jwlawson/actions-setup-cmake@v2 @@ -94,13 +98,13 @@ jobs: run: | cmake -S .deps/ycm -B .deps/ycm/build cmake --build .deps/ycm/build - sudo cmake --install .deps/ycm/build + cmake --install .deps/ycm/build - name: Build YARP run: | cmake -S .deps/yarp -B .deps/yarp/build $CMAKE_CCACHE_LAUNCHER -DSKIP_ACE=ON -DYARP_DISABLE_VERSION_SOURCE=ON cmake --build .deps/yarp/build - sudo cmake --install .deps/yarp/build + cmake --install .deps/yarp/build - name: Configure vision run: cmake -S . -B build $CMAKE_CCACHE_LAUNCHER -DCREATE_BINDINGS_PYTHON=ON -DENABLE_examples=ON @@ -109,11 +113,11 @@ jobs: run: cmake --build build - name: Install vision - run: sudo cmake --install build && sudo ldconfig + run: cmake --install build && ldconfig - name: Test vision working-directory: build run: ctest -V - name: Uninstall vision - run: sudo cmake --build build --target uninstall + run: cmake --build build --target uninstall