commit f4356205c44be7a4716666bd1cdcce86d3d48641 parent 5ea358cb54e6ab2f13ac2bbe8f9762e801dbdb7b Author: Atila Butkovits <abutkovits@mozilla.com> Date: Thu, 18 Dec 2025 23:48:37 +0200 Revert "Bug 2006158 - Factor in Git branch ref when determining release_level, r=releng-reviewers,taskgraph-reviewers,jcristau" for causing failures complaining about TypeError. This reverts commit 17c5069730feada06abfc1398c7634971373138d. Revert "Bug 2006158 - Pass full set of params into gecko_taskgraph.util.attributes.release_level, r=releng-reviewers,taskgraph-reviewers,jcristau" This reverts commit 92624c897d507a97612af6694de373cd957cf1e3. Revert "Bug 2006158 - Use 'release_level' utility function when resolving "release" run-on-projects alias, r=releng-reviewers,taskgraph-reviewers,jcristau" This reverts commit 565bb775ad8ca1b26a3fa8161e877b7f2c7de500. Diffstat:
27 files changed, 99 insertions(+), 160 deletions(-)
diff --git a/taskcluster/gecko_taskgraph/actions/release_promotion.py b/taskcluster/gecko_taskgraph/actions/release_promotion.py @@ -282,7 +282,7 @@ def release_promotion_action(parameters, graph_config, input, task_group_id, tas if promotion_config.get("partial-updates", False): partial_updates = input.get("partial_updates", {}) - if not partial_updates and release_level(parameters) == "production": + if not partial_updates and release_level(parameters["project"]) == "production": raise Exception( f"`partial_updates` property needs to be provided for `{release_promotion_flavor}`" "target." diff --git a/taskcluster/gecko_taskgraph/target_tasks.py b/taskcluster/gecko_taskgraph/target_tasks.py @@ -115,7 +115,7 @@ def filter_for_repo_type(task, parameters): def filter_for_project(task, parameters): """Filter tasks by project. Optionally enable nightlies.""" run_on_projects = set(task.attributes.get("run_on_projects", [])) - return match_run_on_projects(parameters, run_on_projects) + return match_run_on_projects(parameters["project"], run_on_projects) def filter_for_hg_branch(task, parameters): diff --git a/taskcluster/gecko_taskgraph/test/test_util_attributes.py b/taskcluster/gecko_taskgraph/test/test_util_attributes.py @@ -11,79 +11,54 @@ from mozunit import main from gecko_taskgraph.util.attributes import ( match_run_on_projects, match_run_on_repo_type, - release_level, ) class MatchRunOnProjects(unittest.TestCase): def test_empty(self): - self.assertFalse(match_run_on_projects({"project": "birch"}, [])) + self.assertFalse(match_run_on_projects("birch", [])) def test_all(self): - self.assertTrue(match_run_on_projects({"project": "birch"}, ["all"])) - self.assertTrue(match_run_on_projects({"project": "larch"}, ["all"])) - self.assertTrue(match_run_on_projects({"project": "autoland"}, ["all"])) - self.assertTrue(match_run_on_projects({"project": "mozilla-central"}, ["all"])) - self.assertTrue(match_run_on_projects({"project": "mozilla-beta"}, ["all"])) - self.assertTrue(match_run_on_projects({"project": "mozilla-release"}, ["all"])) + self.assertTrue(match_run_on_projects("birch", ["all"])) + self.assertTrue(match_run_on_projects("larch", ["all"])) + self.assertTrue(match_run_on_projects("autoland", ["all"])) + self.assertTrue(match_run_on_projects("mozilla-central", ["all"])) + self.assertTrue(match_run_on_projects("mozilla-beta", ["all"])) + self.assertTrue(match_run_on_projects("mozilla-release", ["all"])) def test_release(self): - self.assertFalse(match_run_on_projects({"project": "birch"}, ["release"])) - self.assertTrue(match_run_on_projects({"project": "larch"}, ["release"])) - self.assertFalse(match_run_on_projects({"project": "autoland"}, ["release"])) - self.assertTrue( - match_run_on_projects({"project": "mozilla-central"}, ["release"]) - ) - self.assertTrue(match_run_on_projects({"project": "mozilla-beta"}, ["release"])) - self.assertTrue( - match_run_on_projects({"project": "mozilla-release"}, ["release"]) - ) + self.assertFalse(match_run_on_projects("birch", ["release"])) + self.assertTrue(match_run_on_projects("larch", ["release"])) + self.assertFalse(match_run_on_projects("autoland", ["release"])) + self.assertTrue(match_run_on_projects("mozilla-central", ["release"])) + self.assertTrue(match_run_on_projects("mozilla-beta", ["release"])) + self.assertTrue(match_run_on_projects("mozilla-release", ["release"])) def test_integration(self): - self.assertFalse(match_run_on_projects({"project": "birch"}, ["integration"])) - self.assertFalse(match_run_on_projects({"project": "larch"}, ["integration"])) - self.assertTrue(match_run_on_projects({"project": "autoland"}, ["integration"])) - self.assertFalse( - match_run_on_projects({"project": "mozilla-central"}, ["integration"]) - ) - self.assertFalse( - match_run_on_projects({"project": "mozilla-beta"}, ["integration"]) - ) - self.assertFalse( - match_run_on_projects({"project": "mozilla-integration"}, ["integration"]) - ) + self.assertFalse(match_run_on_projects("birch", ["integration"])) + self.assertFalse(match_run_on_projects("larch", ["integration"])) + self.assertTrue(match_run_on_projects("autoland", ["integration"])) + self.assertFalse(match_run_on_projects("mozilla-central", ["integration"])) + self.assertFalse(match_run_on_projects("mozilla-beta", ["integration"])) + self.assertFalse(match_run_on_projects("mozilla-integration", ["integration"])) def test_combo(self): - self.assertTrue( - match_run_on_projects({"project": "birch"}, ["release", "birch", "maple"]) - ) - self.assertTrue( - match_run_on_projects({"project": "larch"}, ["release", "birch", "maple"]) - ) - self.assertTrue( - match_run_on_projects({"project": "maple"}, ["release", "birch", "maple"]) - ) + self.assertTrue(match_run_on_projects("birch", ["release", "birch", "maple"])) + self.assertTrue(match_run_on_projects("larch", ["release", "birch", "maple"])) + self.assertTrue(match_run_on_projects("maple", ["release", "birch", "maple"])) self.assertFalse( - match_run_on_projects( - {"project": "autoland"}, ["release", "birch", "maple"] - ) + match_run_on_projects("autoland", ["release", "birch", "maple"]) ) self.assertTrue( - match_run_on_projects( - {"project": "mozilla-central"}, ["release", "birch", "maple"] - ) + match_run_on_projects("mozilla-central", ["release", "birch", "maple"]) ) self.assertTrue( - match_run_on_projects( - {"project": "mozilla-beta"}, ["release", "birch", "maple"] - ) + match_run_on_projects("mozilla-beta", ["release", "birch", "maple"]) ) self.assertTrue( - match_run_on_projects( - {"project": "mozilla-release"}, ["release", "birch", "maple"] - ) + match_run_on_projects("mozilla-release", ["release", "birch", "maple"]) ) - self.assertTrue(match_run_on_projects({"project": "birch"}, ["birch", "trunk"])) + self.assertTrue(match_run_on_projects("birch", ["birch", "trunk"])) @pytest.mark.parametrize( @@ -100,19 +75,5 @@ def test_match_run_on_repo_type(repo_type, run_on_repo_types, expected): assert match_run_on_repo_type(repo_type, run_on_repo_types) == expected -@pytest.mark.parametrize( - "params,expected", - ( - ({"project": "autoland"}, "staging"), - ({"project": "mozilla-central"}, "production"), - ({"project": "firefox", "head_ref": "refs/heads/test"}, "staging"), - ({"project": "firefox", "head_ref": "refs/tags/beta"}, "staging"), - ({"project": "firefox", "head_ref": "refs/heads/beta"}, "production"), - ), -) -def test_release_level(params, expected): - assert release_level(params) == expected - - if __name__ == "__main__": main() diff --git a/taskcluster/gecko_taskgraph/transforms/beetmover_geckoview.py b/taskcluster/gecko_taskgraph/transforms/beetmover_geckoview.py @@ -77,7 +77,7 @@ def resolve_keys(config, jobs): job, "bucket-scope", item_name=job["label"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) yield job diff --git a/taskcluster/gecko_taskgraph/transforms/bouncer_aliases.py b/taskcluster/gecko_taskgraph/transforms/bouncer_aliases.py @@ -31,13 +31,13 @@ def make_task_worker(config, jobs): job, "worker-type", item_name=job["name"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) resolve_keyed_by( job, "scopes", item_name=job["name"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) resolve_keyed_by( job, diff --git a/taskcluster/gecko_taskgraph/transforms/bouncer_check.py b/taskcluster/gecko_taskgraph/transforms/bouncer_check.py @@ -71,7 +71,7 @@ def handle_keyed_by(config, jobs): item_name=job["name"], **{ "project": config.params["project"], - "release-level": release_level(config.params), + "release-level": release_level(config.params["project"]), "release-type": config.params["release_type"], }, ) diff --git a/taskcluster/gecko_taskgraph/transforms/bouncer_submission.py b/taskcluster/gecko_taskgraph/transforms/bouncer_submission.py @@ -132,13 +132,13 @@ def make_task_worker(config, jobs): job, "worker-type", item_name=job["name"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) resolve_keyed_by( job, "scopes", item_name=job["name"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) resolve_keyed_by( job, diff --git a/taskcluster/gecko_taskgraph/transforms/bouncer_submission_partners.py b/taskcluster/gecko_taskgraph/transforms/bouncer_submission_partners.py @@ -71,13 +71,13 @@ def make_task_worker(config, jobs): job, "worker-type", item_name=job["name"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) resolve_keyed_by( job, "scopes", item_name=job["name"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) resolve_keyed_by( job, diff --git a/taskcluster/gecko_taskgraph/transforms/build.py b/taskcluster/gecko_taskgraph/transforms/build.py @@ -194,7 +194,7 @@ def resolve_keys(config, jobs): job, "use-sccache", item_name=job["name"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) yield job @@ -241,7 +241,7 @@ def add_signing_artifacts(config, jobs): """ Add signing artifacts to macOS build jobs. """ - is_prod_project = release_level(config.params) == "production" + is_prod_project = release_level(config.params["project"]) == "production" for job in jobs: if "macosx" not in job["name"] or "searchfox" in job["name"]: # Not macosx build or no artifacts defined, so skip diff --git a/taskcluster/gecko_taskgraph/transforms/hardened_signing.py b/taskcluster/gecko_taskgraph/transforms/hardened_signing.py @@ -34,7 +34,7 @@ def add_hardened_sign_config(config, jobs): dep_job = get_primary_dependency(config, job) assert dep_job - project_level = release_level(config.params) + project_level = release_level(config.params["project"]) is_shippable = dep_job.attributes.get("shippable", False) hardened_signing_type = "developer" @@ -79,7 +79,7 @@ def add_provisioning_profile_config(config, jobs): # Ensure macosx platform and "macosx" in job["attributes"]["build_platform"] # Ensure project is considered production - and release_level(config.params) == "production" + and release_level(config.params["project"]) == "production" # Ensure build is shippable and dep_job.attributes.get("shippable", False) ): diff --git a/taskcluster/gecko_taskgraph/transforms/maybe_release.py b/taskcluster/gecko_taskgraph/transforms/maybe_release.py @@ -18,6 +18,6 @@ def make_task_description(config, jobs): job, key, item_name=job["name"], - **{"release-level": release_level(config.params)} + **{"release-level": release_level(config.params["project"])} ) yield job diff --git a/taskcluster/gecko_taskgraph/transforms/partials.py b/taskcluster/gecko_taskgraph/transforms/partials.py @@ -150,7 +150,7 @@ def make_task_description(config, jobs): "MAR_CHANNEL_ID": attributes["mar-channel-id"], }, } - if release_level(config.params) == "staging": + if release_level(config.params["project"]) == "staging": worker["env"]["FUNSIZE_ALLOW_STAGING_PREFIXES"] = "true" task = { diff --git a/taskcluster/gecko_taskgraph/transforms/partner_repack.py b/taskcluster/gecko_taskgraph/transforms/partner_repack.py @@ -72,7 +72,7 @@ def populate_repack_manifests_url(config, tasks): task, property, property, - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) if task["worker"]["env"]["REPACK_MANIFESTS_URL"].startswith("git@"): diff --git a/taskcluster/gecko_taskgraph/transforms/release_beetmover_signed_addons.py b/taskcluster/gecko_taskgraph/transforms/release_beetmover_signed_addons.py @@ -76,7 +76,7 @@ def resolve_keys(config, jobs): field, item_name=job["label"], **{ - "release-level": release_level(config.params), + "release-level": release_level(config.params["project"]), "release-type": config.params["release_type"], "project": config.params["project"], }, diff --git a/taskcluster/gecko_taskgraph/transforms/release_flatpak_push.py b/taskcluster/gecko_taskgraph/transforms/release_flatpak_push.py @@ -57,9 +57,9 @@ def make_task_description(config, jobs): job, "worker-type", item_name=job["name"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) - if release_level(config.params) == "production": + if release_level(config.params["project"]) == "production": job.setdefault("scopes", []).append( add_scope_prefix( config, diff --git a/taskcluster/gecko_taskgraph/transforms/release_generate_checksums.py b/taskcluster/gecko_taskgraph/transforms/release_generate_checksums.py @@ -33,7 +33,7 @@ def handle_keyed_by(config, jobs): item=job, field=field, item_name=job["name"], - **{"release-level": release_level(config.params)} + **{"release-level": release_level(config.params["project"])} ) yield job diff --git a/taskcluster/gecko_taskgraph/transforms/release_mark_as_shipped.py b/taskcluster/gecko_taskgraph/transforms/release_mark_as_shipped.py @@ -19,13 +19,13 @@ def make_task_description(config, jobs): job, "worker-type", item_name=job["name"], - **{"release-level": release_level(config.params)} + **{"release-level": release_level(config.params["project"])} ) resolve_keyed_by( job, "scopes", item_name=job["name"], - **{"release-level": release_level(config.params)} + **{"release-level": release_level(config.params["project"])} ) job["worker"]["release-name"] = ( diff --git a/taskcluster/gecko_taskgraph/transforms/release_msix_push.py b/taskcluster/gecko_taskgraph/transforms/release_msix_push.py @@ -59,9 +59,9 @@ def make_task_description(config, jobs): job, "worker-type", item_name=job["name"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) - if release_level(config.params) == "production": + if release_level(config.params["project"]) == "production": job.setdefault("scopes", []).append( add_scope_prefix( config, diff --git a/taskcluster/gecko_taskgraph/transforms/release_sign_and_push_langpacks.py b/taskcluster/gecko_taskgraph/transforms/release_sign_and_push_langpacks.py @@ -68,13 +68,13 @@ def resolve_keys(config, jobs): job, "worker-type", item_name=job["label"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) resolve_keyed_by( job, "scopes", item_name=job["label"], - **{"release-level": release_level(config.params)}, + **{"release-level": release_level(config.params["project"])}, ) resolve_keyed_by( job, diff --git a/taskcluster/gecko_taskgraph/transforms/release_snap_repackage.py b/taskcluster/gecko_taskgraph/transforms/release_snap_repackage.py @@ -29,7 +29,10 @@ def format(config, tasks): env = task.get("worker", {}).get("env", {}) for k in env.keys(): resolve_keyed_by( - env, k, "snap envs", **{"release-level": release_level(config.params)} + env, + k, + "snap envs", + **{"release-level": release_level(config.params["project"])} ) task["worker"]["env"][k] = env[k].format(**format_params) diff --git a/taskcluster/gecko_taskgraph/transforms/release_update_product_channel_version.py b/taskcluster/gecko_taskgraph/transforms/release_update_product_channel_version.py @@ -22,7 +22,7 @@ def make_task_worker(config, jobs): job, "scopes", item_name=job["name"], - **{"release-level": release_level(config.params)} + **{"release-level": release_level(config.params["project"])} ) job["worker"]["product"] = job["shipping-product"] job["worker"]["version"] = config.params["version"] diff --git a/taskcluster/gecko_taskgraph/transforms/repackage_set_upstream_mac_kind.py b/taskcluster/gecko_taskgraph/transforms/repackage_set_upstream_mac_kind.py @@ -35,7 +35,7 @@ def repackage_set_upstream_mac_kind(config, tasks): item_name=config.kind, **{ "build-platform": primary_dep.attributes["build_platform"], - "release-level": release_level(config.params), + "release-level": release_level(config.params["project"]), } ) upstream_mac_kind = task.pop("upstream-mac-kind") diff --git a/taskcluster/gecko_taskgraph/transforms/task.py b/taskcluster/gecko_taskgraph/transforms/task.py @@ -1139,7 +1139,7 @@ def build_balrog_payload(config, task, task_def): task["description"], **{ "release-type": config.params["release_type"], - "release-level": release_level(config.params), + "release-level": release_level(config.params["project"]), "beta-number": beta_number, }, ) diff --git a/taskcluster/gecko_taskgraph/transforms/update_verify_config.py b/taskcluster/gecko_taskgraph/transforms/update_verify_config.py @@ -129,7 +129,7 @@ def add_command(config, tasks): platform=task["attributes"]["build_platform"], **{ "release-type": config.params["release_type"], - "release-level": release_level(config.params), + "release-level": release_level(config.params["project"]), }, ) # ignore things that resolved to null diff --git a/taskcluster/gecko_taskgraph/util/attributes.py b/taskcluster/gecko_taskgraph/util/attributes.py @@ -4,7 +4,6 @@ import re -from typing import Literal, Union from taskgraph.util.attributes import _match_run_on @@ -14,42 +13,31 @@ INTEGRATION_PROJECTS = { TRUNK_PROJECTS = INTEGRATION_PROJECTS | {"mozilla-central", "comm-central"} -# Mapping of project to list of branches that should be considered "release" -# level. A value of `True` means all branches are considered release -# (used by hg.mozilla.org based projects). -PROJECT_RELEASE_BRANCHES: dict[str, Union[list[str], Literal[True]]] = { - # https://github.com/mozilla-firefox/firefox - "firefox": [ - "main", - "beta", - "release", - "esr115", - "esr128", - "esr140", - ], - "mozilla-central": True, - "mozilla-beta": True, - "mozilla-release": True, - "mozilla-esr115": True, - "mozilla-esr128": True, - "mozilla-esr140": True, - "comm-central": True, - "comm-beta": True, - "comm-release": True, - "comm-esr115": True, - "comm-esr128": True, - "comm-esr140": True, +RELEASE_PROJECTS = { + "firefox", # https://github.com/mozilla-firefox/firefox + "mozilla-central", + "mozilla-beta", + "mozilla-release", + "mozilla-esr115", + "mozilla-esr128", + "mozilla-esr140", + "comm-central", + "comm-beta", + "comm-release", + "comm-esr115", + "comm-esr128", + "comm-esr140", # bug 1845368: pine is a permanent project branch used for testing # nightly updates - "pine": True, + "pine", # bug 1877483: larch has similar needs for nightlies - "larch": True, + "larch", # maple is also an L3 branch: https://phabricator.services.mozilla.com/D184833 - "maple": True, + "maple", # bug 1988213: cypress project branch - "cypress": True, + "cypress", } -RELEASE_PROJECTS = set(PROJECT_RELEASE_BRANCHES) + RELEASE_PROMOTION_PROJECTS = { "jamun", "maple", @@ -74,22 +62,17 @@ ALL_PROJECTS = RELEASE_PROMOTION_PROJECTS | TRUNK_PROJECTS | TEMPORARY_PROJECTS RUN_ON_PROJECT_ALIASES = { # key is alias, value is lambda to test it against - "all": lambda params: True, - "integration": lambda params: ( - params["project"] in INTEGRATION_PROJECTS or params["project"] == "toolchains" - ), - "release": lambda params: ( - release_level(params) == "production" or params["project"] == "toolchains" + "all": lambda project: True, + "integration": lambda project: ( + project in INTEGRATION_PROJECTS or project == "toolchains" ), - "trunk": lambda params: ( - params["project"] in TRUNK_PROJECTS or params["project"] == "toolchains" - ), - "trunk-only": lambda params: params["project"] in TRUNK_PROJECTS, - "autoland": lambda params: params["project"] in ("autoland", "toolchains"), - "autoland-only": lambda params: params["project"] == "autoland", - "mozilla-central": lambda params: params["project"] - in ("mozilla-central", "toolchains"), - "mozilla-central-only": lambda params: params["project"] == "mozilla-central", + "release": lambda project: (project in RELEASE_PROJECTS or project == "toolchains"), + "trunk": lambda project: (project in TRUNK_PROJECTS or project == "toolchains"), + "trunk-only": lambda project: project in TRUNK_PROJECTS, + "autoland": lambda project: project in ("autoland", "toolchains"), + "autoland-only": lambda project: project == "autoland", + "mozilla-central": lambda project: project in ("mozilla-central", "toolchains"), + "mozilla-central-only": lambda project: project == "mozilla-central", } _COPYABLE_ATTRIBUTES = ( @@ -113,17 +96,17 @@ _COPYABLE_ATTRIBUTES = ( ) -def match_run_on_projects(params, run_on_projects): +def match_run_on_projects(project, run_on_projects): """Determine whether the given project is included in the `run-on-projects` parameter, applying expansions for things like "integration" mentioned in the attribute documentation.""" aliases = RUN_ON_PROJECT_ALIASES.keys() run_aliases = set(aliases) & set(run_on_projects) if run_aliases: - if any(RUN_ON_PROJECT_ALIASES[alias](params) for alias in run_aliases): + if any(RUN_ON_PROJECT_ALIASES[alias](project) for alias in run_aliases): return True - return params["project"] in run_on_projects + return project in run_on_projects def match_run_on_hg_branches(hg_branch, run_on_hg_branches): @@ -156,21 +139,13 @@ def sorted_unique_list(*args): return sorted(combined) -def release_level(params): +def release_level(project): """ Whether this is a staging release or not. :return str: One of "production" or "staging". """ - if branches := PROJECT_RELEASE_BRANCHES.get(params.get("project")): - if branches is True: - return "production" - - m = re.match(r"refs/heads/(\S+)$", params["head_ref"]) - if m.group(1) in branches: - return "production" - - return "staging" + return "production" if project in RELEASE_PROJECTS else "staging" def is_try(params): diff --git a/taskcluster/gecko_taskgraph/util/partners.py b/taskcluster/gecko_taskgraph/util/partners.py @@ -465,7 +465,7 @@ def get_partner_url_config(parameters, graph_config): partner_url_config = deepcopy(graph_config["partner-urls"]) substitutions = { "release-product": parameters["release_product"], - "release-level": release_level(parameters), + "release-level": release_level(parameters["project"]), "release-type": parameters["release_type"], } resolve_keyed_by( @@ -545,7 +545,7 @@ def apply_partner_priority(config, jobs): config.kind.startswith( ("release-partner-repack", "release-partner-attribution") ) - and release_level(config.params) == "production" + and release_level(config.params["project"]) == "production" ): priority = "medium" for job in jobs: diff --git a/taskcluster/gecko_taskgraph/util/workertypes.py b/taskcluster/gecko_taskgraph/util/workertypes.py @@ -97,7 +97,7 @@ def get_worker_type(graph_config, parameters, worker_type): graph_config, worker_type, parameters["level"], - _release_level(parameters), + _release_level(parameters.get("project")), parameters.get("project"), ) return worker_config["provisioner"], worker_config["worker-type"]