diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c4fbcf4..52e4bd8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,6 +19,9 @@ on: default: false type: boolean +env: + REGRESSION_REPO: sofa-framework/Regression + REGRESSION_BRANCH: master jobs: prepare: @@ -153,6 +156,87 @@ jobs: ccache -s fi + - name: Deploy plugins into SOFA install tree + shell: bash + run: | + set -euo pipefail + mkdir -p "$SOFA_ROOT/plugins" + cp -r "$WORKSPACE_INSTALL_PATH" "$SOFA_ROOT/plugins/InfinyToolkit" + + if [[ "${{ matrix.with_mesh_refinement }}" == "ON" ]]; then + cp -r "$GITHUB_WORKSPACE/deps/MeshRefinement/install" "$SOFA_ROOT/plugins/MeshRefinement" + + if [[ "$RUNNER_OS" == "Windows" ]]; then + # Windows resolves dependent DLLs from the loading module's own + # directory, not from sibling plugin directories. + cp "$SOFA_ROOT/plugins/MeshRefinement/bin/"*.dll \ + "$SOFA_ROOT/plugins/InfinyToolkit/bin/" 2>/dev/null || true + else + # Linux/macOS resolve via RPATH / LD_LIBRARY_PATH instead. + echo "LD_LIBRARY_PATH=$SOFA_ROOT/plugins/MeshRefinement/lib:${LD_LIBRARY_PATH:-}" >> $GITHUB_ENV + fi + fi + + - name: Configure runtime library path + if: runner.os == 'Linux' + shell: bash + run: | + set -euo pipefail + LP="$SOFA_ROOT/lib" + [[ -d "$LP" ]] || { echo "::error::$LP not found"; exit 1; } + echo "libSofa.Component.Controller: $(ls "$LP"/libSofa.Component.Controller.so* 2>/dev/null || echo MISSING)" + echo "LD_LIBRARY_PATH=$LP:${LD_LIBRARY_PATH:-}" >> $GITHUB_ENV + + ####################### Setup Python ####################### + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + + - name: Install dependencies + shell: bash + run: | + set -euo pipefail + python -m pip install --upgrade pip + python -m pip install numpy tqdm + + - name: Configure python environment + shell: bash + run: | + set -euo pipefail + SP3="$SOFA_ROOT/plugins/SofaPython3" + SP="$SP3/lib/python3/site-packages" + [[ -d "$SP/Sofa" ]] || { echo "::error::Sofa package not found in $SP"; exit 1; } + if [[ "$RUNNER_OS" == "Windows" ]]; then + echo "PYTHONPATH=$(cygpath -w "$SP")" >> $GITHUB_ENV + echo "SOFAPYTHON3_ROOT=$(cygpath -w "$SP3")" >> $GITHUB_ENV + else + echo "PYTHONPATH=$SP" >> $GITHUB_ENV + echo "SOFAPYTHON3_ROOT=$SP3" >> $GITHUB_ENV + fi + + ################### Regression tests ################### + - name: Fetch SofaRegressionProgram + shell: bash + run: | + set -euo pipefail + cd "$GITHUB_WORKSPACE" + curl -fSL "https://github.com/${REGRESSION_REPO}/archive/refs/heads/${REGRESSION_BRANCH}.zip" -o regression.zip + python -c "import zipfile;zipfile.ZipFile('regression.zip').extractall('.')" + rm -rf Regression && mv Regression-* Regression + SCRIPT=$(find "$GITHUB_WORKSPACE/Regression" -name 'SofaRegressionProgram.py' | head -n1) + [[ -f "$SCRIPT" ]] || { echo "::error::SofaRegressionProgram.py not found"; exit 1; } + echo "resolved: $SCRIPT" + echo "REGRESSION_SCRIPT=$SCRIPT" >> $GITHUB_ENV + + - name: Run regression + shell: bash + run: | + set -euo pipefail + cd "$WORKSPACE_SRC_PATH" + python "$REGRESSION_SCRIPT" --input ./examples + + ################### Artifact naming ############## - name: Sanitize artifact name id: sanitize @@ -187,19 +271,7 @@ jobs: name: ${{ steps.sanitize.outputs.artifact_name }} path: ${{ env.WORKSPACE_ARTIFACT_PATH }} - ################### Tests ############## - - name: Launch test - uses: sofa-framework/sofa-test-action@v1.0 - with: - sofa_root: ${{ github.workspace }}/sofa - sofa_version: ${{ steps.sofa.outputs.sofa_version }} - src_dir: ${{ env.WORKSPACE_SRC_PATH }} - build_dir: ${{ env.WORKSPACE_BUILD_PATH }} - python_exe: ${{ steps.sofa.outputs.python_exe }} - output_dir: ${{ github.workspace }}/tests-results_dir - nb_parallel_threads: '4' - - + ################### Create plugin artifacts ############## deploy: name: Deploy artifacts diff --git a/examples/RegressionStateScenes.regression-tests b/examples/RegressionStateScenes.regression-tests index 55fa5be..6a46c4b 100644 --- a/examples/RegressionStateScenes.regression-tests +++ b/examples/RegressionStateScenes.regression-tests @@ -5,9 +5,10 @@ ../regression/references ### Demo scenes ### -BeatingCube.scn 200 1e-4 1 1 -BeatingCube_moving.scn 200 1e-4 1 1 -Cube_AdvCarvingTexcoords.scn 500 1e-4 1 1 -Cube_Carving.scn 500 1e-4 1 1 -Cube_CarvingWithPenetration.scn 500 1e-4 1 1 -TetrahedronBeamMultiMaterials.scn 500 1e-4 1 1 +BeatingCube.scn 200 1e-4 1 20 +BeatingCube_moving.scn 200 1e-4 1 20 +#Cube_AdvCarvingTexcoords.scn 500 1e-4 1 20 +#Cube_Carving.scn 500 1e-4 1 20 +#Cube_CarvingWithPenetration.scn 500 1e-4 1 20 +TetrahedronBeamMultiMaterials.scn 500 1e-4 1 20 +Triangle2RefinedTriangleTopologicalMapping.scn 100 1e-4 1 20 diff --git a/examples/RegressionTopologyScenes.regression-tests b/examples/RegressionTopologyScenes.regression-tests deleted file mode 100644 index dff9c99..0000000 --- a/examples/RegressionTopologyScenes.regression-tests +++ /dev/null @@ -1,9 +0,0 @@ -# WARNING: -# REGRESSION_TEST DOES NOT SUPPORT DASHES ("-") IN SCENE NAMES. -# USE UNDERSCORES ("_") INSTEAD. - -### References relative path ### -#../regression/references - -### Topology scenes ### -Triangle2RefinedTriangleTopologicalMapping.scn 100 1e-4 1 diff --git a/regression/references/BeatingCube.scn.reference_mstate_0_Volume.json.gz b/regression/references/BeatingCube.scn.reference_mstate_0_Volume.json.gz new file mode 100644 index 0000000..514a3e1 Binary files /dev/null and b/regression/references/BeatingCube.scn.reference_mstate_0_Volume.json.gz differ diff --git a/regression/references/BeatingCube_moving.scn.reference_mstate_0_Volume.json.gz b/regression/references/BeatingCube_moving.scn.reference_mstate_0_Volume.json.gz new file mode 100644 index 0000000..c1eca61 Binary files /dev/null and b/regression/references/BeatingCube_moving.scn.reference_mstate_0_Volume.json.gz differ diff --git a/regression/references/Cube_AdvCarvingTexcoords.scn.reference_mstate_0_Particles.json.gz b/regression/references/Cube_AdvCarvingTexcoords.scn.reference_mstate_0_Particles.json.gz new file mode 100644 index 0000000..2e6e347 Binary files /dev/null and b/regression/references/Cube_AdvCarvingTexcoords.scn.reference_mstate_0_Particles.json.gz differ diff --git a/regression/references/Cube_AdvCarvingTexcoords.scn.reference_mstate_1_Volume.json.gz b/regression/references/Cube_AdvCarvingTexcoords.scn.reference_mstate_1_Volume.json.gz new file mode 100644 index 0000000..3d51dee Binary files /dev/null and b/regression/references/Cube_AdvCarvingTexcoords.scn.reference_mstate_1_Volume.json.gz differ diff --git a/regression/references/Cube_Carving.scn.reference_mstate_0_Particles.json.gz b/regression/references/Cube_Carving.scn.reference_mstate_0_Particles.json.gz new file mode 100644 index 0000000..a780f92 Binary files /dev/null and b/regression/references/Cube_Carving.scn.reference_mstate_0_Particles.json.gz differ diff --git a/regression/references/Cube_Carving.scn.reference_mstate_1_Volume.json.gz b/regression/references/Cube_Carving.scn.reference_mstate_1_Volume.json.gz new file mode 100644 index 0000000..468dd99 Binary files /dev/null and b/regression/references/Cube_Carving.scn.reference_mstate_1_Volume.json.gz differ diff --git a/regression/references/Cube_CarvingWithPenetration.scn.reference_mstate_0_Particles.json.gz b/regression/references/Cube_CarvingWithPenetration.scn.reference_mstate_0_Particles.json.gz new file mode 100644 index 0000000..db46463 Binary files /dev/null and b/regression/references/Cube_CarvingWithPenetration.scn.reference_mstate_0_Particles.json.gz differ diff --git a/regression/references/Cube_CarvingWithPenetration.scn.reference_mstate_1_Volume.json.gz b/regression/references/Cube_CarvingWithPenetration.scn.reference_mstate_1_Volume.json.gz new file mode 100644 index 0000000..6341119 Binary files /dev/null and b/regression/references/Cube_CarvingWithPenetration.scn.reference_mstate_1_Volume.json.gz differ diff --git a/regression/references/TetrahedronBeamMultiMaterials.scn.reference_mstate_0_mechObj.json.gz b/regression/references/TetrahedronBeamMultiMaterials.scn.reference_mstate_0_mechObj.json.gz new file mode 100644 index 0000000..1db8270 Binary files /dev/null and b/regression/references/TetrahedronBeamMultiMaterials.scn.reference_mstate_0_mechObj.json.gz differ diff --git a/regression/references/TetrahedronBeamMultiMaterials.scn.reference_mstate_1_mechObj.json.gz b/regression/references/TetrahedronBeamMultiMaterials.scn.reference_mstate_1_mechObj.json.gz new file mode 100644 index 0000000..25d1764 Binary files /dev/null and b/regression/references/TetrahedronBeamMultiMaterials.scn.reference_mstate_1_mechObj.json.gz differ diff --git a/regression/references/Triangle2RefinedTriangleTopologicalMapping.scn.reference_mstate_0_CoarseMesh.json.gz b/regression/references/Triangle2RefinedTriangleTopologicalMapping.scn.reference_mstate_0_CoarseMesh.json.gz new file mode 100644 index 0000000..f230c1c Binary files /dev/null and b/regression/references/Triangle2RefinedTriangleTopologicalMapping.scn.reference_mstate_0_CoarseMesh.json.gz differ diff --git a/regression/references/Triangle2RefinedTriangleTopologicalMapping.scn.reference_mstate_1_MechanicalObject1.json.gz b/regression/references/Triangle2RefinedTriangleTopologicalMapping.scn.reference_mstate_1_MechanicalObject1.json.gz new file mode 100644 index 0000000..805b02a Binary files /dev/null and b/regression/references/Triangle2RefinedTriangleTopologicalMapping.scn.reference_mstate_1_MechanicalObject1.json.gz differ