mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	This sets up a route on Pernosco tasks such that they will emit pulse messages over the notify service's exchange with a dedicated routing key. This will allow the Pernosco pulse consumer to receive only tasks that should be recorded. Original Revision: https://phabricator.services.mozilla.com/D215967 Differential Revision: https://phabricator.services.mozilla.com/D216444
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			5.3 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 taskgraph.parameters import extend_parameters_schema
 | 
						|
from voluptuous import Any, Optional, Required
 | 
						|
 | 
						|
from gecko_taskgraph import GECKO
 | 
						|
from gecko_taskgraph.files_changed import get_locally_changed_files
 | 
						|
 | 
						|
logger = logging.getLogger(__name__)
 | 
						|
 | 
						|
 | 
						|
gecko_parameters_schema = {
 | 
						|
    Required("app_version"): str,
 | 
						|
    Required("backstop"): bool,
 | 
						|
    Required("build_number"): int,
 | 
						|
    Required("enable_always_target"): Any(bool, [str]),
 | 
						|
    Required("files_changed"): [str],
 | 
						|
    Required("hg_branch"): str,
 | 
						|
    Required("message"): str,
 | 
						|
    Required("next_version"): Any(None, str),
 | 
						|
    Required("optimize_strategies"): Any(None, str),
 | 
						|
    Required("phabricator_diff"): Any(None, str),
 | 
						|
    Required("release_enable_emefree"): bool,
 | 
						|
    Required("release_enable_partner_repack"): bool,
 | 
						|
    Required("release_enable_partner_attribution"): bool,
 | 
						|
    Required("release_eta"): Any(None, str),
 | 
						|
    Required("release_history"): {str: dict},
 | 
						|
    Required("release_partners"): Any(None, [str]),
 | 
						|
    Required("release_partner_config"): Any(None, dict),
 | 
						|
    Required("release_partner_build_number"): int,
 | 
						|
    Required("release_type"): str,
 | 
						|
    Required("release_product"): Any(None, str),
 | 
						|
    Required("required_signoffs"): [str],
 | 
						|
    Required("signoff_urls"): dict,
 | 
						|
    Required("test_manifest_loader"): str,
 | 
						|
    Required("try_mode"): Any(None, str),
 | 
						|
    Required("try_options"): Any(None, dict),
 | 
						|
    Required("try_task_config"): {
 | 
						|
        Optional("tasks"): [str],
 | 
						|
        Optional("browsertime"): bool,
 | 
						|
        Optional("chemspill-prio"): bool,
 | 
						|
        Optional("disable-pgo"): bool,
 | 
						|
        Optional("env"): {str: str},
 | 
						|
        Optional("gecko-profile"): bool,
 | 
						|
        Optional("gecko-profile-interval"): float,
 | 
						|
        Optional("gecko-profile-entries"): int,
 | 
						|
        Optional("gecko-profile-features"): str,
 | 
						|
        Optional("gecko-profile-threads"): str,
 | 
						|
        Optional(
 | 
						|
            "new-test-config",
 | 
						|
            description="adjust parameters, chunks, etc. to speed up the process "
 | 
						|
            "of greening up a new test config.",
 | 
						|
        ): bool,
 | 
						|
        Optional(
 | 
						|
            "perftest-options",
 | 
						|
            description="Options passed from `mach perftest` to try.",
 | 
						|
        ): object,
 | 
						|
        Optional(
 | 
						|
            "optimize-strategies",
 | 
						|
            description="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`.",
 | 
						|
        ): str,
 | 
						|
        Optional(
 | 
						|
            "pernosco",
 | 
						|
            description="Record an rr trace on supported tasks using the Pernosco debugging "
 | 
						|
            "service.",
 | 
						|
        ): bool,
 | 
						|
        Optional("rebuild"): int,
 | 
						|
        Optional("tasks-regex"): {
 | 
						|
            "include": Any(None, [str]),
 | 
						|
            "exclude": Any(None, [str]),
 | 
						|
        },
 | 
						|
        Optional("use-artifact-builds"): bool,
 | 
						|
        Optional(
 | 
						|
            "worker-overrides",
 | 
						|
            description="Mapping of worker alias to worker pools to use for those aliases.",
 | 
						|
        ): {str: str},
 | 
						|
        Optional(
 | 
						|
            "worker-types",
 | 
						|
            description="List of worker types that we will use to run tasks on.",
 | 
						|
        ): [str],
 | 
						|
        Optional("routes"): [str],
 | 
						|
    },
 | 
						|
    Required("version"): str,
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
def get_contents(path):
 | 
						|
    with open(path, "r") 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 {
 | 
						|
        "app_version": get_app_version(),
 | 
						|
        "backstop": False,
 | 
						|
        "base_repository": "https://hg.mozilla.org/mozilla-unified",
 | 
						|
        "build_number": 1,
 | 
						|
        "enable_always_target": ["docker-image"],
 | 
						|
        "files_changed": sorted(get_locally_changed_files(repo_root)),
 | 
						|
        "head_repository": "https://hg.mozilla.org/mozilla-central",
 | 
						|
        "hg_branch": "default",
 | 
						|
        "message": "",
 | 
						|
        "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",
 | 
						|
        "required_signoffs": [],
 | 
						|
        "signoff_urls": {},
 | 
						|
        "test_manifest_loader": "default",
 | 
						|
        "try_mode": None,
 | 
						|
        "try_options": None,
 | 
						|
        "try_task_config": {},
 | 
						|
        "version": get_version(),
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
def register_parameters():
 | 
						|
    extend_parameters_schema(gecko_parameters_schema, defaults_fn=get_defaults)
 |