mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-05 23:41:44 +00:00
283 lines
11 KiB
YAML
283 lines
11 KiB
YAML
name: ci
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- 'src/ifcblender/**'
|
|
- 'src/ifcconvert/**'
|
|
- 'src/ifcgeom/**'
|
|
- 'src/ifcgeom_schema_agnostic/**'
|
|
- 'src/ifcgeomserver/**'
|
|
- 'src/ifcjni/**'
|
|
- 'src/ifcmax/**'
|
|
- 'src/ifc5d/**'
|
|
- 'src/ifcedit/**'
|
|
- 'src/ifcmcp/**'
|
|
- 'src/ifcopenshell-python/**'
|
|
- '!src/ifcopenshell-python/docs/**'
|
|
- 'src/ifcparse/**'
|
|
- 'src/ifcquery/**'
|
|
- '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@v7
|
|
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 pyparsing psutil
|
|
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.23
|
|
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 ../ifc5d --no-deps
|
|
pip install odfpy openpyxl
|
|
cd ../ifc5d && make test || ERROR=1
|
|
pip install -e ../ifcquery --no-deps
|
|
cd ../ifcquery && make test || ERROR=1
|
|
pip install -e ../ifcedit --no-deps
|
|
cd ../ifcedit && make test || ERROR=1
|
|
pip install mcp
|
|
pip install -e ../ifcmcp --no-deps
|
|
cd ../ifcmcp && 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.
|
|
# mathutils only has pre-built wheels for Python 3.13+; skip on older versions.
|
|
cd ../ifcopenshell-python
|
|
if python -c "import sys; sys.exit(0 if sys.version_info >= (3, 13) else 1)"; then
|
|
pip install mathutils
|
|
make test-mathutils || ERROR=1
|
|
fi
|
|
if [ $ERROR -ne 0 ]; then
|
|
echo "One or more tests failed";
|
|
exit 1;
|
|
fi
|