From 02e10aeee7bb5e751072aad6c20b52b2f9443bf8 Mon Sep 17 00:00:00 2001 From: Tobias Peters Date: Wed, 15 May 2024 20:02:51 +0200 Subject: [PATCH 01/10] prepare workflow to package and create docker image --- .github/workflows/docker-image.yml | 90 ++++++++++++++++++++++++++++++ docker-compose.yaml | 2 + docker/Dockerfile | 67 ++++++++++++++++++++++ 3 files changed, 159 insertions(+) create mode 100644 .github/workflows/docker-image.yml create mode 100644 docker/Dockerfile diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 0000000000..32808f60a8 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,90 @@ +name: Docker Image + +on: + push: + branches: [ "core4", "feature/*" ] + +env: + ubuntu_version: 22.04 + build_type: Release + cpp_compiler: g++ + c_compiler: gcc + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v4 + - name: Set reusable strings + id: strings + shell: bash + run: | + echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" + VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') + [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') + [ "$VERSION" == "core4" ] && VERSION=latest + echo VERSION=$VERSION + echo "build-version=${VERSION}" >> "$GITHUB_OUTPUT" + + - name: Dependencies + run: | + sudo apt update + sudo apt install --yes software-properties-common + wget --quiet https://packages.microsoft.com/config/ubuntu/${{ ubuntu_version }}/packages-microsoft-prod.deb + sudo dpkg --install packages-microsoft-prod.deb + sudo apt update + sudo apt install --yes \ + cmake build-essential ninja-build ccache \ + bison autoconf automake \ + libpng-dev \ + libjpeg-dev \ + libgif-dev libfreetype6-dev \ + freeglut3-dev \ + liblua5.2-dev libluabind-dev libcpptest-dev \ + libogg-dev libvorbis-dev libopenal-dev \ + libavcodec-dev libavformat-dev libavdevice-dev libswscale-dev libpostproc-dev \ + libmysqlclient-dev \ + libxml2-dev \ + libcurl4-openssl-dev libssl-dev \ + libsquish-dev \ + liblzma-dev \ + libgsf-1-dev \ + qtbase5-dev qttools5-dev qttools5-dev-tools \ + libmsquic + wget https://raw.githubusercontent.com/microsoft/msquic/main/src/inc/msquic.h + wget https://raw.githubusercontent.com/microsoft/msquic/main/src/inc/msquic_posix.h + wget https://raw.githubusercontent.com/microsoft/msquic/main/src/inc/quic_sal_stub.h + sudo mv msquic.h msquic_posix.h quic_sal_stub.h /usr/include/ + + - name: Configure CMake + run: > + cmake -B ${{ steps.strings.outputs.build-output-dir }} + -G "Ninja" + -DCMAKE_SUPPRESS_REGENERATION=ON + -DCMAKE_CXX_COMPILER=${{ cpp_compiler }} + -DCMAKE_C_COMPILER=${{ c_compiler }} + -DCMAKE_BUILD_TYPE=${{ build_type }} + -DWITH_STATIC=ON + -DWITH_NEL_TESTS=ON + -DWITH_NEL_SAMPLES=ON + -DWITH_LUA51=OFF + -DWITH_LUA52=ON + -DWITH_RYZOM=ON + -DWITH_RYZOM_SERVER=ON + -DWITH_RYZOM_CLIENT=ON + -DWITH_RYZOM_TOOLS=ON + -DWITH_NEL_TOOLS=ON + -DWITH_NELNS=ON + -DWITH_NELNS_LOGIN_SYSTEM=ON + -DWITH_NELNS_SERVER=ON + -DWITH_QT5=ON + -DWITH_LIBGSF=ON + -DCPACK_PACKAGE_VERSION="${{ steps.strings.outputs.build-version }}" + -S ${{ github.workspace }} + + - name: Package + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ build_type }} --target package + + - name: Build the Docker image + run: docker build . --file docker/Dockerfile --tag ryzomcore:${{ steps.strings.outputs.build-version }} diff --git a/docker-compose.yaml b/docker-compose.yaml index 023fe9df5e..0948a0a1c8 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,3 +2,5 @@ services: devcontainer: image: "ryzomcore/devcontainer" build: ./.devcontainer + volumes: + - ./:/tmp/ryzomcore diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000000..27458a1f6d --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,67 @@ +FROM ubuntu:22.04 + +RUN apt update; \ + DEBIAN_FRONTEND=noninteractive \ + apt install --yes \ + autoconf \ + automake \ + bison \ + build-essential \ + ccache \ + clang-15 \ + freeglut3-dev \ + libavcodec-dev \ + libavdevice-dev \ + libavformat-dev \ + libcpptest-dev \ + libcurl4-openssl-dev \ + libfreetype6-dev \ + libgif-dev \ + libgsf-1-dev \ + libjpeg-dev \ + liblua5.2-dev \ + libluabind-dev \ + liblzma-dev \ + libmysqlclient-dev \ + libogg-dev \ + libopenal-dev \ + libpng-dev \ + libpostproc-dev \ + libsquish-dev \ + libssl-dev \ + libswscale-dev \ + libvorbis-dev \ + libxml2-dev \ + mingw-w64 \ + mingw-w64-tools \ + ninja-build \ + qtbase5-dev \ + qttools5-dev \ + qttools5-dev-tools \ + libqtpropertybrowser-dev \ + qt6-base-dev \ + qt6-l10n-tools \ + qt6-tools-dev \ + qt6-tools-dev-tools + + +RUN apt install --yes \ + doxygen \ + gdb \ + git \ + graphviz \ + libxrandr-dev \ + wget + +ARG USERNAME=ryzom +ARG USER_UID=1000 +ARG USER_GID=$USER_UID +ARG APP_HOME=/app + +RUN groupadd --gid $USER_GID $USERNAME \ + && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME + +COPY build/bin + +USER $USERNAME +WORKDIR $APP_HOME From 8d63444d6e5f9864a6f9cc074a5d01d86d7e3439 Mon Sep 17 00:00:00 2001 From: Tobias Peters Date: Wed, 15 May 2024 21:05:07 +0200 Subject: [PATCH 02/10] add missing prefix to workflow variables --- .github/workflows/docker-image.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 32808f60a8..342fabce7c 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -31,7 +31,7 @@ jobs: run: | sudo apt update sudo apt install --yes software-properties-common - wget --quiet https://packages.microsoft.com/config/ubuntu/${{ ubuntu_version }}/packages-microsoft-prod.deb + wget --quiet https://packages.microsoft.com/config/ubuntu/${{ env.ubuntu_version }}/packages-microsoft-prod.deb sudo dpkg --install packages-microsoft-prod.deb sudo apt update sudo apt install --yes \ @@ -62,9 +62,9 @@ jobs: cmake -B ${{ steps.strings.outputs.build-output-dir }} -G "Ninja" -DCMAKE_SUPPRESS_REGENERATION=ON - -DCMAKE_CXX_COMPILER=${{ cpp_compiler }} - -DCMAKE_C_COMPILER=${{ c_compiler }} - -DCMAKE_BUILD_TYPE=${{ build_type }} + -DCMAKE_CXX_COMPILER=${{ env.cpp_compiler }} + -DCMAKE_C_COMPILER=${{ env.c_compiler }} + -DCMAKE_BUILD_TYPE=${{ env.build_type }} -DWITH_STATIC=ON -DWITH_NEL_TESTS=ON -DWITH_NEL_SAMPLES=ON @@ -84,7 +84,7 @@ jobs: -S ${{ github.workspace }} - name: Package - run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ build_type }} --target package + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ env.build_type }} --target package - name: Build the Docker image run: docker build . --file docker/Dockerfile --tag ryzomcore:${{ steps.strings.outputs.build-version }} From bcd289313162ccc4a08a1cd4b563d68d51e041a4 Mon Sep 17 00:00:00 2001 From: Tobias Peters Date: Wed, 15 May 2024 21:53:08 +0200 Subject: [PATCH 03/10] fix copy command in Dockerfile --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 27458a1f6d..64965b41b5 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -61,7 +61,7 @@ ARG APP_HOME=/app RUN groupadd --gid $USER_GID $USERNAME \ && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME -COPY build/bin +COPY build/ryzomcore-* /app USER $USERNAME WORKDIR $APP_HOME From 4e407671fcff3f1028049fbf3ae31bd6db9b174e Mon Sep 17 00:00:00 2001 From: Tobias Peters Date: Thu, 16 May 2024 19:47:45 +0200 Subject: [PATCH 04/10] prepare docker image and push to registry --- .github/workflows/docker-image.yml | 23 +++++++++++++++++++++++ CMakeLists.txt | 2 +- docker-compose.yaml | 6 ++++++ docker/Dockerfile | 6 ++++-- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 342fabce7c..ca40e487f0 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -9,10 +9,14 @@ env: build_type: Release cpp_compiler: g++ c_compiler: gcc + IMAGE_NAME: ryzomcore-tools jobs: build: runs-on: ubuntu-22.04 + permissions: + packages: write + contents: read steps: - uses: actions/checkout@v4 @@ -81,10 +85,29 @@ jobs: -DWITH_QT5=ON -DWITH_LIBGSF=ON -DCPACK_PACKAGE_VERSION="${{ steps.strings.outputs.build-version }}" + -DCPACK_GENERATOR=STGZ -S ${{ github.workspace }} - name: Package run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ env.build_type }} --target package + - uses: actions/upload-artifact@v4 + with: + name: package + path: ${{ steps.strings.outputs.build-output-dir }}/ryzomcore-* + + - name: Build the Docker image run: docker build . --file docker/Dockerfile --tag ryzomcore:${{ steps.strings.outputs.build-version }} + + - name: Log in to registry + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $ --password-stdin + + - name: Push image + run: | + IMAGE_ID=ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME + IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') + VERSION="${{ steps.strings.outputs.build-version }}" + echo IMAGE_ID=$IMAGE_ID + docker tag $IMAGE_NAME $IMAGE_ID:$VERSION + docker push $IMAGE_ID:$VERSION diff --git a/CMakeLists.txt b/CMakeLists.txt index 23cf7ef867..a4fc01bd3c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -493,7 +493,7 @@ IF(WIN32) SET(CPACK_GENERATOR "NSIS;ZIP") SET(CPACK_SOURCE_GENERATOR "ZIP") ELSE() - SET(CPACK_GENERATOR "TGZ") + SET(CPACK_GENERATOR "TGZ;STGZ") SET(CPACK_SOURCE_GENERATOR "TGZ") ENDIF() set(CPACK_SOURCE_IGNORE_FILES diff --git a/docker-compose.yaml b/docker-compose.yaml index 0948a0a1c8..abf1fb3ffc 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -4,3 +4,9 @@ services: build: ./.devcontainer volumes: - ./:/tmp/ryzomcore + + tools: + image: "ryzomcore/tools" + build: + context: . + dockerfile: docker/Dockerfile diff --git a/docker/Dockerfile b/docker/Dockerfile index 64965b41b5..2c60770ca2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -61,7 +61,9 @@ ARG APP_HOME=/app RUN groupadd --gid $USER_GID $USERNAME \ && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME -COPY build/ryzomcore-* /app +COPY build/ryzomcore-*.sh /tmp/ryzomcore.sh + +RUN mkdir --parent "$APP_HOME" \ + && /tmp/ryzomcore.sh --skip-license USER $USERNAME -WORKDIR $APP_HOME From cc69b680a72c95545d7f2b57e828610ab4005a30 Mon Sep 17 00:00:00 2001 From: Tobias Peters Date: Thu, 16 May 2024 21:03:43 +0200 Subject: [PATCH 05/10] remove unused tagging of docker image --- .github/workflows/docker-image.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index ca40e487f0..dd9c8f3351 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -109,5 +109,4 @@ jobs: IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') VERSION="${{ steps.strings.outputs.build-version }}" echo IMAGE_ID=$IMAGE_ID - docker tag $IMAGE_NAME $IMAGE_ID:$VERSION docker push $IMAGE_ID:$VERSION From d312482620949d8f8f5b42e7917da17ba1a19c37 Mon Sep 17 00:00:00 2001 From: Tobias Peters Date: Thu, 16 May 2024 22:02:35 +0200 Subject: [PATCH 06/10] move image tag to reusable strings --- .github/workflows/docker-image.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index dd9c8f3351..0244ccc116 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -28,8 +28,12 @@ jobs: VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') [ "$VERSION" == "core4" ] && VERSION=latest + IMAGE_ID=ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME + IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') echo VERSION=$VERSION + echo IMAGE_ID=$IMAGE_ID echo "build-version=${VERSION}" >> "$GITHUB_OUTPUT" + echo "docker-image-tag=${IMAGE_ID}:${VERSION}" >> "$GITHUB_OUTPUT" - name: Dependencies run: | @@ -98,15 +102,11 @@ jobs: - name: Build the Docker image - run: docker build . --file docker/Dockerfile --tag ryzomcore:${{ steps.strings.outputs.build-version }} + run: docker build . --file docker/Dockerfile --tag "${{ steps.strings.outputs.docker-image-tag }}" - name: Log in to registry run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $ --password-stdin - name: Push image run: | - IMAGE_ID=ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME - IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') - VERSION="${{ steps.strings.outputs.build-version }}" - echo IMAGE_ID=$IMAGE_ID - docker push $IMAGE_ID:$VERSION + docker push "${{ steps.strings.outputs.docker-image-tag }}" From 74c12a1551bffb404afa5c7426f2415b796b19e1 Mon Sep 17 00:00:00 2001 From: Tobias Peters Date: Fri, 17 May 2024 15:19:55 +0200 Subject: [PATCH 07/10] only publish docker image in main branches and version tags upload package artifact in cmake build --- .github/workflows/cmake-multi-platform.yml | 8 ++++++++ .../{docker-image.yml => publish-docker-image.yml} | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) rename .github/workflows/{docker-image.yml => publish-docker-image.yml} (97%) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 59843c53c2..cee502506c 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -103,3 +103,11 @@ jobs: # Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail run: ctest --build-config ${{ matrix.build_type }} + + - name: Package + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} --target package + + - uses: actions/upload-artifact@v4 + with: + name: package-${{ matrix.os }} + path: ${{ steps.strings.outputs.build-output-dir }}/ryzomcore-* diff --git a/.github/workflows/docker-image.yml b/.github/workflows/publish-docker-image.yml similarity index 97% rename from .github/workflows/docker-image.yml rename to .github/workflows/publish-docker-image.yml index 0244ccc116..8fc9f1323d 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/publish-docker-image.yml @@ -1,8 +1,10 @@ -name: Docker Image +name: Publish Docker Image on: push: - branches: [ "core4", "feature/*" ] + branches: [ "core4" ] + tags: + - v* env: ubuntu_version: 22.04 @@ -74,7 +76,6 @@ jobs: -DCMAKE_C_COMPILER=${{ env.c_compiler }} -DCMAKE_BUILD_TYPE=${{ env.build_type }} -DWITH_STATIC=ON - -DWITH_NEL_TESTS=ON -DWITH_NEL_SAMPLES=ON -DWITH_LUA51=OFF -DWITH_LUA52=ON @@ -100,7 +101,6 @@ jobs: name: package path: ${{ steps.strings.outputs.build-output-dir }}/ryzomcore-* - - name: Build the Docker image run: docker build . --file docker/Dockerfile --tag "${{ steps.strings.outputs.docker-image-tag }}" From bddb94cb924c9d901d8b85120ca1e3018f2341cf Mon Sep 17 00:00:00 2001 From: Tobias Peters Date: Wed, 22 May 2024 22:11:18 +0200 Subject: [PATCH 08/10] add library path for docker image to find installed libraries --- docker/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/Dockerfile b/docker/Dockerfile index 2c60770ca2..f237f84579 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -66,4 +66,6 @@ COPY build/ryzomcore-*.sh /tmp/ryzomcore.sh RUN mkdir --parent "$APP_HOME" \ && /tmp/ryzomcore.sh --skip-license +ENV LD_LIBRARY_PATH=/usr/local/lib + USER $USERNAME From 91d5b7bac7097f885f3e96efd4f96085945918d7 Mon Sep 17 00:00:00 2001 From: Tobias Peters Date: Wed, 22 May 2024 22:45:10 +0200 Subject: [PATCH 09/10] remove dev dependencies from docker image and install some required dependencies --- docker/Dockerfile | 67 ++++++++++------------------------------------- 1 file changed, 14 insertions(+), 53 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index f237f84579..7a7fe36822 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,58 +1,5 @@ FROM ubuntu:22.04 -RUN apt update; \ - DEBIAN_FRONTEND=noninteractive \ - apt install --yes \ - autoconf \ - automake \ - bison \ - build-essential \ - ccache \ - clang-15 \ - freeglut3-dev \ - libavcodec-dev \ - libavdevice-dev \ - libavformat-dev \ - libcpptest-dev \ - libcurl4-openssl-dev \ - libfreetype6-dev \ - libgif-dev \ - libgsf-1-dev \ - libjpeg-dev \ - liblua5.2-dev \ - libluabind-dev \ - liblzma-dev \ - libmysqlclient-dev \ - libogg-dev \ - libopenal-dev \ - libpng-dev \ - libpostproc-dev \ - libsquish-dev \ - libssl-dev \ - libswscale-dev \ - libvorbis-dev \ - libxml2-dev \ - mingw-w64 \ - mingw-w64-tools \ - ninja-build \ - qtbase5-dev \ - qttools5-dev \ - qttools5-dev-tools \ - libqtpropertybrowser-dev \ - qt6-base-dev \ - qt6-l10n-tools \ - qt6-tools-dev \ - qt6-tools-dev-tools - - -RUN apt install --yes \ - doxygen \ - gdb \ - git \ - graphviz \ - libxrandr-dev \ - wget - ARG USERNAME=ryzom ARG USER_UID=1000 ARG USER_GID=$USER_UID @@ -68,4 +15,18 @@ RUN mkdir --parent "$APP_HOME" \ ENV LD_LIBRARY_PATH=/usr/local/lib +# install dependencies +RUN apt update; \ + apt install --yes \ + libgif7 \ + libjpeg8 \ + libpng16-16 \ + libxml2 \ + libfreetype6 \ + liblua5.2-0 \ + libluabind0.9.1d1 \ + libcurl4 \ + libvorbis0a \ + libvorbisfile3 + USER $USERNAME From a5021e60e3ccc609e424eec391f9928e4126bb60 Mon Sep 17 00:00:00 2001 From: Tobias Peters Date: Wed, 5 Jun 2024 21:49:27 +0200 Subject: [PATCH 10/10] add missing dependencies --- docker/Dockerfile | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 7a7fe36822..c0525acb03 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -18,15 +18,19 @@ ENV LD_LIBRARY_PATH=/usr/local/lib # install dependencies RUN apt update; \ apt install --yes \ + libcurl4 \ + libfreetype6 \ libgif7 \ + libgsf-1-114 \ libjpeg8 \ - libpng16-16 \ - libxml2 \ - libfreetype6 \ liblua5.2-0 \ - libluabind0.9.1d1 \ - libcurl4 \ + libluabind0.9.1d1 \ + libmysqlclient21 \ + libpng16-16 \ + libqt5widgets5 \ + libsquish0 \ libvorbis0a \ - libvorbisfile3 + libvorbisfile3 \ + libxml2 USER $USERNAME