[MOnorail]Add group expansion for components and de-couple component ccs from rules ccs.

1) See issue description. These changes are done in notify_reasons.py
2) For changes in notify.py and usergroup_svc.py we are replacing
all remaining instances of
ExpandAnyUserGroups(which takes a list of user_ids and replaces any group_ids with member_ids of that group)
ExpandAnyGroupEmailRecipients(which replaces group_id->member_ids depending on the email settings of the group)

dev url: https://36127-35d5796-jojwang-fix-derived-comp-ccs-dot-monorail-dev.appspot.com/p/monkeyrail/issues/detail?id=53
in order to test emails, the 100% traffic needs to be migrated to the desired latency-insensitive version
So you can't test old (broken) behavior with monorail-dev because it will use the
new code that has the bug fix to send emails.

You can test the broken behavior in staging: https://bugs-staging.chromium.org/p/monkeyrail/issues/detail?id=26
and confirm it's fixed in dev using the dev URL above

Bug: monorail:8585
Change-Id: I19c39ed78ac49408f0c51f699fe1354d1039e95d
Reviewed-on: https://chromium-review.googlesource.com/c/infra/infra/+/2508643
Commit-Queue: Joanna Wang <jojwang@chromium.org>
Reviewed-by: Tiffany Zhang <zhangtiff@chromium.org>
Reviewed-by: Andrew Chang <andrewjc@google.com>
Cr-Commit-Position: refs/heads/master@{#36121}
6 files changed
tree: 7b31f7460c1550a3a06a217acfbb94bf69b33752
  1. .gitattributes
  2. .gitignore
  3. .style.yapf
  4. .yapfignore
  5. 3pp/
  7. DEPS
  10. PRESUBMIT.py
  11. README.md
  14. appengine/
  15. appengine_module/
  16. bootstrap/
  17. build/
  18. chromeperf/
  19. cipd/
  20. codereview.settings
  21. crdx/
  22. doc/
  23. docker/
  24. glyco/
  25. go/
  26. infra/
  27. navbar.md
  28. node/
  29. packages/
  30. python_pb2/
  31. recipes/
  32. run.py
  33. test.py
  34. test/
  35. utils/

infra.git repository

Welcome to the Chrome Infra repository!

Wondering where to start? Check out General Chrome Infrastructure documentation. In particular, to check out this repo and the rest of the infrastructure code, follow the instructions here. The rest of this page is specific to this repo.

Entry points

  • run.py: wrapper script to run programs contained in subdirectories without having to deal with sys.path modifications.
  • test.py: multi-purpose script to run tests.
  • packages/infra_libs/: generally useful functions and classes
  • infra/services/: standalone programs intended to be run as daemons.
  • infra/tools: command-line tools, intended to be run by developers.
  • appengine/: many Chrome-infra-managed AppEngine applications
  • infra/experimental: for, well, experimental stuff. Once they are stabilized and reviewed, they should be moved in a more permanent place.

Miscellaneous technical stuff

  • bootstrap/: utilities to set up a proper Python virtual environment.
  • infra/path_hacks: submodules of this modules give access to modules in the build/ repository. from infra.path_hacks.common import <stg> is actually getting <stg> from build/scripts/common.
  • utils/: purpose? utils?
  • Need to bump infra/deployed to pick up changes?
    • git push origin <updated hash>:deployed
    • mail chrome-troopers@, include:
      • previously deployed hash (for quick rollback)
      • the hash you just pushed
      • the list of CLs that made this push necessary
      • the output of the git push command

Integrating tests with test.py

If you've added a new module, run your tests with test.py:

  1. Create a .coveragerc file in the root directory of the module you want to test. Take a look at another .coveragerc to see what to include in that.
  2. Create a “test” directory in the root directory of the module you want to test. Move your *_test.py files to this directory.

Double-check that your tests are getting picked up when you want them to be: ./test.py test <path-to-package>.

Tests still not getting picked up by test.py? Double-check to make sure you have __init__.py files in each directory of your module so Python recognizes it as a package.


The preferred style is PEP8 with two-space indent; that is, the Chromium Python style, except functions use lowercase_with_underscores. Use yapf (git cl format) to autoformat new code.