Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 70 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,113 +6,175 @@
- main
- master

tags:
- 'v*' #release tags in format of 'v25.12.00' for example

pull_request:
types: [opened, synchronize, reopened, labeled]

jobs:
build-and-test:
name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }}
name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }} / MeshRefinement=${{ matrix.with_mesh_refinement }}
if: >
github.event_name == 'push' ||
(
github.event_name == 'pull_request' &&
(
contains(github.event.pull_request.labels.*.name, 'pr: run ci') &&
(
github.event.action != 'labeled' ||
github.event.label.name == 'pr: run ci'
)
)
)

runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, macos-14, windows-2022]
sofa_branch: [master]
with_mesh_refinement: [ON, OFF]

steps:
####################### Setup SOFA #######################
- name: Setup SOFA and environment
id: sofa
uses: sofa-framework/sofa-setup-action@v5
with:
sofa_root: ${{ github.workspace }}/sofa
sofa_version: ${{ matrix.sofa_branch }}
sofa_scope: 'full'

- name: Checkout source code
############## Checkout MeshRefinement only if enabled ##############
- name: Checkout MeshRefinement source code
if: matrix.with_mesh_refinement == 'ON'
uses: actions/checkout@v4
with:
path: deps/MeshRefinement
repository: InfinyTech3D/MeshRefinement
token: ${{ secrets.MESH_REFINEMENT_DEPLOY_KEY }}

############### Build and install MeshRefinement only if enabled ##############
- name: Build and install MeshRefinement
if: matrix.with_mesh_refinement == 'ON'
shell: bash
run: |
mkdir -p deps/MeshRefinement/build

if [[ "$RUNNER_OS" == "Windows" ]]; then
cmd //c "${{ steps.sofa.outputs.vs_vsdevcmd }} \
&& cd /d %GITHUB_WORKSPACE%/deps/MeshRefinement/build \
&& cmake \
-GNinja \
-DCMAKE_PREFIX_PATH=$SOFA_ROOT/lib/cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%/deps/MeshRefinement/install \
.. \
&& ninja install"
# Temp hack
cp deps/MeshRefinement/install/bin/MeshRefinement.dll "$WORKSPACE_BUILD_PATH/"

else
cd deps/MeshRefinement/build
cmake \
-GNinja \
-DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$GITHUB_WORKSPACE/deps/MeshRefinement/install" \
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY="$WORKSPACE_BUILD_PATH/lib" \
..
ninja install
fi

################# Checkout current repository ##############
- name: Checkout current source code
uses: actions/checkout@v4
with:
path: ${{ env.WORKSPACE_SRC_PATH }}

################ Build and install current plugin ##############
- name: Build and install
shell: bash
run: |
if [[ "$RUNNER_OS" == "Windows" ]]; then
cmd //c "${{ steps.sofa.outputs.vs_vsdevcmd }} \
&& cd /d $WORKSPACE_BUILD_PATH \
&& cd /d %GITHUB_WORKSPACE%/build \
&& cmake \
-GNinja \
-DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake" \
-DCMAKE_PREFIX_PATH=%SOFA_ROOT%/lib/cmake;%GITHUB_WORKSPACE%/deps/MeshRefinement/install \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \
-DCMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%/install \
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=%WORKSPACE_BUILD_PATH% \
../src \
&& ninja install"
else
cd "$WORKSPACE_BUILD_PATH"
ccache -z
cmake \
-GNinja \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_PREFIX_PATH=$SOFA_ROOT/lib/cmake \
-DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake;$GITHUB_WORKSPACE/deps/MeshRefinement/install" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY="$WORKSPACE_BUILD_PATH/lib" \
../src
ninja install
echo ${CCACHE_BASEDIR}
ccache -s
fi

- name: Sanitize artifact name
id: sanitize
# This step removes special characters from the artifact name to ensure compatibility with upload-artifact
# Characters removed: " : < > | * ? \r \n \ /
# Spaces are replaced with underscores
# This sanitization prevents errors in artifact creation and retrieval
shell: pwsh
run: |
$originalName = "InfinyToolkit_${{ steps.sofa.outputs.run_branch }}_for-SOFA-${{ steps.sofa.outputs.sofa_version }}_${{ runner.os }}"
if ("${{ matrix.with_mesh_refinement }}" -eq "ON") {
$dependency = "with_meshrefinement"
}
else {
$dependency = "standalone"
}

$originalName = "InfinyToolkit_${dependency}_${{ steps.sofa.outputs.run_branch }}_for-SOFA-${{ steps.sofa.outputs.sofa_version }}_${{ runner.os }}"
$artifact_name = $originalName -replace '[":;<>|*?\r\n\\/]', '' -replace ' ', '_'
echo "artifact_name=$artifact_name" >> $env:GITHUB_OUTPUT


################### Create and upload artifact ##############
- name: Create artifact
id: create-artifact
uses: actions/upload-artifact@v4.4.0
with:
name: ${{ steps.sanitize.outputs.artifact_name }}
path: ${{ env.WORKSPACE_INSTALL_PATH }}

- name: Install artifact
uses: actions/download-artifact@v4.1.7
with:
name: ${{ steps.sanitize.outputs.artifact_name }}
path: ${{ env.WORKSPACE_ARTIFACT_PATH }}


- name: Launch test
id: tests
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'



deploy:

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}
name: Deploy artifacts
if: always() && startsWith(github.ref, 'refs/tags/')
needs: [build-and-test]
Expand Down
4 changes: 3 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ set(SOURCE_FILES
)

# Add component for carving using refinement mesh
find_package(MeshRefinement QUIET)
sofa_find_package(MeshRefinement QUIET)
if (MeshRefinement_FOUND)
message("MeshRefinement plugin found - Adding it to ${PROJECT_NAME}")
list(APPEND HEADER_FILES
Expand All @@ -134,6 +134,8 @@ if (MeshRefinement_FOUND)
)

add_definitions(-DHAS_MESHREFINEMENT_PLUGIN)
else()
message("MeshRefinement plugin NOT found")
endif()

set(README_FILES README.md)
Expand Down
Loading