# Defines buckets on cr-buildbucket.appspot.com, used to schedule builds
# on buildbot. In particular, CQ uses some of these buckets to schedule tryjobs.
#
# See http://luci-config.appspot.com/schemas/projects:cr-buildbucket.cfg for
# schema of this file and documentation.
#
# Please keep this list sorted by bucket name.
acl_sets {
  name: "ci"
  acls {
    role: READER
    group: "all"
  }
  acls {
    role: SCHEDULER
    identity: "luci-scheduler@appspot.gserviceaccount.com"
  }
}

acl_sets {
  name: "try"
  acls {
    role: READER
    group: "all"
  }
  acls {
    role: SCHEDULER
    group: "project-openscreen-tryjob-access"
  }
  acls {
    role: SCHEDULER
    group: "service-account-cq"
  }
}

builder_mixins {
  name: "ci"
  recipe {
    properties_j: "is_ci:true"
  }
}

builder_mixins {
  name: "debug"
  recipe {
    properties_j: "is_debug:true"
  }
}

builder_mixins {
  name: "gcc"
  recipe {
    properties_j: "is_gcc:true"
  }
}


builder_mixins {
  name: "asan"
  recipe {
    properties_j: "is_asan:true"
  }
}

builder_mixins {
  name: "tsan"
  recipe {
    properties_j: "is_tsan:true"
  }
}

builder_mixins {
  name: "code_coverage"
  recipe {
    properties_j: "use_coverage:true"
  }
}

builder_mixins {
  name: "linux"
  dimensions: "os:Ubuntu-16.04"
}

builder_mixins {
  name: "linux1804"
  dimensions: "os:Ubuntu-18.04"
}

builder_mixins {
  name: "mac"

  # NOTE: The OS version here will determine which version of XCode is being
  # used. Relevant links; so you and I never have to spend hours finding this
  # stuff all over again to fix things like https://crbug.com/openscreen/86
  #
  # 1. The recipe code that uses the "osx_sdk" recipe module:
  #
  #   https://cs.chromium.org/chromium/build/scripts/slave/recipes/openscreen.py?rcl=671f9f1c5f5bef81d0a39973aa8729cc83bb290e&l=74
  #
  # 2. The XCode version look-up table in the "osx_sdk" recipe module:
  #
  #   https://cs.chromium.org/chromium/tools/depot_tools/recipes/recipe_modules/osx_sdk/api.py?l=32
  #
  dimensions: "os:Mac-10.15"

  caches: {
    # Cache for mac_toolchain tool and XCode.app used in recipes.
    name: "osx_sdk"
    path: "osx_sdk"
  }
}

builder_mixins {
  name: "x64"
  dimensions: "cpu:x86-64"
  recipe {
    properties: "target_cpu:x64"
  }
}

builder_mixins {
  name: "arm64"
  dimensions: "cpu:x86-64"
  recipe {
    properties: "target_cpu:arm64"
  }
}

# The default sysroot is sid, which is too new for the swarming bots,
# which are locked to the standard library that shipped with Ubuntu 16.04.
builder_mixins {
  name: "sysroot_platform_stretch"
  recipe: {
    properties: "sysroot_platform:stretch"
  }
}

builder_mixins {
  name: "chromium"
  recipe: {
    name: "chromium"
    properties: "builder_group:client.openscreen.chromium"
  }
}

builder_mixins {
  name: "goma_rbe"
  recipe: {
    properties_j: <<EOF
      $build/goma: {
        "server_host": "goma.chromium.org",
        "rpc_extra_params": "?prod"
      }
    EOF
  }
}

builder_mixins {
  name: "goma_rbe_ats"
  recipe: {
    properties_j: <<EOF
      $build/goma: {
        "server_host": "goma.chromium.org",
        "rpc_extra_params": "?prod",
        "enable_ats": true
      }
    EOF
  }
}

builder_mixins {
  name: "no_goma"
  recipe {
    properties_j: "use_goma:false"
  }
}

