docs/infra/Packages-Gardener-Rotation.md
The packages gardener role currently makes use of several tools and communication channels only available to Google employees. See On-call scheduling for Flutter for an overview of work required to make this process more open.
The packages gardener’s role is to eliminate impediments to engineering velocity on teams working on the flutter/packages repository, and to minimize the latency with which critical fixes arrive in our customers' hands. To that end, we maintain a rotation so that there is a clear owner and point of contact for flutter/packages issues, and so that engineers can plan their work around an assumption of reduced productivity during their rotation.
The packages gardener's core responsibilities are:
The gardener's responsibilities do not include:
As such, the gardener should use their trowel and hat to:
Rotations are managed in the Rotations tool. The packages gardener calendar can be added to your calendar. Both of these links are currently Google internal.
Team members are not expected to participate in multiple Flutter rotations. For example, Flutter framework gardeners are exempt and vice versa. New team members should be added to a single rotation.
Before heading out on holiday, or if you get to your shift and find you can't do it, check the upcoming rotations and find a volunteer to swap shifts with while you're out. During some holiday periods when many team members are out and activity is particularly low on the tree, it may not be essential to have a dedicated gardener.
Please briefly describe any issues you encountered during your week of gardening in the packages gardening journal, along with any solutions you think may be useful for other gardeners in the future!
Below are the tasks that should be done routinely while gardening.
Open the packages build dashboard.
Unmute the hackers-ecosystem channel and hackers-infra channel on Discord. Contributors are encouraged to escalate tree closures to you. Respond there as quickly as possible.
Check that all of the auto-rollers are running:
stable → flutter/packages
If a roller's status is not running, contact the person who paused it and work with them make sure whatever work needs to be done to re-activate the roller is happening.
If a roller is failing, check the recent runs to see why, and take action to ensure that the roller starts succeeding again. If the issue will take a while to resolve, pause the roller while resolving it, and include an explanation of why.
Our analysis options do not flag deprecated API usage (context), but it’s important that we not leave deprecated API usage in our packages for any longer than necessary, since when the APIs are eventually removed anyone still using versions of the package predating the fix will get build errors that many developers find confusing and hard to resolve.
Once during your rotation, do a manual check for any new deprecations:
deprecated_member_use: ignore in analysis_options.yaml at the root of the repository.dart run script/tool/bin/flutter_plugin_tools.dart analyze \ --custom-analysis=script/configs/custom_analysis.yamlteam-ecosystem, packages, p: deprecated api, and c: tech-debt labels.
p: waiting for stable update label.
deprecated_member_use_from_same_package since the example is technically a different package), annotate it with an ignore instead, so it doesn’t show up in this manual check in the future.If old deprecations have reached the point where they can be fixed without losing support for stable, considering using some of your gardening time to replace the deprecated API usage.
File GitHub issues if none are already open.
P1 priority.c: contributor-productivity label.If a test failure is attributable to a commit, revert the commit immediately.
If the commit landed within the last 24 hours:
Revert label. Our infrastructure will automatically create a revert PR and land it.If the commit could not be automatically reverted:
revert label to the PR to allow the bot to land it without approval.Flakes are particularly productivity-killing since they silently trigger all of the key problems the gardener is meant to prevent: red tree status. As such flakes should be treated in the same way a reproducible breakage is treated -- as though they were always failing.
If you see a test failure that appears to be a flake: