[ci] new logic for ci workflow to use macOS only on demand or for rel… #371
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | ||
| on: | ||
| push: | ||
| branches: | ||
| - main | ||
| - master | ||
| tags: | ||
| - 'v*' | ||
| 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: | ||
| build-and-test: | ||
| 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_name == 'workflow_dispatch' || | ||
| startsWith(github.ref, 'refs/tags/') | ||
| runs-on: ${{ matrix.os }} | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| os: ${{ fromJSON( | ||
| github.event_name == 'pull_request' || | ||
| (github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/')) ? | ||
| '["ubuntu-22.04","windows-2022"]' : | ||
| '["ubuntu-22.04","windows-2022","macos-14"]' | ||
| ) }} | ||
| 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' | ||
| ############## 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 ############## | ||
| - 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" | ||
| 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 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 \ | ||
| -DCMAKE_PREFIX_PATH=%SOFA_ROOT%/lib/cmake;%GITHUB_WORKSPACE%/deps/MeshRefinement/install \ | ||
| -DCMAKE_BUILD_TYPE=Release \ | ||
| -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;$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 | ||
| ccache -s | ||
| fi | ||
| ################### Artifact naming ############## | ||
| - name: Sanitize artifact name | ||
| id: sanitize | ||
| shell: pwsh | ||
| run: | | ||
| if ("${{ matrix.with_mesh_refinement }}" -eq "ON") { | ||
| $dependency = "with_meshrefinement" | ||
| } | ||
| else { | ||
| $dependency = "standalone" | ||
| } | ||
| $originalName = "InfinyToolkit_${dependency}_${{ steps.sofa.outputs.run_branch }}_SOFA-${{ steps.sofa.outputs.sofa_version }}_${{ runner.os }}" | ||
| $artifact_name = $originalName -replace '[":;<>|*?\r\n\\/]', '' -replace ' ', '_' | ||
| echo "artifact_name=$artifact_name" >> $env:GITHUB_OUTPUT | ||
| ################### Upload artifact ############## | ||
| - name: Create artifact | ||
| uses: actions/upload-artifact@v4.4.0 | ||
| with: | ||
| name: ${{ steps.sanitize.outputs.artifact_name }} | ||
| path: ${{ env.WORKSPACE_INSTALL_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' | ||
| deploy: | ||
| name: Deploy artifacts | ||
| 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 | ||
| with: | ||
| path: artifacts | ||
| - name: Zip artifacts | ||
| shell: bash | ||
| run: | | ||
| cd $GITHUB_WORKSPACE/artifacts | ||
| 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/InfinyToolkit_*_Linux.zip | ||
| artifacts/InfinyToolkit_*_Windows.zip | ||
| artifacts/InfinyToolkit_*_macOS.zip | ||