Skip to content
Open
62 changes: 43 additions & 19 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,42 @@
branches:
- main
- master

tags:
- 'v*' #release tags in format of 'v25.12.00' for example
- '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

build-and-test:

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: {}
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' &&
(
Expand All @@ -32,8 +56,10 @@

strategy:
fail-fast: false

matrix:
os: [ubuntu-22.04, macos-14, windows-2022]
os: ${{ fromJSON(needs.prepare.outputs.os_list) }}

sofa_branch: [master]
with_mesh_refinement: [ON, OFF]

Expand Down Expand Up @@ -66,16 +92,15 @@
if [[ "$RUNNER_OS" == "Windows" ]]; then
cmd //c "${{ steps.sofa.outputs.vs_vsdevcmd }} \
&& cd /d %GITHUB_WORKSPACE%/deps/MeshRefinement/build \
&& cmake \
-GNinja \
&& 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 \
Expand All @@ -92,17 +117,16 @@
- 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 %GITHUB_WORKSPACE%/build \
&& cmake \
-GNinja \
&& cmake -GNinja \
-DCMAKE_PREFIX_PATH=%SOFA_ROOT%/lib/cmake;%GITHUB_WORKSPACE%/deps/MeshRefinement/install \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%/install \
Expand All @@ -122,10 +146,10 @@
-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
Expand Down Expand Up @@ -158,10 +182,9 @@
with:
name: ${{ steps.sanitize.outputs.artifact_name }}
path: ${{ env.WORKSPACE_ARTIFACT_PATH }}


- name: Launch test
id: tests
################### Tests ##############
- name: Launch test
uses: sofa-framework/sofa-test-action@v1.0
with:
sofa_root: ${{ github.workspace }}/sofa
Expand All @@ -173,13 +196,14 @@
nb_parallel_threads: '4'



################### Create plugin artifacts ##############
deploy:
name: Deploy artifacts
if: always() && startsWith(github.ref, 'refs/tags/')
if: 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
Expand All @@ -193,6 +217,7 @@
for artifact in *; do
zip $artifact.zip -r $artifact/*
done

- name: Upload release
uses: softprops/action-gh-release@v1
with:
Expand All @@ -204,4 +229,3 @@
artifacts/InfinyToolkit_*_Linux.zip
artifacts/InfinyToolkit_*_Windows.zip
artifacts/InfinyToolkit_*_macOS.zip