For the well known release / integration branches, this will just be hardcoded. For Try, this will be set via parameter overrides. Differential Revision: https://phabricator.services.mozilla.com/D306499
156 lines
5.6 KiB
Python
156 lines
5.6 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import logging
|
|
import os
|
|
from typing import Literal, Optional, Union
|
|
|
|
from taskgraph.parameters import extend_parameters_schema
|
|
from taskgraph.util.schema import Schema
|
|
|
|
from gecko_taskgraph import GECKO
|
|
from gecko_taskgraph.files_changed import get_locally_changed_files
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class GitHubConfig(Schema, kw_only=True, rename=None):
|
|
branch: str
|
|
pull_head_sha: str
|
|
pull_number: int
|
|
repo_url: str
|
|
|
|
|
|
class TasksRegex(Schema, kw_only=True):
|
|
include: Optional[list[str]] = None
|
|
exclude: Optional[list[str]] = None
|
|
|
|
|
|
class TryTaskConfig(Schema, kw_only=True):
|
|
tasks: Optional[list[str]] = None
|
|
browsertime: Optional[bool] = None
|
|
disable_pgo: Optional[bool] = None
|
|
env: Optional[dict[str, str]] = None
|
|
gecko_profile: Optional[bool] = None
|
|
gecko_profile_interval: Optional[float] = None
|
|
gecko_profile_entries: Optional[int] = None
|
|
gecko_profile_features: Optional[str] = None
|
|
gecko_profile_threads: Optional[str] = None
|
|
# Use OS-native profilers (Simpleperf for Android and xperf for Windows)
|
|
# when running tests. Only available in raptor-browsertime tests at the moment.
|
|
native_profiling: Optional[bool] = None
|
|
# Github pull request triggering a code-review analysis
|
|
github: Optional[GitHubConfig] = None
|
|
# adjust parameters, chunks, etc. to speed up the process of greening up a new test config.
|
|
new_test_config: Optional[bool] = None
|
|
# Options passed from `mach perftest` to try.
|
|
perftest_options: Optional[object] = None
|
|
# Alternative optimization strategies to use instead of the default.
|
|
# A module path pointing to a dict to be use as the `strategy_override`
|
|
# argument in `taskgraph.optimize.base.optimize_task_graph`.
|
|
optimize_strategies: Optional[str] = None
|
|
# Record an rr trace on supported tasks using the Pernosco debugging service.
|
|
pernosco: Optional[bool] = None
|
|
priority: Optional[Literal["lowest", "very-low", "low"]] = None
|
|
rebuild: Optional[Union[int, dict[str, int]]] = None
|
|
tasks_regex: Optional[TasksRegex] = None
|
|
use_artifact_builds: Optional[bool] = None
|
|
# Mapping of worker alias to worker pools to use for those aliases.
|
|
worker_overrides: Optional[dict[str, str]] = None
|
|
# List of worker types that we will use to run tasks on.
|
|
worker_types: Optional[list[str]] = None
|
|
routes: Optional[list[str]] = None
|
|
|
|
|
|
class GeckoParametersSchema(Schema, kw_only=True, rename=None):
|
|
android_perftest_backstop: bool
|
|
app_version: str
|
|
backstop: bool
|
|
dontbuild: bool
|
|
build_number: int
|
|
enable_always_target: Union[bool, list[str]]
|
|
files_changed: list[str]
|
|
hg_branch: Optional[str]
|
|
next_version: Optional[str]
|
|
optimize_strategies: Optional[str]
|
|
phabricator_diff: Optional[str]
|
|
release_enable_emefree: bool
|
|
release_enable_partner_repack: bool
|
|
release_enable_partner_attribution: bool
|
|
release_eta: Optional[str]
|
|
release_history: dict[str, dict]
|
|
release_partners: Optional[list[str]]
|
|
release_partner_config: Optional[dict]
|
|
release_partner_build_number: int
|
|
release_type: str
|
|
release_product: Optional[str]
|
|
test_manifest_loader: str
|
|
try_mode: Optional[str]
|
|
try_task_config: TryTaskConfig
|
|
version: str
|
|
head_git_repository: Optional[str] = None
|
|
head_git_rev: Optional[str] = None
|
|
pull_request_number: Optional[int] = None
|
|
|
|
|
|
def get_contents(path):
|
|
with open(path) as fh:
|
|
contents = fh.readline().rstrip()
|
|
return contents
|
|
|
|
|
|
def get_version(product_dir="browser"):
|
|
version_path = os.path.join(GECKO, product_dir, "config", "version_display.txt")
|
|
return get_contents(version_path)
|
|
|
|
|
|
def get_app_version(product_dir="browser"):
|
|
app_version_path = os.path.join(GECKO, product_dir, "config", "version.txt")
|
|
return get_contents(app_version_path)
|
|
|
|
|
|
def get_defaults(repo_root=None):
|
|
return {
|
|
"android_perftest_backstop": False,
|
|
"app_version": get_app_version(),
|
|
"backstop": False,
|
|
"dontbuild": False,
|
|
"base_repository": "https://hg.mozilla.org/mozilla-unified",
|
|
"build_number": 1,
|
|
"enable_always_target": ["docker-image"],
|
|
"files_changed": lambda: sorted(get_locally_changed_files(repo_root)),
|
|
"head_repository": "https://hg.mozilla.org/mozilla-central",
|
|
"hg_branch": "default",
|
|
"next_version": None,
|
|
"optimize_strategies": None,
|
|
"phabricator_diff": None,
|
|
"project": "mozilla-central",
|
|
"release_enable_emefree": False,
|
|
"release_enable_partner_repack": False,
|
|
"release_enable_partner_attribution": False,
|
|
"release_eta": "",
|
|
"release_history": {},
|
|
"release_partners": [],
|
|
"release_partner_config": None,
|
|
"release_partner_build_number": 1,
|
|
"release_product": None,
|
|
"release_type": "nightly",
|
|
# This refers to the upstream repo rather than the local checkout, so
|
|
# should be hardcoded to 'hg' even with git-cinnabar.
|
|
"repository_type": "hg",
|
|
"test_manifest_loader": "default",
|
|
"try_mode": None,
|
|
"try_task_config": {},
|
|
"version": get_version(),
|
|
}
|
|
|
|
|
|
def register_parameters():
|
|
extend_parameters_schema(GeckoParametersSchema, defaults_fn=get_defaults)
|
|
|
|
|
|
def get_decision_parameters(graph_config, parameters):
|
|
if pr_number := os.environ.get("GECKO_PULL_REQUEST_NUMBER", None):
|
|
parameters["pull_request_number"] = int(pr_number)
|