code: public Runnable registerFor(final Item item) {
          final Collection<GitHubRepositoryName> names = parseAssociatedNames(item);
  
          final List<GHEvent> events = from(GHEventsSubscriber.all())
                  .filter(isApplicableFor(item))
                  .transformAndConcat(extractEvents()).toList();
  
          return new Runnable() {
              public void run() {
                  if (events.isEmpty()) {
                      LOGGER.debug("No any subscriber interested in {}, but hooks creation launched, skipping...",
                              item.getFullName());
                      return;
                  }
  
                  LOGGER.info("GitHub webhooks activated for job {} with {} (events: {})",
                          item.getFullName(), names, events);
  
                  from(names)
                          .transform(createHookSubscribedTo(events))
                          .filter(notNull())
                          .filter(log("Created hook")).toList();
              }
          };
      }
docs: Creates runnable with ability to create hooks for given project
  For each GH repo name contributed by {@link com.cloudbees.jenkins.GitHubRepositoryNameContributor},
  this runnable creates hook (with clean old one).
  
  Hook events job interested in, contributes to full set instances of {@link GHEventsSubscriber}.
  New events will be merged with old ones from existent hook.
  
  By default only push event is registered
  
  @param item to find for which repos we should create hooks
  
  @return runnable to create hooks on run
  @see #createHookSubscribedTo(List)
  @since 1.25.0