Renamed BaseObject to BaseComponent #2509
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: | |
| workflow_dispatch: | |
| inputs: | |
| is_nightly: | |
| description: 'Is this a nightly build?' | |
| required: false | |
| default: false | |
| type: boolean | |
| pull_request: | |
| push: | |
| jobs: | |
| build-and-test: | |
| name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }} and python ${{ matrix.python_version }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-22.04, macos-14, windows-2022] | |
| sofa_branch: [master] | |
| python_version: ['3.10'] | |
| 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' | |
| sofa_with_sofapython3: 'false' | |
| python_version: '${{ matrix.python_version }}' | |
| - name: Checkout source code | |
| uses: actions/checkout@v2 | |
| with: | |
| path: ${{ env.WORKSPACE_SRC_PATH }} | |
| - name: Setup cache for ccache files | |
| if: ${{ runner.os != 'Windows' }} | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ env.CCACHE_DIR }} | |
| key: ccache_${{ runner.os }} | |
| - name: Build and install | |
| id: build-install | |
| shell: bash | |
| run: | | |
| cmake_options="-GNinja \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \ | |
| -DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake:$pybind11_DIR" \ | |
| -DPYTHON_ROOT=$PYTHON_ROOT -DPython_ROOT=$PYTHON_ROOT \ | |
| -DPYTHON_EXECUTABLE=$PYTHON_EXE -DPython_EXECUTABLE=$PYTHON_EXE" | |
| if [ -e "$(command -v ccache)" ]; then | |
| cmake_options="$cmake_options -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache" | |
| fi | |
| cmake_options="$(echo $cmake_options)" # prettify | |
| if [[ "$RUNNER_OS" == "Windows" ]]; then | |
| cmd //c "${{ steps.sofa.outputs.vs_vsdevcmd }} \ | |
| && cd /d $WORKSPACE_BUILD_PATH \ | |
| && cmake $cmake_options ../src \ | |
| && ninja install" | |
| else | |
| cd "$WORKSPACE_BUILD_PATH" | |
| ccache -z | |
| cmake $cmake_options ../src | |
| ninja install | |
| echo ${CCACHE_BASEDIR} | |
| ccache -s | |
| fi | |
| - name: Set env vars for stubfiles | |
| shell: bash | |
| run: | | |
| #Setup env | |
| # Set env vars for tests | |
| if [[ "$RUNNER_OS" == "Windows" ]]; then | |
| echo "$WORKSPACE_INSTALL_PATH/lib" >> $GITHUB_PATH | |
| echo "$WORKSPACE_INSTALL_PATH/bin" >> $GITHUB_PATH | |
| elif [[ "$RUNNER_OS" == "macOS" ]]; then | |
| echo "DYLD_LIBRARY_PATH=$WORKSPACE_ARTIFACT_PATH/lib:$SOFA_ROOT/lib:$DYLD_LIBRARY_PATH" | tee -a $GITHUB_ENV | |
| else # Linux | |
| echo "LD_LIBRARY_PATH=$WORKSPACE_ARTIFACT_PATH/lib:$SOFA_ROOT/lib:$LD_LIBRARY_PATH" | tee -a $GITHUB_ENV | |
| fi | |
| echo "PYTHONPATH=$WORKSPACE_INSTALL_PATH/lib/python3/site-packages" | tee -a $GITHUB_ENV | |
| - name: Generate stubfiles | |
| id: gen-stub | |
| shell: bash | |
| run: | | |
| #Install stubgen | |
| ${{ steps.sofa.outputs.python_exe }} -m pip install mypy pybind11-stubgen | |
| #For now use pybind11. This might be parametrized as an input of this action | |
| echo "Launching the stub generation with '${{ steps.sofa.outputs.python_exe }} ${{ env.WORKSPACE_SRC_PATH }}/scripts/generate_stubs.py -d $WORKSPACE_INSTALL_PATH/lib/python3/site-packages -m Sofa --use_pybind11'" | |
| ${{ steps.sofa.outputs.python_exe }} ${{ env.WORKSPACE_SRC_PATH }}/scripts/generate_stubs.py -d "$WORKSPACE_INSTALL_PATH/lib/python3/site-packages" -m Sofa --use_pybind11 | |
| #Go back to previous env | |
| echo "PYTHONPATH=" | tee -a $GITHUB_ENV | |
| - name: Set env vars for artifacts | |
| shell: bash | |
| run: | | |
| PROJECT_NAME="${GITHUB_REPOSITORY#*/}" | |
| echo "PROJECT_NAME=$PROJECT_NAME" | tee -a $GITHUB_ENV | |
| ARTIFACT_VERSION="${{ steps.sofa.outputs.run_branch }}" | |
| if [[ "${{ github.event.inputs.is_nightly }}" == "true" ]]; then | |
| ARTIFACT_VERSION="${ARTIFACT_VERSION}-nightly" | |
| fi | |
| ARTIFACT_NAME="${PROJECT_NAME}_${ARTIFACT_VERSION}_python-${{ matrix.python_version }}_for-SOFA-${{ steps.sofa.outputs.sofa_version }}_${{ runner.os }}" | |
| echo "ARTIFACT_NAME=$ARTIFACT_NAME" | tee -a $GITHUB_ENV | |
| - name: Create artifact | |
| id: gen-artifact | |
| uses: actions/upload-artifact@v4.4.0 | |
| with: | |
| name: ${{ env.ARTIFACT_NAME }} | |
| path: ${{ env.WORKSPACE_INSTALL_PATH }} | |
| - name: Install artifact | |
| id: install-artifact | |
| uses: actions/download-artifact@v4.1.7 | |
| with: | |
| name: ${{ env.ARTIFACT_NAME }} | |
| path: ${{ env.WORKSPACE_ARTIFACT_PATH }} | |
| - name: Pepare python environement for tests | |
| shell: bash | |
| run: | | |
| ${{ steps.sofa.outputs.python_exe }} -m pip install rpyc matplotlib | |
| echo "PYTHONPATH=${{ env.WORKSPACE_BUILD_PATH }}/lib/python3/site-packages" | tee -a $GITHUB_ENV | |
| - 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' | |
| - name: Notify dashboard | |
| if: always() && startsWith(github.repository, 'sofa-framework') && startsWith(github.ref, 'refs/heads/master') # we are not on a fork and on master | |
| env: | |
| DASH_AUTH: ${{ secrets.PLUGIN_DASH }} | |
| shell: bash | |
| run: | | |
| test_status=$([ '${{ steps.tests }}' == 'success' ] && \ | |
| echo 'true' || echo 'false') | |
| build_status=$([ '${{ steps.build-install.outcome }}' == 'success' ] && \ | |
| [ '${{ steps.gen-stub.outcome }}' == 'success' ] && \ | |
| echo 'true' || echo 'false') | |
| binary_status=$([ '${{ steps.gen-artifact.outcome }}' == 'success' ] && \ | |
| [ '${{ steps.install-artifact.outcome }}' == 'success' ] && \ | |
| echo 'true' || echo 'false') | |
| os=$(echo "${{ matrix.os }}" | awk -F- '{ print $1 }') | |
| curl -X POST -H "X-API-KEY: $DASH_AUTH" -H "Content-Type: application/json" -d \ | |
| "{\"id\":\"$(echo "${{ github.repository }}" | awk -F/ '{ print $2 }')\",\ | |
| \"github_ref\":\"${{ github.sha }}\",\ | |
| \"url\":\"https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\",\ | |
| \"os\":\"$os\",\ | |
| \"build\":$build_status,\ | |
| \"tests\":$test_status,\ | |
| \"binary\":$binary_status}"\ | |
| https://sofa-framework.org:5000/api/v1/plugins | |
| deploy: | |
| name: Deploy artifacts | |
| if: always() && startsWith(github.repository, 'sofa-framework') && (startsWith(github.ref, 'refs/heads/') || startsWith(github.ref, 'refs/tags/')) # we are not on a fork and on a branch or a tag (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 and set env vars | |
| shell: bash | |
| run: | | |
| cd $GITHUB_WORKSPACE/artifacts | |
| for artifact in *; do | |
| zip $artifact.zip -r $artifact/* | |
| done | |
| PROJECT_NAME="${GITHUB_REPOSITORY#*/}" | |
| echo "PROJECT_NAME=$PROJECT_NAME" | tee -a $GITHUB_ENV | |
| RELEASE_NAME="${{ github.ref_name }}" | |
| RELEASE_TAGNAME="release-${{ github.ref_name }}" | |
| BRANCH_NAME="$RELEASE_NAME" | |
| if [[ "${{ github.event.inputs.is_nightly }}" == "true" ]]; then | |
| RELEASE_NAME="nightly-$RELEASE_NAME" | |
| RELEASE_TAGNAME="nightly-$RELEASE_TAGNAME" | |
| fi | |
| RELEASE_DATE="$(date +'%Y-%m-%d (at %T UTC)')" | |
| echo "RELEASE_NAME=$RELEASE_NAME" | tee -a $GITHUB_ENV | |
| echo "RELEASE_TAGNAME=$RELEASE_TAGNAME" | tee -a $GITHUB_ENV | |
| echo "RELEASE_DATE=$RELEASE_DATE" | tee -a $GITHUB_ENV | |
| - name: Delete old release | |
| uses: dev-drprasad/delete-tag-and-release@v0.2.1 | |
| with: | |
| tag_name: ${{ env.RELEASE_TAGNAME }} | |
| delete_release: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Create new release | |
| if: success() || failure() | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| name: ${{ env.RELEASE_NAME }} | |
| tag_name: ${{ env.RELEASE_TAGNAME }} | |
| fail_on_unmatched_files: false | |
| target_commitish: ${{ github.sha }} | |
| body: | | |
| Last updated on ${{ env.RELEASE_DATE }} | |
| files: | | |
| artifacts/${{ env.PROJECT_NAME }}_*_Linux.zip | |
| artifacts/${{ env.PROJECT_NAME }}_*_Windows.zip | |
| artifacts/${{ env.PROJECT_NAME }}_*_macOS.zip |