diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index fce0367436..cf15fce96a 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -15,9 +15,8 @@ on: - '*' jobs: - windows: - name: Windows - + windows2019: + name: Windows 2019 runs-on: windows-2019 steps: @@ -115,53 +114,18 @@ jobs: - name: Upload opensim-core uses: actions/upload-artifact@v4 with: - name: opensim-core-${{ steps.configure.outputs.version }}-win-2019 + name: opensim-core-${{ steps.configure.outputs.version }}-win2019 path: opensim-core-${{ steps.configure.outputs.version }}.zip - # TODO: Must be relative to the workspace? - # - name: Upload opensim-moco dependencies - # uses: actions/upload-artifact@v1.0.0 - # with: - # name: opensim-core-dependencies - # path: opensim_dependencies_install.zip - - # - name: Create release - # id: create-release - # uses: actions/create-release@v1.0.0 - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # with: - # tag_name: ${{ github.ref }} - # release_name: OpenSim Core ${{ github.ref }} - # draft: true - # prerelease: false - - # - name: Zip opensim-core - # run: | - # 7z a opensim-core-$VERSION.zip opensim-core-${VERSION} - - # - name: Upload release asset - # id: upload-release-asset - # uses: actions/upload-release-asset@v1.0.1 - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # with: - # upload_url: ${{ steps.create-release.outputs.upload_url }} - # asset_path: ./opensim-core-${{ github.ref }}.zip - # asset_name: opensim-core-${{ github.ref }}.zip - # asset_content_type: application/zip - - windows2022_target: - name: Windows2022 [target] - - if: ${{ contains(github.event.pull_request.title, '[perf-win]') || contains(github.event.pull_request.body, '[perf-win]') }} - + windows2022: runs-on: windows-2022 + name: Windows 2022 + + outputs: + version: ${{ steps.configure.outputs.version }} steps: - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.base.ref }} - name: Install Doxygen # choco install doxygen.portable # <-- too unreliable. @@ -174,7 +138,7 @@ jobs: uses: actions/setup-python@v4 with: python-version: '3.10' - + - name: Install numpy #Need numpy to use SWIG numpy typemaps. run: python3 -m pip install numpy==1.25 @@ -217,7 +181,7 @@ jobs: # TODO: Can remove /WX when we use that in CMakeLists.txt. # Set the CXXFLAGS environment variable to turn warnings into errors. # Skip timing test section included by default. - cmake -E env CXXFLAGS="/WX -DSKIP_TIMING" cmake $env:GITHUB_WORKSPACE -LAH -G"Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=~/opensim-core-install -DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install -DOPENSIM_C3D_PARSER=ezc3d -DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on -DPython3_ROOT_DIR=C:\hostedtoolcache\windows\Python\3.10.11\x64 + cmake -E env CXXFLAGS="/WX -DSKIP_TIMING" cmake $env:GITHUB_WORKSPACE -LAH -G"Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=~/opensim-core-install -DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install -DOPENSIM_C3D_PARSER=ezc3d -DOPENSIM_WITH_TROPTER=on -DOPENSIM_WITH_CASADI=on -DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on -DPython3_ROOT_DIR=C:\hostedtoolcache\windows\Python\3.10.11\x64 $env:match = cmake -L . | Select-String -Pattern OPENSIM_QUALIFIED_VERSION $version = $env:match.split('=')[1] echo $version @@ -242,8 +206,8 @@ jobs: run: | chdir $env:GITHUB_WORKSPACE\\build chdir $env:GITHUB_WORKSPACE - Copy-Item -Path "~/opensim-core-install" -Destination "opensim-core-${{ github.event.pull_request.base.ref }}" -Recurse - 7z a "opensim-core-${{ github.event.pull_request.base.ref }}.zip" "opensim-core-${{ github.event.pull_request.base.ref }}" + Copy-Item -Path "~/opensim-core-install" -Destination "opensim-core-${{ steps.configure.outputs.version }}" -Recurse + 7z a "opensim-core-${{ steps.configure.outputs.version }}.zip" "opensim-core-${{ steps.configure.outputs.version }}" - name: Test Python bindings run: | @@ -256,20 +220,19 @@ jobs: - name: Upload opensim-core uses: actions/upload-artifact@v4 with: - name: opensim-core-${{ github.event.pull_request.base.ref }}-win - path: opensim-core-${{ github.event.pull_request.base.ref }}.zip + name: opensim-core-${{ steps.configure.outputs.version }}-win2022 + path: opensim-core-${{ steps.configure.outputs.version }}.zip - windows2022_source: - + windows2022_perf: runs-on: windows-2022 - - name: ${{ (contains(github.event.pull_request.title, '[perf-win]') || contains(github.event.pull_request.body, '[perf-win]')) && 'Windows2022 [source]' || 'Windows2022' }} + name: Windows 2022 [main] - outputs: - version: ${{ steps.configure.outputs.version }} + if: ${{ contains(github.event.pull_request.title, '[perf-win]') || contains(github.event.pull_request.body, '[perf-win]') }} steps: - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.base.ref }} - name: Install Doxygen # choco install doxygen.portable # <-- too unreliable. @@ -282,7 +245,7 @@ jobs: uses: actions/setup-python@v4 with: python-version: '3.10' - + - name: Install numpy #Need numpy to use SWIG numpy typemaps. run: python3 -m pip install numpy==1.25 @@ -325,7 +288,7 @@ jobs: # TODO: Can remove /WX when we use that in CMakeLists.txt. # Set the CXXFLAGS environment variable to turn warnings into errors. # Skip timing test section included by default. - cmake -E env CXXFLAGS="/WX -DSKIP_TIMING" cmake $env:GITHUB_WORKSPACE -LAH -G"Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=~/opensim-core-install -DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install -DOPENSIM_C3D_PARSER=ezc3d -DOPENSIM_WITH_TROPTER=on -DOPENSIM_WITH_CASADI=on -DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on -DPython3_ROOT_DIR=C:\hostedtoolcache\windows\Python\3.10.11\x64 + cmake -E env CXXFLAGS="/WX -DSKIP_TIMING" cmake $env:GITHUB_WORKSPACE -LAH -G"Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=~/opensim-core-install -DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install -DOPENSIM_C3D_PARSER=ezc3d -DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on -DPython3_ROOT_DIR=C:\hostedtoolcache\windows\Python\3.10.11\x64 $env:match = cmake -L . | Select-String -Pattern OPENSIM_QUALIFIED_VERSION $version = $env:match.split('=')[1] echo $version @@ -350,8 +313,8 @@ jobs: run: | chdir $env:GITHUB_WORKSPACE\\build chdir $env:GITHUB_WORKSPACE - Copy-Item -Path "~/opensim-core-install" -Destination "opensim-core-${{ steps.configure.outputs.version }}" -Recurse - 7z a "opensim-core-${{ steps.configure.outputs.version }}.zip" "opensim-core-${{ steps.configure.outputs.version }}" + Copy-Item -Path "~/opensim-core-install" -Destination "opensim-core-${{ github.event.pull_request.base.ref }}" -Recurse + 7z a "opensim-core-${{ github.event.pull_request.base.ref }}.zip" "opensim-core-${{ github.event.pull_request.base.ref }}" - name: Test Python bindings run: | @@ -364,26 +327,106 @@ jobs: - name: Upload opensim-core uses: actions/upload-artifact@v4 with: - name: opensim-core-${{ steps.configure.outputs.version }}-win - path: opensim-core-${{ steps.configure.outputs.version }}.zip + name: opensim-core-${{ github.event.pull_request.base.ref }}-win2022 + path: opensim-core-${{ github.event.pull_request.base.ref }}.zip - mac_target: - name: Mac [target] + performance_analysis_win: + runs-on: ubuntu-latest + name: Performance Analysis [Windows 2022] - runs-on: macos-14 + env: + GH_TOKEN: ${{ github.token }} - if: ${{ contains(github.event.pull_request.title, '[perf-mac]') || contains(github.event.pull_request.body, '[perf-mac]') }} + needs: + - windows2022 + - windows2022_perf + + if: ${{ contains(github.event.pull_request.title, '[perf-win]') || contains(github.event.pull_request.body, '[perf-win]') }} steps: - - uses: actions/checkout@v4 + - name: Trigger opensim-perf workflow + uses: Codex-/return-dispatch@v1.12.0 + id: return_dispatch with: - ref: ${{ github.event.pull_request.base.ref }} + token: ${{ secrets.PERF_DISPATCH_PAT }} + repo: opensim-perf + owner: opensim-org + ref: main + workflow: performance_analysis_win.yml + workflow_inputs: '{"commit_sha": "${{ github.event.pull_request.head.sha }}", "target_artifact_name": "opensim-core-${{ github.event.pull_request.base.ref }}-win2022", "source_artifact_name": "opensim-core-${{ needs.windows2022.outputs.version }}-win2022", "target_artifact_zip": "opensim-core-${{ github.event.pull_request.base.ref }}.zip", "source_artifact_zip": "opensim-core-${{ needs.windows2022.outputs.version }}.zip"}' + + - name: Await opensim-perf workflow + uses: Codex-/await-remote-run@v1.11.0 + with: + token: ${{ secrets.PERF_DISPATCH_PAT }} + repo: opensim-perf + owner: opensim-org + run_id: ${{ steps.return_dispatch.outputs.run_id }} + run_timeout_seconds: 10000 + - name: Download performance analysis results + id: download-artifact + uses: dawidd6/action-download-artifact@v3.0.0 + with: + github_token: ${{ secrets.PERF_DISPATCH_PAT }} + run_id: ${{ steps.return_dispatch.outputs.run_id }} + workflow: performance_analysis_win.yml + name: performance-results + path: results + repo: opensim-org/opensim-perf + + - name: Post results to pull request description + run: | + PR_NUMBER=$(jq --raw-output .pull_request.number "$GITHUB_EVENT_PATH") + EXISTING_COMMENT_CONTENT=$(gh api /repos/opensim-org/opensim-core/pulls/${PR_NUMBER} | jq -r '.body') + CUSTOM_HEADER="### Performance analysis" + + REVIEWABLE_TAG="" + REVIEWABLE_CONTENT="" + if [[ $EXISTING_COMMENT_CONTENT == *"$REVIEWABLE_TAG"* ]]; then + REVIEWABLE_CONTENT=$(echo "$EXISTING_COMMENT_CONTENT" | awk "/$REVIEWABLE_TAG/,0") + fi + + if [[ $EXISTING_COMMENT_CONTENT == *"$CUSTOM_HEADER"* ]]; then + CONTENT_TO_REPLACE=$(echo "$EXISTING_COMMENT_CONTENT" | awk "/$CUSTOM_HEADER/,0") + else + CONTENT_TO_REPLACE=${REVIEWABLE_CONTENT} + fi + + NEW_CONTENT="${CUSTOM_HEADER} + + Platform: Windows, self-hosted runner + + $(cat results/performance_results.md) + + ${REVIEWABLE_CONTENT} + " + NEW_COMMENT_BODY="${EXISTING_COMMENT_CONTENT/"${CONTENT_TO_REPLACE}"/${NEW_CONTENT}}" + + # Update the existing description + gh api \ + --method PATCH \ + -H "Content-Type: application/json" \ + -H "Accept: application/vnd.github.v3+json" \ + -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + repos/opensim-org/opensim-core/pulls/${PR_NUMBER} \ + -f "body=${NEW_COMMENT_BODY}" + + mac_x86_64: + runs-on: macos-13 + name: Mac x86_64 + + outputs: + version: ${{ steps.configure.outputs.version }} + + steps: + - uses: actions/checkout@v4 + - name: Install Python packages uses: actions/setup-python@v4 with: python-version: '3.10' - + - name: Install Homebrew packages # Save the gfortran version to a file so we can use it in the cache key. run: | @@ -478,9 +521,9 @@ jobs: make doxygen make install cd $GITHUB_WORKSPACE - mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ github.event.pull_request.base.ref }} - zip --symlinks --recurse-paths --quiet opensim-core-${{ github.event.pull_request.base.ref }}.zip opensim-core-${{ github.event.pull_request.base.ref }} - mv opensim-core-${{ github.event.pull_request.base.ref }} $GITHUB_WORKSPACE/../opensim-core-install + mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ steps.configure.outputs.version }} + zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}.zip opensim-core-${{ steps.configure.outputs.version }} + mv opensim-core-${{ steps.configure.outputs.version }} $GITHUB_WORKSPACE/../opensim-core-install - name: Test Python bindings run: | @@ -493,14 +536,12 @@ jobs: with: # The upload-artifact zipping does not preserve symlinks or executable # bits. So we zip ourselves, even though this causes a double-zip. - name: opensim-core-${{ github.event.pull_request.base.ref }}-mac - path: opensim-core-${{ github.event.pull_request.base.ref }}.zip - - mac_source: + name: opensim-core-${{ steps.configure.outputs.version }}-mac-x86_64 + path: opensim-core-${{ steps.configure.outputs.version }}.zip + mac_arm64: runs-on: macos-14 - - name: ${{ (contains(github.event.pull_request.title, '[perf-mac]') || contains(github.event.pull_request.body, '[perf-mac]')) && 'Mac [source]' || 'Mac' }} + name: Mac Arm64 outputs: version: ${{ steps.configure.outputs.version }} @@ -622,107 +663,150 @@ jobs: with: # The upload-artifact zipping does not preserve symlinks or executable # bits. So we zip ourselves, even though this causes a double-zip. - name: opensim-core-${{ steps.configure.outputs.version }}-mac + name: opensim-core-${{ steps.configure.outputs.version }}-mac-arm64 path: opensim-core-${{ steps.configure.outputs.version }}.zip - performance_analysis_win: - name: Performance Analysis (Windows) - - env: - GH_TOKEN: ${{ github.token }} - - needs: - - windows2022_target - - windows2022_source - - runs-on: ubuntu-latest + mac_arm64_perf: + runs-on: macos-14 + name: Mac Arm64 [main] - if: ${{ contains(github.event.pull_request.title, '[perf-win]') || contains(github.event.pull_request.body, '[perf-win]') }} + if: ${{ contains(github.event.pull_request.title, '[perf-mac]') || contains(github.event.pull_request.body, '[perf-mac]') }} steps: - - name: Trigger opensim-perf workflow - uses: Codex-/return-dispatch@v1.12.0 - id: return_dispatch + - uses: actions/checkout@v4 with: - token: ${{ secrets.PERF_DISPATCH_PAT }} - repo: opensim-perf - owner: opensim-org - ref: main - workflow: performance_analysis_win.yml - workflow_inputs: '{"commit_sha": "${{ github.event.pull_request.head.sha }}", "target_artifact_name": "opensim-core-${{ github.event.pull_request.base.ref }}-win", "source_artifact_name": "opensim-core-${{ needs.windows2022_source.outputs.version }}-win", "target_artifact_zip": "opensim-core-${{ github.event.pull_request.base.ref }}.zip", "source_artifact_zip": "opensim-core-${{ needs.windows2022_source.outputs.version }}.zip"}' + ref: ${{ github.event.pull_request.base.ref }} - - name: Await opensim-perf workflow - uses: Codex-/await-remote-run@v1.11.0 + - name: Install Python packages + uses: actions/setup-python@v4 with: - token: ${{ secrets.PERF_DISPATCH_PAT }} - repo: opensim-perf - owner: opensim-org - run_id: ${{ steps.return_dispatch.outputs.run_id }} - run_timeout_seconds: 10000 + python-version: '3.10' + + - name: Install Homebrew packages + # Save the gfortran version to a file so we can use it in the cache key. + run: | + brew install cmake pkgconfig autoconf libtool automake wget pcre doxygen llvm + brew reinstall gcc + pip3 install numpy==1.25 + gfortran -v + mkdir gfortran_version + gfortran -v &> gfortran_version/gfortran_version.txt - - name: Download performance analysis results - id: download-artifact - uses: dawidd6/action-download-artifact@v3.0.0 + - name: Cache SWIG + id: cache-swig + uses: actions/cache@v3 with: - github_token: ${{ secrets.PERF_DISPATCH_PAT }} - run_id: ${{ steps.return_dispatch.outputs.run_id }} - workflow: performance_analysis_win.yml - name: performance-results - path: results - repo: opensim-org/opensim-perf + path: ~/swig + key: ${{ runner.os }}-swig - - name: Post results to pull request description + - name: Install SWIG + # if: steps.cache-swig.outputs.cache-hit != 'true' run: | - PR_NUMBER=$(jq --raw-output .pull_request.number "$GITHUB_EVENT_PATH") - EXISTING_COMMENT_CONTENT=$(gh api /repos/opensim-org/opensim-core/pulls/${PR_NUMBER} | jq -r '.body') - CUSTOM_HEADER="### Performance analysis" + mkdir ~/swig-source && cd ~/swig-source + wget https://github.com/swig/swig/archive/refs/tags/v4.1.1.tar.gz + tar xzf v4.1.1.tar.gz && cd swig-4.1.1 + sh autogen.sh && ./configure --prefix=$HOME/swig --disable-ccache + make && make -j4 install - REVIEWABLE_TAG="" - REVIEWABLE_CONTENT="" - if [[ $EXISTING_COMMENT_CONTENT == *"$REVIEWABLE_TAG"* ]]; then - REVIEWABLE_CONTENT=$(echo "$EXISTING_COMMENT_CONTENT" | awk "/$REVIEWABLE_TAG/,0") - fi + - name: Cache dependencies + id: cache-dependencies + uses: actions/cache@v3 + with: + path: ~/opensim_dependencies_install + # If Homebrew updates the gcc package, then our cache of IPOPT is invalid. + # Specifically, the pkgcfg_lib_IPOPT_gfortran CMake variable becomes + # undefined. + key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }}-${{ hashFiles('gfortran_version/*') }} - if [[ $EXISTING_COMMENT_CONTENT == *"$CUSTOM_HEADER"* ]]; then - CONTENT_TO_REPLACE=$(echo "$EXISTING_COMMENT_CONTENT" | awk "/$CUSTOM_HEADER/,0") - else - CONTENT_TO_REPLACE=${REVIEWABLE_CONTENT} - fi + - name: Build dependencies + if: steps.cache-dependencies.outputs.cache-hit != 'true' + run: | + mkdir $GITHUB_WORKSPACE/../build_deps + cd $GITHUB_WORKSPACE/../build_deps + DEP_CMAKE_ARGS=($GITHUB_WORKSPACE/dependencies -LAH) + DEP_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install) + DEP_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) + DEP_CMAKE_ARGS+=(-DSUPERBUILD_ezc3d=ON) + DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_TROPTER=ON) + DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=ON) + DEP_CMAKE_ARGS+=(-DOPENSIM_DISABLE_LOG_FILE=ON) + DEP_CMAKE_ARGS+=(-DCMAKE_OSX_DEPLOYMENT_TARGET=11) + printf '%s\n' "${DEP_CMAKE_ARGS[@]}" + cmake "${DEP_CMAKE_ARGS[@]}" + make --jobs 4 - NEW_CONTENT="${CUSTOM_HEADER} + - name: Configure opensim-core + id: configure + run: | + mkdir $GITHUB_WORKSPACE/../build + cd $GITHUB_WORKSPACE/../build + OSIM_CMAKE_ARGS=($GITHUB_WORKSPACE -LAH) + OSIM_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/../opensim-core-install) + OSIM_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) + OSIM_CMAKE_ARGS+=(-DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install) + OSIM_CMAKE_ARGS+=(-DCMAKE_OSX_DEPLOYMENT_TARGET=11) + OSIM_CMAKE_ARGS+=(-DOPENSIM_C3D_PARSER=ezc3d) + OSIM_CMAKE_ARGS+=(-DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on) + OSIM_CMAKE_ARGS+=(-DSWIG_EXECUTABLE=$HOME/swig/bin/swig) + OSIM_CMAKE_ARGS+=(-DOPENSIM_INSTALL_UNIX_FHS=OFF) + OSIM_CMAKE_ARGS+=(-DOPENSIM_DOXYGEN_USE_MATHJAX=off) + # TODO: Update to simbody.github.io/latest + OSIM_CMAKE_ARGS+=(-DOPENSIM_SIMBODY_DOXYGEN_LOCATION="https://simbody.github.io/simtk.org/api_docs/simbody/latest/") + OSIM_CMAKE_ARGS+=(-DCMAKE_CXX_FLAGS="-Werror, -Wdeprecated-copy") + printf '%s\n' "${OSIM_CMAKE_ARGS[@]}" + cmake "${OSIM_CMAKE_ARGS[@]}" + VERSION=`cmake -L . | grep OPENSIM_QUALIFIED_VERSION | cut -d "=" -f2` + echo $VERSION + echo "VERSION=$VERSION" >> $GITHUB_ENV + echo "version=$VERSION" >> $GITHUB_OUTPUT - Platform: Windows, self-hosted runner + - name: Build opensim-core + run: | + cd $GITHUB_WORKSPACE/../build + make --jobs 4 - $(cat results/performance_results.md) + - name: Test opensim-core + run: | + cd $GITHUB_WORKSPACE/../build + ctest --parallel 4 --output-on-failure - ${REVIEWABLE_CONTENT} - " - NEW_COMMENT_BODY="${EXISTING_COMMENT_CONTENT/"${CONTENT_TO_REPLACE}"/${NEW_CONTENT}}" + - name: Install opensim-core + run: | + cd $GITHUB_WORKSPACE/../build + make doxygen + make install + cd $GITHUB_WORKSPACE + mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ github.event.pull_request.base.ref }} + zip --symlinks --recurse-paths --quiet opensim-core-${{ github.event.pull_request.base.ref }}.zip opensim-core-${{ github.event.pull_request.base.ref }} + mv opensim-core-${{ github.event.pull_request.base.ref }} $GITHUB_WORKSPACE/../opensim-core-install - # Update the existing description - gh api \ - --method PATCH \ - -H "Content-Type: application/json" \ - -H "Accept: application/vnd.github.v3+json" \ - -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ - repos/opensim-org/opensim-core/pulls/${PR_NUMBER} \ - -f "body=${NEW_COMMENT_BODY}" + - name: Test Python bindings + run: | + cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python + # Run the python tests, verbosely. + python3 -m unittest discover --start-directory opensim/tests --verbose - performance_analysis_mac: + - name: Upload opensim-core + uses: actions/upload-artifact@v4 + with: + # The upload-artifact zipping does not preserve symlinks or executable + # bits. So we zip ourselves, even though this causes a double-zip. + name: opensim-core-${{ github.event.pull_request.base.ref }}-mac-arm64 + path: opensim-core-${{ github.event.pull_request.base.ref }}.zip - name: Performance Analysis (Mac) + performance_analysis_mac: + runs-on: ubuntu-latest + name: Performance Analysis [Mac Arm64] env: GH_TOKEN: ${{ github.token }} - needs: - - mac_target - - mac_source - - runs-on: ubuntu-latest - if: ${{ contains(github.event.pull_request.title, '[perf-mac]') || contains(github.event.pull_request.body, '[perf-mac]') }} + needs: + - mac_arm64 + - mac_arm64_perf + steps: - name: Trigger opensim-perf workflow uses: Codex-/return-dispatch@v1.12.0 @@ -733,7 +817,7 @@ jobs: owner: opensim-org ref: main workflow: performance_analysis_mac.yml - workflow_inputs: '{"commit_sha": "${{ github.event.pull_request.head.sha }}", "target_artifact_name": "opensim-core-${{ github.event.pull_request.base.ref }}-mac", "source_artifact_name": "opensim-core-${{ needs.mac_source.outputs.version }}-mac", "target_artifact_zip": "opensim-core-${{ github.event.pull_request.base.ref }}.zip", "source_artifact_zip": "opensim-core-${{ needs.mac_source.outputs.version }}.zip"}' + workflow_inputs: '{"commit_sha": "${{ github.event.pull_request.head.sha }}", "target_artifact_name": "opensim-core-${{ github.event.pull_request.base.ref }}-mac-arm64", "source_artifact_name": "opensim-core-${{ needs.mac_arm64.outputs.version }}-mac-arm64", "target_artifact_zip": "opensim-core-${{ github.event.pull_request.base.ref }}.zip", "source_artifact_zip": "opensim-core-${{ needs.mac_arm64.outputs.version }}.zip"}' - name: Await opensim-perf workflow uses: Codex-/await-remote-run@v1.11.0 @@ -793,8 +877,7 @@ jobs: -f "body=${NEW_COMMENT_BODY}" ubuntu20: - name: Ubuntu2004 - + name: Ubuntu 20.04 runs-on: ubuntu-20.04 steps: @@ -888,28 +971,26 @@ jobs: make --jobs 4 install cd $GITHUB_WORKSPACE mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ steps.configure.outputs.version }} - zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}-ub20.zip opensim-core-${{ steps.configure.outputs.version }} + zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}-ubuntu20.zip opensim-core-${{ steps.configure.outputs.version }} mv opensim-core-${{ steps.configure.outputs.version }} $GITHUB_WORKSPACE/../opensim-core-install # - name: Test Python bindings # run: | - # echo "TODO: Skipping Python tests." - # # cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python + # cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python # # Run the python tests, verbosely. - # # python3 -m unittest discover --start-directory opensim/tests --verbose + # python3 -m unittest discover --start-directory opensim/tests --verbose - name: Upload opensim-core uses: actions/upload-artifact@v4 with: # The upload-artifact zipping does not preserve symlinks or executable # bits. So we zip ourselves, even though this causes a double-zip. - name: opensim-core-${{ steps.configure.outputs.version }}-ub20-linux - path: opensim-core-${{ steps.configure.outputs.version }}-ub20.zip + name: opensim-core-${{ steps.configure.outputs.version }}-ubuntu20-linux + path: opensim-core-${{ steps.configure.outputs.version }}-ubuntu20.zip - ubuntu20-nomoco: - name: Ubuntu2004-nomoco - - runs-on: ubuntu-20.04 + ubuntu22: + name: Ubuntu 22.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -935,6 +1016,7 @@ jobs: tar xzf v4.1.1.tar.gz && cd swig-4.1.1 sh autogen.sh && ./configure --prefix=$HOME/swig --disable-ccache make && make -j4 install + - name: Cache dependencies id: cache-dependencies uses: actions/cache@v3 @@ -943,7 +1025,7 @@ jobs: key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }} - name: Build dependencies - if: steps.cache-dependencies.outputs.cache-hit != 'true' + # if: steps.cache-dependencies.outputs.cache-hit != 'true' run: | mkdir $GITHUB_WORKSPACE/../build_deps cd $GITHUB_WORKSPACE/../build_deps @@ -951,8 +1033,8 @@ jobs: DEP_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install) DEP_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) DEP_CMAKE_ARGS+=(-DSUPERBUILD_ezc3d=ON) - DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_TROPTER=OFF) - DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=OFF) + DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_TROPTER=ON) + DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=ON) printf '%s\n' "${DEP_CMAKE_ARGS[@]}" cmake "${DEP_CMAKE_ARGS[@]}" make --jobs 4 @@ -972,8 +1054,6 @@ jobs: OSIM_CMAKE_ARGS+=(-DSWIG_EXECUTABLE=~/swig/bin/swig) OSIM_CMAKE_ARGS+=(-DOPENSIM_INSTALL_UNIX_FHS=OFF) OSIM_CMAKE_ARGS+=(-DOPENSIM_DOXYGEN_USE_MATHJAX=off) - OSIM_CMAKE_ARGS+=(-DOPENSIM_WITH_TROPTER=off) - OSIM_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=off) # TODO: Update to simbody.github.io/latest OSIM_CMAKE_ARGS+=(-DOPENSIM_SIMBODY_DOXYGEN_LOCATION="https://simbody.github.io/simtk.org/api_docs/simbody/latest/") OSIM_CMAKE_ARGS+=(-DCMAKE_CXX_FLAGS="-Werror") @@ -994,7 +1074,7 @@ jobs: cd $GITHUB_WORKSPACE/../build # TODO: Temporary for python to find Simbody libraries. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/opensim_dependencies_install/simbody/lib - # ctest --parallel 4 --output-on-failure + ctest --parallel 4 --output-on-failure - name: Install opensim-core run: | @@ -1003,61 +1083,59 @@ jobs: make --jobs 4 install cd $GITHUB_WORKSPACE mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ steps.configure.outputs.version }} - zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}-ub20.zip opensim-core-${{ steps.configure.outputs.version }} + zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}-ubuntu22.zip opensim-core-${{ steps.configure.outputs.version }} mv opensim-core-${{ steps.configure.outputs.version }} $GITHUB_WORKSPACE/../opensim-core-install # - name: Test Python bindings # run: | - # echo "TODO: Skipping Python tests." - # # cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python + # cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python # # Run the python tests, verbosely. - # # python3 -m unittest discover --start-directory opensim/tests --verbose + # python3 -m unittest discover --start-directory opensim/tests --verbose - name: Upload opensim-core uses: actions/upload-artifact@v4 with: # The upload-artifact zipping does not preserve symlinks or executable # bits. So we zip ourselves, even though this causes a double-zip. - name: opensim-core-${{ steps.configure.outputs.version }}-ub20-nomoco-linux - path: opensim-core-${{ steps.configure.outputs.version }}-ub20.zip - - windows2022-gui: - name: Windows2022-gui - - runs-on: windows-2022 + name: opensim-core-${{ steps.configure.outputs.version }}-ubuntu22-linux + path: opensim-core-${{ steps.configure.outputs.version }}-ubuntu22.zip - env: - GH_TOKEN: ${{ github.token }} + build_gui: + name: Build GUI + runs-on: ubuntu-latest + + env: + GH_TOKEN: ${{ github.token }} - if: ${{ contains(github.event.pull_request.title, '[build-gui]') || contains(github.event.pull_request.body, '[build-gui]') }} + if: ${{ contains(github.event.pull_request.title, '[build-gui]') || contains(github.event.pull_request.body, '[build-gui]') }} - steps: - - name: Dispatch opensim-gui workflow and get the run ID - uses: codex-/return-dispatch@v1 - id: return_dispatch - with: - token: ${{ secrets.ACTION_SECRET }} - ref: refs/heads/main - repo: opensim-gui - owner: opensim-org - workflow: build-on-core-pr.yml - - - name: Use the output run ID - run: echo ${{steps.return_dispatch.outputs.run_id}} - - - name: Await opensim-gui workflow - uses: Codex-/await-remote-run@v1.11.0 - with: - token: ${{ secrets.ACTION_SECRET }} - repo: opensim-gui - owner: opensim-org - run_id: ${{ steps.return_dispatch.outputs.run_id }} - run_timeout_seconds: 10000 + steps: + - name: Dispatch opensim-gui workflow and get the run ID + uses: codex-/return-dispatch@v1 + id: return_dispatch + with: + token: ${{ secrets.ACTION_SECRET }} + ref: refs/heads/main + repo: opensim-gui + owner: opensim-org + workflow: build-on-core-pr.yml + - name: Use the output run ID + run: echo ${{steps.return_dispatch.outputs.run_id}} + + - name: Await opensim-gui workflow + uses: Codex-/await-remote-run@v1.11.0 + with: + token: ${{ secrets.ACTION_SECRET }} + repo: opensim-gui + owner: opensim-org + run_id: ${{ steps.return_dispatch.outputs.run_id }} + run_timeout_seconds: 10000 + style: name: Style - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/OpenSim/Simulation/Wrap/WrapEllipsoid.cpp b/OpenSim/Simulation/Wrap/WrapEllipsoid.cpp index 4dcaf4a697..9a5d98e34d 100644 --- a/OpenSim/Simulation/Wrap/WrapEllipsoid.cpp +++ b/OpenSim/Simulation/Wrap/WrapEllipsoid.cpp @@ -696,7 +696,7 @@ int WrapEllipsoid::calcTangentPoint(double p1e, SimTK::Vec3& r1, SimTK::Vec3& p1 } for (i = 0; i < 4; i++) - diag[i] = dedth2[i][i]; + diag[i] = dedth2(i, i); nit2 = 0;