From b516c5add07784a1236f9b2d48e2955c7b500c3a Mon Sep 17 00:00:00 2001 From: epernod Date: Mon, 15 Jun 2026 09:17:04 +0200 Subject: [PATCH 1/3] [ci] new logic for ci workflow to use macOS only on demand or for releases --- .github/workflows/ci.yml | 99 +++++++++++++++++++++++++++------------- 1 file changed, 67 insertions(+), 32 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 68abcd7..066f358 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,15 +5,45 @@ on: branches: - main - master + tags: + - 'v*' #release tags in format of e.g: 'v25.12.00' pull_request: types: [opened, synchronize, reopened, labeled] + workflow_dispatch: + inputs: + full_build: + description: "Run full build (including macOS)" + required: false + default: false + type: boolean + jobs: + prepare: + runs-on: ubuntu-latest + outputs: + os_list: ${{ steps.set.outputs.os_list }} + steps: + - id: set + run: | + if [[ "${{ github.event_name }}" == "pull_request" ]] || + [[ "${{ github.event_name }}" == "push" && "${{ github.ref }}" != refs/tags/v* ]] || + [[ "${{ github.event_name }}" == "workflow_dispatch" && "${{ inputs.full_build }}" != "true" ]]; then + echo 'os_list=["ubuntu-22.04","windows-2022"]' >> $GITHUB_OUTPUT + else + echo 'os_list=["ubuntu-22.04","windows-2022","macos-14"]' >> $GITHUB_OUTPUT + fi + + - name: Debug + run: echo '${{ steps.set.outputs.os_list }}' + build-and-test: - name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }} + needs: prepare + name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }} / MeshRefinement=${{ matrix.with_mesh_refinement }} + if: > - github.event_name == 'push' || + github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.ref, 'refs/tags/v') || ( github.event_name == 'pull_request' && ( @@ -24,14 +54,19 @@ jobs: ) ) ) + runs-on: ${{ matrix.os }} + strategy: fail-fast: false + matrix: - os: [ubuntu-22.04, macos-14, windows-2022] + os: ${{ fromJSON(needs.prepare.outputs.os_list) }} + sofa_branch: [master] steps: + ####################### Setup SOFA ####################### - name: Setup SOFA and environment id: sofa uses: sofa-framework/sofa-setup-action@v5 @@ -39,22 +74,24 @@ jobs: sofa_root: ${{ github.workspace }}/sofa sofa_version: ${{ matrix.sofa_branch }} sofa_scope: 'standard' - - name: Checkout source code - uses: actions/checkout@v2 + + ################# Checkout current repository ############## + - name: Checkout current source code + uses: actions/checkout@v4 with: - path: ${{ env.WORKSPACE_SRC_PATH }} + 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 \ - && cmake \ - -GNinja \ + && cd /d %GITHUB_WORKSPACE%/build \ + && cmake -GNinja \ -DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake" \ -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \ + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=%WORKSPACE_BUILD_PATH% \ ../src \ && ninja install" else @@ -67,12 +104,13 @@ jobs: -DCMAKE_PREFIX_PATH=$SOFA_ROOT/lib/cmake \ -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 + ################### Artifact naming ############## - name: Sanitize artifact name id: sanitize # This step removes special characters from the artifact name to ensure compatibility with upload-artifact @@ -85,7 +123,9 @@ jobs: $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 }} @@ -97,33 +137,26 @@ jobs: name: ${{ steps.sanitize.outputs.artifact_name }} path: ${{ env.WORKSPACE_ARTIFACT_PATH }} - - name: Set env vars for tests - shell: bash - run: | - # Set env vars for tests - if [[ "$RUNNER_OS" == "Windows" ]]; then - echo "$WORKSPACE_ARTIFACT_PATH/lib" >> $GITHUB_PATH - echo "$WORKSPACE_ARTIFACT_PATH/bin" >> $GITHUB_PATH - echo "$SOFA_ROOT/plugins/SofaPython3/bin" >> $GITHUB_PATH - echo "SOFA_PLUGIN_PATH=$WORKSPACE_ARTIFACT_PATH/bin" | tee -a $GITHUB_ENV - else - echo "SOFA_PLUGIN_PATH=$WORKSPACE_ARTIFACT_PATH/lib" | tee -a $GITHUB_ENV - fi - - if [[ "$RUNNER_OS" == "macOS" ]]; then - echo "DYLD_LIBRARY_PATH=$WORKSPACE_ARTIFACT_PATH/lib:$SOFA_ROOT/lib:$SOFA_ROOT/plugins/SofaPython3/lib:$DYLD_LIBRARY_PATH" | tee -a $GITHUB_ENV - fi - - if [[ "$RUNNER_OS" == "Linux" ]]; then - echo "LD_LIBRARY_PATH=$WORKSPACE_ARTIFACT_PATH/lib:$SOFA_ROOT/lib:$SOFA_ROOT/plugins/SofaPython3/lib:$LD_LIBRARY_PATH" | tee -a $GITHUB_ENV - fi + ################### 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 - if: always() && startsWith(github.ref, 'refs/heads/main') # we are on a branch (not a PR) + if: always() && startsWith(github.ref, 'refs/tags/v') needs: [build-and-test] runs-on: ubuntu-latest continue-on-error: true + steps: - name: Get artifacts uses: actions/download-artifact@v4.1.7 @@ -137,12 +170,14 @@ jobs: for artifact in *; do zip $artifact.zip -r $artifact/* done + - name: Upload release uses: softprops/action-gh-release@v1 with: name: ${{ github.ref_name }} tag_name: release-${{ github.ref_name }} fail_on_unmatched_files: false + target_commitish: ${{ github.sha }} files: | artifacts/Tearing_*_Linux.zip artifacts/Tearing_*_Windows.zip From 0bea32be932a15e5d9af17a500427f2f0d5e87bd Mon Sep 17 00:00:00 2001 From: erik pernod Date: Mon, 15 Jun 2026 09:25:21 +0200 Subject: [PATCH 2/3] Update CI job name to remove MeshRefinement Removed MeshRefinement from job name in CI workflow. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 066f358..e590765 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,7 +40,7 @@ jobs: build-and-test: needs: prepare - name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }} / MeshRefinement=${{ matrix.with_mesh_refinement }} + name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }} if: > github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.ref, 'refs/tags/v') || From b8760ebc35fa337799bf20fc83f53cb8fb15dab5 Mon Sep 17 00:00:00 2001 From: erik pernod Date: Mon, 15 Jun 2026 10:46:57 +0200 Subject: [PATCH 3/3] Fix formatting issues in CI workflow YAML --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e590765..b9bbd7a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -91,6 +91,7 @@ jobs: && cmake -GNinja \ -DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake" \ -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=%WORKSPACE_BUILD_PATH% \ ../src \ && ninja install"