From 7631f93f5449aaf0aa041b44f69f2cae66aa117e Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Mon, 15 Nov 2021 15:32:58 +0100 Subject: [PATCH] Add Docker Adds initial docker support cluster apt commands use apt-get use single run command delete at end do not tag each commit ldconfig for mapnik use final repo use github.repository for image url apply suggestions ignore more [Docker] add container signing install later forgot id [Docker] remove codesign --- .dockerignore | 7 ++++ .github/workflows/docker-image.yml | 57 ++++++++++++++++++++++++++++++ Dockerfile | 38 ++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/workflows/docker-image.yml create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..69780c630 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +build +.vs +.vscode +.git +test +scons +CMakeUserPresets.json diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 000000000..bfee050d6 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,57 @@ +name: Docker Image CI + +on: + push: + branches: + - "**" + tags: + - "v*.*.*" +env: + # Use docker.io for Docker Hub if empty + REGISTRY: ghcr.io + # github.repository as / + IMAGE_NAME: ${{ github.repository }} + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + with: + submodules: "recursive" + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to GHCR + if: github.event_name != 'pull_request' + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + # list of Docker images to use as base name for tags + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + # generate Docker tags based on the following events/attributes + tags: | + type=schedule + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + + - name: Build and push + id: build-and-push + uses: docker/build-push-action@v2 + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..97fa119ec --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +FROM ubuntu:21.04 +ARG DEBIAN_FRONTEND=noninteractive + +ENV BUILD_DEPENDENCIES="libicu-dev \ + libfreetype6-dev \ + libharfbuzz-dev \ + libxml2-dev \ + libjpeg-dev \ + libtiff-dev \ + libwebp-dev \ + libcairo2-dev \ + libproj-dev \ + libgdal-dev \ + libboost-filesystem-dev \ + libboost-program-options-dev \ + libboost-regex-dev \ + " +RUN 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/ focal main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null \ + && apt-get update \ + && apt-get install -y \ + cmake \ + ninja-build \ + build-essential \ + $BUILD_DEPENDENCIES \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app +COPY . . + +RUN cmake --preset linux-gcc-release -DBUILD_DEMO_VIEWER=OFF -DBUILD_TESTING=OFF -DBUILD_DEMO_CPP=OFF -DBUILD_BENCHMARK=OFF \ + && cmake --build --preset linux-gcc-release \ + && cmake --build --preset linux-gcc-release --target install \ + && cd / \ + && echo "/usr/local/lib" > /etc/ld.so.conf.d/mapnik.conf \ + && ldconfig \ + && rm -rf /app