def _is_staging(job):
  job_desc = native.existing_rule(job + "-staging")
  job_subs = job_desc["substitutions"]
  is_bazel = "PROJECT_NAME" in job_subs
  is_gerrit = "GERRIT_PROJECT" in job_subs and job_subs["GERRIT_PROJECT"] != ""
  # Take job with Gerrit review, or jobs that are not bazel jovbs
  is_gerrit_or_not_bazel = is_gerrit or not is_bazel
  # Gold jobs are some bazel job that we include for testing
  is_gold = job in ["TensorFlow", "Tutorial", "rules_k8s", "rules_python"]
  return (is_gold or is_gerrit_or_not_bazel)


def _is_testing(job):
  # We include all test but the docker ones (they needs access to the docker server).
  return not "docker" in job and job != "continuous-integration"


def job_lists(name = "jobs", visibility = None):
  jobs = native.existing_rules()

  native.filegroup(
    name = name,
    srcs = [j for j in jobs if j.endswith("/all")],
    visibility = visibility,
  )

  native.filegroup(
    name = "staging-" + name,
    srcs = [j for j in jobs if j.endswith("/staging") and _is_staging(j[:-8])],
    visibility = visibility,
  )

  native.filegroup(
    name = "test-" + name,
    srcs = [j for j in jobs if j.endswith("/test") and _is_testing(j[:-5])],
    visibility = visibility,
  )
