diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5bc7e58..eed06d3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,15 +5,46 @@ 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: + needs: prepare name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }} + 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 +55,18 @@ 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 @@ -40,23 +75,26 @@ jobs: sofa_version: ${{ matrix.sofa_branch }} sofa_scope: 'full' + ################# Checkout current repository ############## - name: Checkout CollisionAlgorithm - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: path: ${{ env.WORKSPACE_SRC_PATH }} + ################ Build and install current plugin ############## - 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 \ + && 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 @@ -108,7 +146,8 @@ jobs: .. ninja install fi - + + ################### Artifact naming ############## - name: Sanitize artifact name id: sanitize # This step removes special characters from the artifact name to ensure compatibility with upload-artifact @@ -120,7 +159,8 @@ jobs: $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 - + + ################### Create and upload artifact ############## - name: Create artifact id: create-artifact uses: actions/upload-artifact@v4.4.0 @@ -135,6 +175,7 @@ jobs: name: ${{ steps.sanitize.outputs.artifact_name }} path: ${{ env.WORKSPACE_ARTIFACT_PATH }} + ################### Tests ############## - name: Launch test id: tests uses: sofa-framework/sofa-test-action@v1.0 @@ -147,12 +188,14 @@ jobs: 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 @@ -166,6 +209,7 @@ jobs: for artifact in *; do zip $artifact.zip -r $artifact/* done + - name: Upload release uses: softprops/action-gh-release@v1 with: @@ -176,4 +220,3 @@ jobs: artifacts/CollisionAlgorithm_*_Linux.zip artifacts/CollisionAlgorithm_*_Windows.zip artifacts/CollisionAlgorithm_*_macOS.zip -