[ci] Fix windows runner by creating the build/bin folder and placing … #176
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: | |
| jobs: | |
| build-and-test: | |
| name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-22.04, macos-14, windows-2022] | |
| sofa_branch: [master] | |
| steps: | |
| - 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: 'standard' | |
| - name: Checkout CollisionAlgorithm | |
| uses: actions/checkout@v2 | |
| with: | |
| path: ${{ env.WORKSPACE_SRC_PATH }} | |
| - name: Build and install CollisionAlgorithm | |
| id: build-install | |
| shell: bash | |
| run: | | |
| if [[ "$RUNNER_OS" == "Windows" ]]; then | |
| cmd //c "${{ steps.sofa.outputs.vs_vsdevcmd }} \ | |
| && cd /d $WORKSPACE_BUILD_PATH \ | |
| && cmake \ | |
| -GNinja \ | |
| -DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake" \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_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_BUILD_TYPE=Release \ | |
| -DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \ | |
| ../src | |
| ninja install | |
| echo ${CCACHE_BASEDIR} | |
| ccache -s | |
| fi | |
| - name: Checkout ConstraintGeometry | |
| uses: actions/checkout@v2 | |
| with: | |
| repository: InfinyTech3D/ConstraintGeometry | |
| path: downstream/ConstraintGeometry | |
| - name: Build ConstraintGeometry | |
| shell: bash | |
| run: | | |
| mkdir -p downstream/ConstraintGeometry/build | |
| if [[ "$RUNNER_OS" == "Windows" ]]; then | |
| cmd //c "${{ steps.sofa.outputs.vs_vsdevcmd }} \ | |
| && cd /d %GITHUB_WORKSPACE%/downstream/ConstraintGeometry/build \ | |
| && cmake \ | |
| -GNinja \ | |
| -DCMAKE_PREFIX_PATH=$SOFA_ROOT/lib/cmake;%WORKSPACE_INSTALL_PATH%/lib/cmake \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%/downstream/ConstraintGeometry/install \ | |
| .. \ | |
| && ninja install" | |
| else | |
| cd downstream/ConstraintGeometry/build | |
| cmake \ | |
| -GNinja \ | |
| -DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake;$WORKSPACE_INSTALL_PATH/lib/cmake" \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/downstream/ConstraintGeometry/install \ | |
| .. | |
| ninja install | |
| 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 = "CollisionAlgorithm_${{ 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 | |
| - 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 | |
| id: install-artifact | |
| uses: actions/download-artifact@v4.1.7 | |
| with: | |
| name: ${{ steps.sanitize.outputs.artifact_name }} | |
| path: ${{ env.WORKSPACE_ARTIFACT_PATH }} | |
| - name: Make ConstraintGeometry visible for tests | |
| shell: bash | |
| run: | | |
| # The test action sets SOFA_PLUGIN_PATH to build_dir/lib (or /bin on Windows) only. | |
| # Copying the ConstraintGeometry library there makes it discoverable without | |
| # affecting the release artifact (which is uploaded from WORKSPACE_INSTALL_PATH). | |
| if [[ "$RUNNER_OS" == "Windows" ]]; then | |
| # SOFA_PLUGIN_PATH includes build/bin on Windows; create it so SOFA can scan it | |
| mkdir -p $WORKSPACE_BUILD_PATH/bin | |
| cp $GITHUB_WORKSPACE/downstream/ConstraintGeometry/install/bin/ConstraintGeometry.dll $WORKSPACE_BUILD_PATH/bin/ | |
| else | |
| cp $GITHUB_WORKSPACE/downstream/ConstraintGeometry/install/lib/libConstraintGeometry.* $WORKSPACE_BUILD_PATH/lib/ | |
| fi | |
| - 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: | |
| name: Deploy artifacts | |
| if: always() && startsWith(github.ref, 'refs/heads/main') # we are on a branch (not a PR) | |
| 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: true | |
| files: | | |
| artifacts/CollisionAlgorithm_*_Linux.zip | |
| artifacts/CollisionAlgorithm_*_Windows.zip | |
| artifacts/CollisionAlgorithm_*_macOS.zip | |