osrf / homebrew-simulation

Homebrew tap for osrf simulation software
Apache License 2.0
56 stars 74 forks source link
gazebo hacktoberfest homebrew ignition-gazebo ignition-robotics macos robotics robotics-simulation
Build Status
brew test-bot GitHub action brew test-bot

homebrew-simulation

Homebrew tap for osrf simulation software

To use:

brew tap osrf/simulation
brew install gz-harmonic

Bottle status

Status Citadel Fortress Garden Harmonic Ionic
gz-cmake gz-cmake2 gz-cmake2 gz-cmake3 gz-cmake3 gz-cmake4
gz-common gz-common3 gz-common4 gz-common5 gz-common5 gz-common6
gz-fuel-tools gz-fuel_tools4 gz-fuel_tools7 gz-fuel_tools8 gz-fuel_tools9 gz-fuel_tools10
gz-gui gz-gui3 gz-gui6 gz-gui7 gz-gui8 gz-gui9
gz-launch gz-launch2 gz-launch5 gz-launch6 gz-launch7 gz-launch8
gz-math gz-math6 gz-math6 gz-math7 gz-math7 gz-math8
gz-msgs gz-msgs5 gz-msgs8 gz-msgs9 gz-msgs10 gz-msgs11
gz-physics gz-physics2 gz-physics5 gz-physics6 gz-physics7 gz-physics8
gz-plugin gz-plugin1 gz-plugin1 gz-plugin2 gz-plugin2 gz-plugin3
gz-rendering gz-rendering3 gz-rendering6 gz-rendering7 gz-rendering8 gz-rendering9
gz-sensors gz-sensors3 gz-sensors6 gz-sensors7 gz-sensors8 gz-sensors9
gz-sim gz-sim3 gz-sim6 gz-sim7 gz-sim8 gz-sim9
gz-tools gz-tools1 gz-tools1 gz-tools2 gz-tools2 gz-tools2
gz-transport gz-transport8 gz-transport11 gz-transport12 gz-transport13 gz-transport14
gz-utils gz-utils1 gz-utils1 gz-utils2 gz-utils2 gz-utils3
sdformat sdformat9 sdformat12 sdformat13 sdformat14 sdformat15
collection gz-citadel gz-fortress gz-garden gz-harmonic gz-ionic

Gazebo Classic

To build bottles

The https://build.osrfoundation.org jenkins instance is used for building bottles with the following job (configured in brew_release.dsl):

This jenkins job is triggered for pull requests when an administrator makes a comment on the pull request that includes the phrase build bottle. The job should appear in the GitHub build status interface for the latest commit:

GitHub build status interface screenshot

For example, #1157 was created after running our release.py script and this comment triggered the bottle build, resulting in a successful bottle upload and a4793387.

Bottle builds are not triggered automatically for every pull request for several reasons:

To disable broken bottles

When a new major or minor version of a formula is merged to homebrew-core that is a dependency of formulae in this tap, it may break our bottles, requiring a rebuild (see #1728 or #1708 for example). As the osrf/simulation bottles will be broken immediately upon the merge in homebrew-core, it can be useful to disable the broken bottles while waiting for new bottles to be rebuilt. The --remove-bottle-block parameter to brew bump-revision can be used in this instance. For example, the bottle removals from 8ca61f3d in #1742 could be repeated with the following commands:

brew bump-revision --remove-bottle-block ignition-msgs1
brew bump-revision --remove-bottle-block ignition-msgs5
brew bump-revision --remove-bottle-block ignition-msgs6
brew bump-revision --remove-bottle-block ignition-msgs7
brew bump-revision --remove-bottle-block ignition-msgs8

If all broken formulae properly list an explicit dependency on the breaking formula, the following shell script loop can be used to remove all broken bottles. For example, the following snippet was used to remove broken protobuf bottles in https://github.com/osrf/homebrew-simulation/issues/2314#issuecomment-1626396384:

cd `brew --repo osrf/simulation`/Formula
for f in $(grep -l '^ *bottle do' $(grep -rlI depend.*protobuf .) | sort)
do
  brew bump-revision --remove-bottle-block --message="broken bottle" $f
done

Troubleshooting

Jenkins implementation details

The generic-release-homebrew_triggered_bottle_builder jenkins job currently builds bottles for macOS 10.15 catalina and 10.16 big_sur using the following job configurations and the homebrew_bottle_creation.bash script:

If the bottle building job finishes without errors for each build configuration, it will trigger a subsequent repository_uploader_packages job that uploads the bottles to s3 and a generic-release-homebrew_pr_bottle_hash_updater job that commits the changes in bottle sha256 values to the pull request branch using this script.

Building bottles for newly supported macOS distributions

When we add support for a new version of macOS, we need to build bottles for that formula, while ideally keeping the existing bottles. This can be done by using the --keep-old parameter with brew test-bot and brew bottle. Since ignition-tooling/release-tools#556, bottle builds can be triggered for a specified version of macOS using --keep-old by adding special tags to the build bottle comment in a homebrew-simulation pull request. Use brew-bot-tag: along with build-for-new-distro-{distro} in the comment, where {distro} is the version string used in homebrew bottle blocks (such as catalina or big_sur). See this comment in osrf/homebrew-simulation#1694 as an example that triggered a bottle build for big_sur only. Note that the --keep-old flag only works if the pull request does not change the formula version. Adding a comment to a formula (as in osrf/homebrew-simulation#1694) is sufficient.