diff --git a/.github/workflows/build-test-distribute.yml b/.github/workflows/build-test-distribute.yml index 75c67cae12eb..e225bc0fac09 100644 --- a/.github/workflows/build-test-distribute.yml +++ b/.github/workflows/build-test-distribute.yml @@ -67,7 +67,7 @@ jobs: internal_build: ${{ needs.config.outputs.internal_build == 'true' }} upload_artifacts: ${{ needs.config.outputs.upload_artifacts == 'true' || needs.config.outputs.tag-build-release-windows == 'true' }} upload_test_artifacts: ${{ needs.config.outputs.upload_test_artifacts == 'true' }} - nuget_build: ${{ needs.config.outputs.build_enable_ubuntu_x64 == 'true' && needs.config.outputs.upload_artifacts == 'true' }} + nuget_build: ${{ needs.config.outputs.build_enable_linux_vcpkg == 'true' && needs.config.outputs.upload_artifacts == 'true' }} secrets: inherit ubuntu-arm64-build-test: @@ -95,7 +95,6 @@ jobs: internal_build: ${{ needs.config.outputs.internal_build == 'true' }} upload_artifacts: ${{ needs.config.outputs.upload_artifacts == 'true' }} upload_test_artifacts: ${{ needs.config.outputs.upload_test_artifacts == 'true' }} - nuget_build_patch: ${{ needs.config.outputs.build_enable_windows == 'true' && needs.config.outputs.upload_artifacts == 'true'}} secrets: inherit linux-vcpkg-build-test: @@ -109,6 +108,7 @@ jobs: internal_build: ${{ needs.config.outputs.internal_build == 'true' }} upload_artifacts: ${{ needs.config.outputs.upload_artifacts == 'true' }} upload_test_artifacts: ${{ needs.config.outputs.upload_test_artifacts == 'true' }} + nuget_build_patch: ${{ needs.config.outputs.build_enable_windows == 'true' && needs.config.outputs.upload_artifacts == 'true'}} secrets: inherit emscripten-build-test: @@ -144,11 +144,11 @@ jobs: secrets: inherit create-nuget-package: - if: ${{ needs.config.outputs.upload_artifacts == 'true' && needs.config.outputs.build_enable_windows == 'true' && needs.config.outputs.build_enable_ubuntu_x64 == 'true'}} + if: ${{ needs.config.outputs.upload_artifacts == 'true' && needs.config.outputs.build_enable_windows == 'true' && needs.config.outputs.build_enable_linux_vcpkg == 'true' }} needs: - config - windows-build-test - - ubuntu-x64-build-test + - linux-vcpkg-build-test timeout-minutes: 20 runs-on: windows-2022 steps: diff --git a/.github/workflows/build-test-linux-vcpkg.yml b/.github/workflows/build-test-linux-vcpkg.yml index ab644ae32f8a..eaa930893832 100644 --- a/.github/workflows/build-test-linux-vcpkg.yml +++ b/.github/workflows/build-test-linux-vcpkg.yml @@ -30,6 +30,10 @@ on: default: true required: false type: boolean + nuget_build_patch: + default: false + required: false + type: boolean jobs: linux-vcpkg-build-test: @@ -198,7 +202,6 @@ jobs: pytest_args: "--run-cuda=negative" smoke: ${{ !inputs.full_config_build && matrix.config == 'Debug' }} test_artifacts_path: linux-vcpkg-${{ matrix.arch }}/${{ matrix.config }}/${{ matrix.compiler }} - ubuntu20_arm_workaround: ${{ inputs.mrbind && matrix.arch == 'arm64' }} upload_test_artifacts: ${{ inputs.upload_test_artifacts }} - name: Create Package @@ -253,3 +256,20 @@ jobs: artifact_path: ${{ github.workspace }} artifact_glob: meshlib_linux-vcpkg-${{ matrix.arch }}.tar.xz stats_file_suffix: -${{ steps.collect-runner-stats.outputs.job_id }} + + - name: Create and fix fake Wheel for NuGet + if: ${{ inputs.nuget_build_patch && matrix.arch == 'x64' && matrix.compiler == 'Clang 19' && matrix.config == 'Release' }} + shell: bash + run: | + python3 -m venv ./wheel_venv + source ./wheel_venv/bin/activate + python3 -m pip install auditwheel patchelf + python3 ./scripts/nuget_patch/patch_library_deps.py "./build/Release/bin/libMRMeshC.so" "./patched_content/" + + - name: Upload NuGet files to Artifacts + if: ${{ inputs.nuget_build_patch && matrix.arch == 'x64' && matrix.compiler == 'Clang 19' && matrix.config == 'Release' }} + uses: actions/upload-artifact@v5 + with: + name: DotNetPatchArchiveLinux-x64 + path: ./patched_content/* + retention-days: 1 diff --git a/.github/workflows/build-test-ubuntu-arm64.yml b/.github/workflows/build-test-ubuntu-arm64.yml index 29cb80e74aa2..c0bbdecb4c9c 100644 --- a/.github/workflows/build-test-ubuntu-arm64.yml +++ b/.github/workflows/build-test-ubuntu-arm64.yml @@ -1,4 +1,4 @@ -name: Build and test on arm64 ubuntu20 and ubuntu22 +name: Build and test Ubuntu arm64 on: workflow_call: @@ -41,14 +41,9 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu20, ubuntu22, ubuntu24 ] + os: [ ubuntu22, ubuntu24 ] config: [ Release ] include: - - os: ubuntu20 - compiler: clang - cxx-compiler: /usr/bin/clang++-11 - c-compiler: /usr/bin/clang-11 - cxx-standard: 20 - os: ubuntu22 compiler: clang cxx-compiler: /usr/bin/clang++-14 @@ -106,7 +101,7 @@ jobs: ln -s /usr/local/lib/meshlib-thirdparty-lib/include ./include - name: Install MRBind - if: ${{ ( inputs.mrbind && matrix.os != 'ubuntu20' ) || inputs.mrbind_c }} + if: ${{ inputs.mrbind || inputs.mrbind_c }} run: scripts/mrbind/install_mrbind_ubuntu.sh - name: Create virtualenv @@ -145,7 +140,7 @@ jobs: MR_CMAKE_OPTIONS: > -DMR_CXX_STANDARD=${{ matrix.cxx-standard }} -DMR_PCH_USE_EXTRA_HEADERS=ON - -DMESHLIB_BUILD_MRMESH_PY_LEGACY=${{ fromJSON('["ON", "OFF"]')[inputs.mrbind && matrix.os != 'ubuntu20'] }} + -DMESHLIB_BUILD_MRMESH_PY_LEGACY=${{ fromJSON('["ON", "OFF"]')[inputs.mrbind] }} -DMESHLIB_BUILD_GENERATED_C_BINDINGS=${{ fromJSON('["OFF", "ON"]')[inputs.mrbind_c] }} -DMRVIEWER_NO_XDG_DESKTOP_PORTAL=ON diff --git a/.github/workflows/build-test-ubuntu-x64.yml b/.github/workflows/build-test-ubuntu-x64.yml index 3111ef274f11..7e7b8afd4ed3 100644 --- a/.github/workflows/build-test-ubuntu-x64.yml +++ b/.github/workflows/build-test-ubuntu-x64.yml @@ -33,10 +33,6 @@ on: default: true required: false type: boolean - nuget_build_patch: - default: false - required: false - type: boolean jobs: ubuntu-x64-build-test: @@ -84,7 +80,7 @@ jobs: ln -s /usr/local/lib/meshlib-thirdparty-lib/include ./include - name: Install MRBind - if: ${{ ( inputs.mrbind && matrix.os != 'ubuntu20' ) || inputs.mrbind_c }} + if: ${{ inputs.mrbind || inputs.mrbind_c }} run: scripts/mrbind/install_mrbind_ubuntu.sh - name: Create virtualenv @@ -117,7 +113,7 @@ jobs: -DMR_CXX_STANDARD=${{ matrix.cxx-standard }} -DMESHLIB_BUILD_MRCUDA=${{ matrix.build_mrcuda }} -DMR_PCH_USE_EXTRA_HEADERS=ON - -DMESHLIB_BUILD_MRMESH_PY_LEGACY=${{ fromJSON('["ON", "OFF"]')[inputs.mrbind && matrix.os != 'ubuntu20'] }} + -DMESHLIB_BUILD_MRMESH_PY_LEGACY=${{ fromJSON('["ON", "OFF"]')[inputs.mrbind] }} -DMESHLIB_BUILD_GENERATED_C_BINDINGS=${{ fromJSON('["OFF", "ON"]')[inputs.mrbind_c] }} -DMRVIEWER_NO_XDG_DESKTOP_PORTAL=ON @@ -231,20 +227,3 @@ jobs: artifact_path: ${{ github.workspace }} artifact_glob: meshlib_${{matrix.os}}-dev.deb stats_file_suffix: -${{ steps.collect-runner-stats.outputs.job_id }} - - - name: Create and fix fake Wheel for NuGet - if: ${{ inputs.nuget_build_patch && matrix.os == 'ubuntu20' && matrix.upload_release == 'ON' && matrix.compiler == 'GCC' && matrix.config == 'Release' }} - shell: bash - run: | - python3 -m venv ./wheel_venv - source ./wheel_venv/bin/activate - python3 -m pip install auditwheel - python3 ./scripts/nuget_patch/patch_library_deps.py "./build/Release/bin/libMRMeshC.so" "./patched_content/" - - - name: Upload NuGet files to Artifacts - if: ${{ inputs.nuget_build_patch && matrix.os == 'ubuntu20' && matrix.upload_release == 'ON' && matrix.compiler == 'GCC' && matrix.config == 'Release' }} - uses: actions/upload-artifact@v5 - with: - name: DotNetPatchArchiveLinux-x64 - path: ./patched_content/* - retention-days: 1 diff --git a/.github/workflows/config.yml b/.github/workflows/config.yml index 3ea8b916ca60..f936b0de62a0 100644 --- a/.github/workflows/config.yml +++ b/.github/workflows/config.yml @@ -139,7 +139,7 @@ jobs: with: filters: | src: - - 'docker/(ubuntu20|ubuntu22|ubuntu24|emscripten)Dockerfile' + - 'docker/(ubuntu22|ubuntu24|emscripten)Dockerfile' - 'requirements/(ubuntu|distribution_python).txt' - 'scripts/build_thirdparty.sh' - 'scripts/install_apt_requirements.sh' diff --git a/.github/workflows/matrix/ubuntu-x64-full-config.json b/.github/workflows/matrix/ubuntu-x64-full-config.json index 4f26a5de26e3..70d87f58ffd3 100644 --- a/.github/workflows/matrix/ubuntu-x64-full-config.json +++ b/.github/workflows/matrix/ubuntu-x64-full-config.json @@ -1,45 +1,5 @@ { "include": [ - { - "os": "ubuntu20", - "config": "Debug", - "compiler": "Clang", - "cxx-compiler": "/usr/bin/clang++-11", - "c-compiler": "/usr/bin/clang-11", - "cxx-standard": 20, - "build_mrcuda": "ON", - "upload_release": "OFF" - }, - { - "os": "ubuntu20", - "config": "Debug", - "compiler": "GCC", - "cxx-compiler": "/usr/bin/g++-10", - "c-compiler": "/usr/bin/gcc-10", - "cxx-standard": 20, - "build_mrcuda": "ON", - "upload_release": "OFF" - }, - { - "os": "ubuntu20", - "config": "Release", - "compiler": "Clang", - "cxx-compiler": "/usr/bin/clang++-11", - "c-compiler": "/usr/bin/clang-11", - "cxx-standard": 20, - "build_mrcuda": "ON", - "upload_release": "OFF" - }, - { - "os": "ubuntu20", - "config": "Release", - "compiler": "GCC", - "cxx-compiler": "/usr/bin/g++-10", - "c-compiler": "/usr/bin/gcc-10", - "cxx-standard": 20, - "build_mrcuda": "ON", - "upload_release": "ON" - }, { "os": "ubuntu22", "config": "Debug", diff --git a/.github/workflows/matrix/ubuntu-x64-minimal-config.json b/.github/workflows/matrix/ubuntu-x64-minimal-config.json index 7ba9e20d1a94..b90903004de0 100644 --- a/.github/workflows/matrix/ubuntu-x64-minimal-config.json +++ b/.github/workflows/matrix/ubuntu-x64-minimal-config.json @@ -1,15 +1,5 @@ { "include": [ - { - "os": "ubuntu20", - "config": "Release", - "compiler": "GCC", - "cxx-compiler": "/usr/bin/g++-10", - "c-compiler": "/usr/bin/gcc-10", - "cxx-standard": 20, - "build_mrcuda": "ON", - "upload_release": "ON" - }, { "os": "ubuntu22", "config": "Release", diff --git a/.github/workflows/prepare-images.yml b/.github/workflows/prepare-images.yml index 1f9729e9f88e..9ae9b6ec2bdb 100644 --- a/.github/workflows/prepare-images.yml +++ b/.github/workflows/prepare-images.yml @@ -41,7 +41,7 @@ jobs: strategy: fail-fast: false matrix: - distro: [ ubuntu20, ubuntu22, ubuntu24, emscripten ] + distro: [ ubuntu22, ubuntu24, emscripten ] arch: [ x64, arm64 ] exclude: - distro: emscripten diff --git a/.github/workflows/test-distribution.yml b/.github/workflows/test-distribution.yml index 001eca919f7e..f28e0fe5c608 100644 --- a/.github/workflows/test-distribution.yml +++ b/.github/workflows/test-distribution.yml @@ -32,13 +32,8 @@ jobs: strategy: fail-fast: false matrix: - os: [ "ubuntu:20.04", "ubuntu:22.04", "ubuntu:24.04" ] + os: [ "ubuntu:22.04", "ubuntu:24.04" ] include: - - os: "ubuntu:20.04" - name: "ubuntu20" - compiler: clang-11 - c-compiler: /usr/bin/clang-11 - cxx-compiler: /usr/bin/clang++-11 - os: "ubuntu:22.04" name: "ubuntu22" compiler: clang-14 @@ -139,13 +134,8 @@ jobs: strategy: fail-fast: false matrix: - os: [ "ubuntu:20.04", "ubuntu:22.04", "ubuntu:24.04" ] + os: [ "ubuntu:22.04", "ubuntu:24.04" ] include: - - os: "ubuntu:20.04" - name: "ubuntu20" - compiler: clang-11 - c-compiler: /usr/bin/clang-11 - cxx-compiler: /usr/bin/clang++-11 - os: "ubuntu:22.04" name: "ubuntu22" compiler: clang-14 diff --git a/.github/workflows/update-app-container.yml b/.github/workflows/update-app-container.yml deleted file mode 100644 index fb5a8e63be54..000000000000 --- a/.github/workflows/update-app-container.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Update MeshLib app containers - -on: - #release: - #types: [ published ] - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -jobs: - update-app-container: - runs-on: ubuntu-latest - strategy: - matrix: - os: [ Ubuntu-20, Ubuntu-22 ] - include: - - os: Ubuntu-20 - image-tag: ubuntu20 - file-path-end: _ubuntu20-dev.deb - - os: Ubuntu-22 - image-tag: ubuntu22 - file-path-end: _ubuntu22-dev.deb - steps: - - name: Checkout - uses: actions/checkout@v5 - - - name: Get latests release - id: get_release - uses: kaliber5/action-get-release@953a6dd072cb35590892a224b72ba0ec6bef03a1 # v1 - with: - token: ${{ secrets.BUILD_MACHINE_TOKEN }} - latest: true - - - name: Login to DockerHub - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3 - with: - username: meshlib - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Set variables - id: set-vars - run: | - echo "file_name=meshlib_${{steps.get_release.outputs.tag_name }}${{matrix.file-path-end}}" >> $GITHUB_OUTPUT - echo "file_url=https://github.com/MeshInspector/MeshLib/releases/download/${{steps.get_release.outputs.tag_name}}" >> $GITHUB_OUTPUT - - - name: Build and push - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6 - with: - file: ./docker/app/${{matrix.image-tag}}Dockerfile - push: true - tags: meshlib/meshlib-app:${{ matrix.image-tag }}-${{steps.get_release.outputs.tag_name }}, meshlib/meshlib-app:${{ matrix.image-tag }} - build-args: | - FILE_NAME=${{steps.set-vars.outputs.file_name}} - FILE_URL=${{steps.set-vars.outputs.file_url}}/${{steps.set-vars.outputs.file_name}} diff --git a/docker/ubuntu20Dockerfile b/docker/ubuntu20Dockerfile deleted file mode 100644 index cf379949f346..000000000000 --- a/docker/ubuntu20Dockerfile +++ /dev/null @@ -1,93 +0,0 @@ -FROM ubuntu:20.04 AS build - -# update and install req -RUN export DEBIAN_FRONTEND=noninteractive; \ - export DEBCONF_NONINTERACTIVE_SEEN=true; \ - echo 'tzdata tzdata/Areas select Etc' | debconf-set-selections; \ - echo 'tzdata tzdata/Zones/Etc select UTC' | debconf-set-selections; \ - apt-get update -qqy \ - && apt-get install -qqy --no-install-recommends \ - tzdata git sudo time ninja-build \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -RUN mkdir /home/MeshLib -WORKDIR "/home/MeshLib" - -# copy files -COPY .git .git -COPY cmake cmake -COPY thirdparty thirdparty -COPY scripts scripts -COPY source source -COPY requirements requirements - -# build and install thirdparty -ENV MR_STATE=DOCKER_BUILD -RUN ./scripts/build_thirdparty.sh - - -FROM ubuntu:20.04 AS production - -RUN mkdir /usr/local/lib/meshlib-thirdparty-lib/ -WORKDIR "/usr/local/lib/meshlib-thirdparty-lib/" - -COPY scripts/install_apt_requirements.sh scripts/install_apt_requirements.sh -COPY scripts/install_apt_cuda.sh scripts/install_apt_cuda.sh -COPY scripts/mrbind/install_deps_ubuntu.sh scripts/mrbind/install_deps_ubuntu.sh -COPY scripts/mrbind/clang_version.txt scripts/mrbind/clang_version.txt -COPY scripts/install_thirdparty.sh scripts/install_thirdparty.sh -COPY scripts/patches scripts/patches -COPY requirements requirements - -COPY --from=build /home/MeshLib/lib /usr/local/lib/meshlib-thirdparty-lib/lib -COPY --from=build /home/MeshLib/include /usr/local/lib/meshlib-thirdparty-lib/include - -ENV MR_STATE=DOCKER_BUILD - -# update and install req -RUN export DEBIAN_FRONTEND=noninteractive; \ - export DEBCONF_NONINTERACTIVE_SEEN=true; \ - echo 'tzdata tzdata/Areas select Etc' | debconf-set-selections; \ - echo 'tzdata tzdata/Zones/Etc select UTC' | debconf-set-selections; \ - apt-get update -qqy \ - && apt-get install -qqy --no-install-recommends \ - tzdata git sudo time xvfb curl unzip ninja-build wget \ - && ./scripts/install_apt_requirements.sh \ - && ./scripts/install_apt_cuda.sh \ - && ./scripts/mrbind/install_deps_ubuntu.sh \ - && curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \ - && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ - && apt-get update -y \ - && apt-get install -y gh cmake g++-10 clang-11 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# install patchelf -RUN curl https://github.com/NixOS/patchelf/releases/download/0.15.0/patchelf-0.15.0.tar.gz -L -o patchelf-0.15.0.tar.gz \ - && tar xf patchelf-0.15.0.tar.gz \ - && cd patchelf-0.15.0 \ - && ./configure \ - && make && make check && sudo make install \ - && cd .. && rm patchelf-0.15.0.tar.gz && rm -rf patchelf-0.15.0 - -RUN ./scripts/install_thirdparty.sh && \ - echo '/usr/local/lib' | tee -a /etc/ld.so.conf && \ - sudo ldconfig - -# install aws cli -RUN ARCH=$(uname -m) && \ - case $ARCH in \ - x86_64) ARCH_URL="https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" ;; \ - aarch64) ARCH_URL="https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" ;; \ - *) echo "Unsupported architecture: $ARCH" && exit 1 ;; \ - esac && \ - curl "$ARCH_URL" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update - -# Add a new user "actions-runner" with user id 8877 -RUN useradd -u 8877 -m user - -# Change to non-root privilege -USER user diff --git a/scripts/devops/release_table.txt b/scripts/devops/release_table.txt index dd836236a306..3701c74ea989 100644 --- a/scripts/devops/release_table.txt +++ b/scripts/devops/release_table.txt @@ -12,18 +12,6 @@ zip - - Ubuntu 20 LTS x64 - - deb - - - - Ubuntu 20 LTS arm64 - - deb - - Ubuntu 22 LTS x64