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
  # Exclude Benchmark jobs
  is_not_benchmark = "-Benchmark" not in job
  # Gold jobs are some bazel job that we include for testing
  is_gold = job in ["TensorFlow", "Tutorial"]
  return (is_gold or is_gerrit_or_not_bazel) and is_not_benchmark


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,
  )