buckets {
  name: "luci.openscreen.ci"
  acl_sets: "ci"
  swarming {
    hostname: "chromium-swarm.appspot.com"
    builder_defaults {
      dimensions: "pool:luci.flex.ci"
      recipe {
        cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
        cipd_version: "refs/heads/master"
        name: "openscreen"
        # Note: we use bash-style heredocs to avoid having to escape everything.
        properties_j: <<EOF
          $depot_tools/bot_update: {
            "apply_patch_on_gclient":true
          }
        EOF
        properties_j: <<EOF
          $recipe_engine/isolated: {
            "server": "https://isolateserver.appspot.com"
          }
        EOF
        properties_j: <<EOF
          $recipe_engine/swarming: {
            "server": "https://chromium-swarm.appspot.com"
          }
        EOF
      }
      service_account: "openscreen-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
    }

    builders {
      name: "linux64_debug"
      mixins: "linux"
      mixins: "debug"
      mixins: "x64"
      mixins: "asan"
      mixins: "ci"
      mixins: "goma_rbe_ats"
    }

    builders {
      name: "linux64_gcc_debug"
      mixins: "linux1804"
      mixins: "debug"
      mixins: "x64"
      mixins: "gcc"
      mixins: "ci"
      mixins: "no_goma"
    }

    builders {
      name: "linux64_tsan"
      mixins: "linux"
      mixins: "x64"
      mixins: "tsan"
      mixins: "ci"
      mixins: "goma_rbe_ats"
    }

    builders {
      name: "linux_arm64_debug"
      mixins: "linux"
      mixins: "arm64"
      mixins: "debug"
      mixins: "sysroot_platform_stretch"
      mixins: "ci"
      mixins: "goma_rbe_ats"
    }

    builders {
      name: "mac_debug"
      mixins: "mac"
      mixins: "debug"
      mixins: "x64"
      mixins: "ci"
      mixins: "goma_rbe"
    }

    builders {
      name: "chromium_linux64_debug"
      mixins: "linux"
      mixins: "debug"
      mixins: "x64"
      mixins: "chromium"
      mixins: "ci"
      mixins: "goma_rbe_ats"
    }

    builders {
      name: "chromium_mac_debug"
      mixins: "mac"
      mixins: "debug"
      mixins: "x64"
      mixins: "chromium"
      mixins: "ci"
      mixins: "goma_rbe"
    }

    # TODO(issuetracker.google.com/155812080): Integrate this with existing
    # linux64_debug bot.
    builders {
      name: "linux64_coverage_debug"
      mixins: "linux"
      mixins: "debug"
      mixins: "x64"
      mixins: "code_coverage"
      mixins: "ci"
      mixins: "goma_rbe_ats"
    }
  }
}

buckets: {
  name: "luci.openscreen.try"
  acl_sets: "try"
  swarming {
    hostname: "chromium-swarm.appspot.com"
    builder_defaults {
      dimensions: "pool:luci.flex.try"
      recipe {
        cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build"
        cipd_version: "refs/heads/master"
        name: "openscreen"
        # Note: we use bash-style heredocs to avoid having to escape everything.
        properties_j: <<EOF
          $depot_tools/bot_update: {
            "apply_patch_on_gclient":true
          }
        EOF
        properties_j: <<EOF
          $recipe_engine/isolated: {
            "server": "https://isolateserver.appspot.com"
          }
        EOF
        properties_j: <<EOF
          $recipe_engine/swarming: {
            "server": "https://chromium-swarm.appspot.com"
          }
        EOF
      }
      service_account: "openscreen-try-builder@chops-service-accounts.iam.gserviceaccount.com"
    }

    builders {
      name: "linux64_debug"
      mixins: "linux"
      mixins: "debug"
      mixins: "x64"
      mixins: "asan"
      mixins: "goma_rbe_ats"
    }

    builders {
      name: "linux64_gcc_debug"
      mixins: "linux1804"
      mixins: "debug"
      mixins: "x64"
      mixins: "gcc"
      mixins: "no_goma"
    }

    builders {
      name: "linux64_tsan"
      mixins: "linux"
      mixins: "x64"
      mixins: "tsan"
      mixins: "goma_rbe_ats"
    }

    builders {
      name: "linux_arm64_debug"
      mixins: "linux"
      mixins: "arm64"
      mixins: "debug"
      mixins: "sysroot_platform_stretch"
      mixins: "goma_rbe_ats"
    }

    builders {
      name: "mac_debug"
      mixins: "mac"
      mixins: "debug"
      mixins: "x64"
      mixins: "goma_rbe"
    }

    builders {
      name: "openscreen_presubmit"
      recipe {
        name: "run_presubmit"
        properties: "repo_name:openscreen"
        properties: "runhooks:true"
      }
      mixins: "linux"
      mixins: "x64"
    }

    builders {
      name: "chromium_linux64_debug"
      mixins: "linux"
      mixins: "debug"
      mixins: "x64"
      mixins: "chromium"
      mixins: "goma_rbe_ats"
    }

    builders {
      name: "chromium_mac_debug"
      mixins: "mac"
      mixins: "debug"
      mixins: "x64"
      mixins: "chromium"
      mixins: "goma_rbe"
    }

    # TODO(issuetracker.google.com/155812080): Integrate this with existing
    # linux64_debug bot.
    builders {
      name: "linux64_coverage_debug"
      mixins: "linux"
      mixins: "debug"
      mixins: "x64"
      mixins: "code_coverage"
      mixins: "goma_rbe_ats"
    }
  }
}

