Repair IfcClash order #7900
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: ci | |
| on: | |
| push: | |
| paths: | |
| - 'src/ifcblender/**' | |
| - 'src/ifcconvert/**' | |
| - 'src/ifcgeom/**' | |
| - 'src/ifcgeom_schema_agnostic/**' | |
| - 'src/ifcgeomserver/**' | |
| - 'src/ifcjni/**' | |
| - 'src/ifcmax/**' | |
| - 'src/ifcopenshell-python/**' | |
| - '!src/ifcopenshell-python/docs/**' | |
| - 'src/ifcparse/**' | |
| - 'src/ifcwrap/**' | |
| - 'src/qtviewer/**' | |
| - 'src/svgfill/**' | |
| - 'src/serializers/**' | |
| - 'conda/**' | |
| - 'cmake/**' | |
| - '.github/workflows/ci.yml' | |
| pull_request: | |
| jobs: | |
| activate: | |
| runs-on: ubuntu-22.04 | |
| if: | | |
| github.repository == 'IfcOpenShell/IfcOpenShell' && | |
| !contains(github.event.head_commit.message, 'skip ci') | |
| steps: | |
| - run: echo ok go | |
| compile-and-test: | |
| runs-on: ubuntu-22.04 | |
| needs: activate | |
| env: | |
| # Colored output for cmake. | |
| CLICOLOR_FORCE: "1" | |
| CMAKE_COLOR_DIAGNOSTICS: "ON" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: 3.11 | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install xmlschema xsdata numpy lxml pytest isodate lark networkx tabulate python-dateutil shapely | |
| pip install src/bcf --no-deps | |
| pip install pytest-xdist==3.8.0 | |
| - name: Install C++ dependencies | |
| run: | | |
| sudo apt update | |
| # `occt-misc` is only needed for 22.04, since it has cmake configs. | |
| # In 24.04+, the needed files were moved `libocct-foundation-dev` and `occt-misc` can be removed. | |
| # Other libs in `OCCT_CMAKE_DEPS` are needed only for cmake config to work properly, they're not used directly. | |
| OCCT_CMAKE_DEPS="occt-misc libocct-draw-dev tcl-dev tk-dev libxi-dev" | |
| sudo apt-get install --no-install-recommends \ | |
| git cmake gcc g++ \ | |
| libboost-date-time-dev \ | |
| libboost-filesystem-dev \ | |
| libboost-iostreams-dev \ | |
| libboost-program-options-dev \ | |
| libboost-regex-dev \ | |
| libboost-system-dev \ | |
| libboost-thread-dev \ | |
| libpcre3-dev libxml2-dev \ | |
| libtbb-dev nlohmann-json3-dev \ | |
| libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev libocct-data-exchange-dev \ | |
| ${OCCT_CMAKE_DEPS} \ | |
| libhdf5-dev libcgal-dev libeigen3-dev | |
| - name: ccache | |
| uses: hendrikmuhs/ccache-action@v1.2.22 | |
| with: | |
| key: ubuntu-22.04-${{ runner.arch }} | |
| # RTTI is only enabled by default in Debug builds of rocksdb. | |
| # Distros are using Release builds, so we're compiling it ourselves with RTTI forced on. | |
| # https://github.com/facebook/rocksdb/blob/a3aa44a7167b8336f9bc15c8aba063260268ff68/CMakeLists.txt#L433 | |
| - name: build rocksdb | |
| run: | | |
| git clone https://github.com/facebook/rocksdb --branch v9.11.2 | |
| cd rocksdb | |
| mkdir build && cd build | |
| # rocksdb is using ccache automatically. | |
| cmake -DFAIL_ON_WARNINGS=Off \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_INSTALL_PREFIX=/usr/local \ | |
| -DWITH_TESTS=OFF \ | |
| -DWITH_TOOLS=OFF \ | |
| -DWITH_GFLAGS=OFF \ | |
| -DWITH_BENCHMARK_TOOLS=OFF \ | |
| -DWITH_CORE_TOOLS=OFF \ | |
| -DROCKSDB_BUILD_SHARED=Off \ | |
| -DCMAKE_POSITION_INDEPENDENT_CODE=On \ | |
| -DUSE_RTTI=On \ | |
| .. | |
| sudo make -j$(nproc) install | |
| # OpenCOLLADA is ancient, but we still have it in the main build. | |
| # So adding it to CI to catch any breakages. | |
| - name: build OpenCOLLADA | |
| run: | | |
| git clone https://github.com/KhronosGroup/OpenCOLLADA | |
| cd OpenCOLLADA | |
| git checkout v1.6.68 | |
| patch -p1 --batch --forward -i ../nix/patches/opencollada/pr622_and_disable_subdirs.patch | |
| patch -p1 --batch --forward -i ../nix/patches/opencollada/allow_static_libraries_config_on_unix.patch | |
| mkdir build && cd build | |
| cmake .. \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ | |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache \ | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ | |
| -DCMAKE_CXX_FLAGS_INIT="-fPIC" | |
| sudo make -j$(nproc) install | |
| # We need zstd and libxml2 just for cmake config files to test the examples build. | |
| # zslibzstd-dev has cmake config only on Ubuntu 24.04+. | |
| - name : Build zstd | |
| run: | | |
| git clone https://github.com/facebook/zstd --depth 1 --branch v1.5.7 | |
| cd zstd | |
| # `build` already exists. | |
| mkdir build_ && cd build_ | |
| cmake ../build/cmake -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache \ | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache | |
| sudo cmake --build . --target install -j $(nproc) | |
| # libxml2-dev doesn't have cmake configs even on Ubuntu 24.04+. | |
| - name: Build libxml2 | |
| run: | | |
| git clone https://gitlab.gnome.org/GNOME/libxml2.git --branch v2.13.8 --depth 1 | |
| cd libxml2 | |
| mkdir build && cd build | |
| cmake .. \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache \ | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache | |
| sudo cmake --build . --target install -j $(nproc) | |
| # Ubuntu has `swig` package, but we build it to match the version we use in the main build. | |
| # To avoid failing tests when checking stub generation. | |
| - name: build swig | |
| run: | | |
| # Remove default swig to avoid conflicts. | |
| sudo apt remove --purge swig swig4.0 | |
| sudo apt-get install -y libpcre2-dev bison | |
| git clone https://github.com/swig/swig --branch v4.1.0 --depth 1 | |
| cd swig | |
| mkdir build && cd build | |
| cmake .. \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache \ | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache | |
| sudo make -j$(nproc) install | |
| - name: Build ifcopenshell | |
| run: | | |
| echo $Python3_ROOT_DIR | |
| echo ${{ env.pythonLocation }} | |
| mkdir build && cd build | |
| cmake \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_PREFIX_PATH=/usr \ | |
| -DCMAKE_SYSTEM_PREFIX_PATH=/usr \ | |
| -DPYTHON_EXECUTABLE:FILEPATH=${{ env.pythonLocation }}/bin/python \ | |
| -DPYTHON_INCLUDE_DIR:PATH=${{ env.pythonLocation }}/include/python3.11 \ | |
| -DUSE_MMAP=On \ | |
| "-DSCHEMA_VERSIONS=2x3;4;4x3_add2" \ | |
| -DGLTF_SUPPORT=On \ | |
| -DWITH_ROCKSDB=On \ | |
| -DBUILD_EXAMPLES=ON \ | |
| ../cmake | |
| sudo make -j $(nproc) | |
| sudo make install | |
| # - name: Run IfcConvert on Sample files | |
| # run: | | |
| # (find test/input src/bonsai/test/files -name '*.ifc' | while read i; do \ | |
| # echo $i | tee -a log; \ | |
| # timeout 1m "$(which IfcConvert)" -yv "$i" "$i.obj" --validate >> log 2>&1; \ | |
| # echo $i $? >> statuses; \ | |
| # done) || true | |
| # echo Failed | |
| # grep -v 0$ statuses | |
| # grep -v 0$ statuses | wc -l | |
| # echo Succeeded | |
| # grep 0$ statuses | |
| # grep 0$ statuses | wc -l | |
| - name: Run IfcConvert on Sample file | |
| run: | | |
| IfcConvert test/input/acad2010_walls.ifc test/input/acad2010_walls.obj | |
| - name: Build standalone examples to test cmake package | |
| run: | | |
| set -x | |
| cd src/examples | |
| mkdir build && cd build | |
| cmake .. -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache \ | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache | |
| cmake --build . | |
| ./arbitrary_open_profile_def && test -f arbitrary_open_profile_def.ifc | |
| ./composite_profile_def && test -f composite_profile_def.ifc | |
| ./csg_primitive && test -f csg_primitive.ifc | |
| ./ellipse_pies && test -f ellipse_pies.ifc | |
| ./faces && test -f faces.ifc | |
| ./ifc_curve_rebar && test -f ifc_curve_rebar.ifc | |
| ./profiles | |
| test -f IfcUShapeProfileDef.ifc | |
| test -f IfcTShapeProfileDef.ifc | |
| test -f IfcZShapeProfileDef.ifc | |
| test -f IfcEllipseProfileDef.ifc | |
| test -f IfcIShapeProfileDef.ifc | |
| test -f IfcLShapeProfileDef.ifc | |
| test -f IfcCShapeProfileDef.ifc | |
| test -f IfcCircleProfileDef.ifc | |
| test -f IfcRectangleProfileDef.ifc | |
| test -f IfcTrapeziumProfileDef.ifc | |
| ./IfcParseExamples "../IfcParseExamples_test.ifc" | |
| ./IfcOpenHouse && test -f IfcOpenHouse.ifc | |
| ./IfcAdvancedHouse && test -f IfcAdvancedHouse.ifc | |
| ./IfcAlignment && test -f IfcAlignment.ifc | |
| ./IfcSimplifiedAlignment && test -f IfcSimplifiedAlignment.ifc | |
| ./triangulated_faceset && test -f triangulated_faceset.ifc | |
| - name: Test ifcopenshell-python | |
| run: | | |
| cd test | |
| python tests.py | |
| cd ../src/ifcopenshell-python | |
| mv ifcopenshell ifcopenshell-local # Force testing on installed module | |
| pip install -e ../ifcpatch --no-deps # Needed for sql.py tests. | |
| ERROR=0 | |
| make test-parallel || ERROR=1 | |
| cd ../bcf && make test || ERROR=1 | |
| pip install requests | |
| cd ../bsdd && make test || ERROR=1 | |
| pip install deepdiff | |
| cd ../ifcdiff && make test || ERROR=1 | |
| cd ../ifcpatch && make test || ERROR=1 | |
| pip install -e ../ifctester --no-deps | |
| cd ../ifctester && make test || ERROR=1 | |
| make build-ids-docs || ERROR=1 | |
| # Run mathutils related tests at the end to ensure no other code is relying on mathutils. | |
| cd ../ifcopenshell-python | |
| pip install mathutils | |
| make test-mathutils || ERROR=1 | |
| if [ $ERROR -ne 0 ]; then | |
| echo "One or more tests failed"; | |
| exit 1; | |
| fi |