From e3c9929df5befa8a1c2abb36c010427ed0e26954 Mon Sep 17 00:00:00 2001 From: epernod Date: Mon, 15 Jun 2026 13:38:48 +0200 Subject: [PATCH] [ci] new logic for ci workflow to use macOS only on demand or for releases --- .github/workflows/ci.yml | 66 +++++++++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba649f0..2e891f4 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 @@ -39,9 +74,10 @@ jobs: sofa_root: ${{ github.workspace }}/sofa sofa_version: ${{ matrix.sofa_branch }} sofa_scope: 'full' - + + ################# Checkout dependency repository ############## - name: Checkout dependency source code - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: path: deps/CollisionAlgorithm repository: InfinyTech3D/CollisionAlgorithm @@ -70,12 +106,14 @@ jobs: .. ninja install fi - + + ################# Checkout current repository ############## - name: Checkout source code - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: path: ${{ env.WORKSPACE_SRC_PATH }} - + + ################ Build and install current plugin ############## - name: Build and install id: build-install shell: bash @@ -107,7 +145,8 @@ jobs: 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 @@ -119,7 +158,8 @@ jobs: $originalName = "ConstraintGeometry_${{ 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 @@ -133,7 +173,8 @@ jobs: with: 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 @@ -146,12 +187,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 @@ -165,6 +208,7 @@ jobs: for artifact in *; do zip $artifact.zip -r $artifact/* done + - name: Upload release uses: softprops/action-gh-release@v1 with: