tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

release_flatpak_push.py (2978B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 """
      5 Transform the release-flatpak-push kind into an actual task description.
      6 """
      7 
      8 from taskgraph.transforms.base import TransformSequence
      9 from taskgraph.util.schema import Schema, optionally_keyed_by, resolve_keyed_by
     10 from voluptuous import Optional, Required
     11 
     12 from gecko_taskgraph.transforms.task import task_description_schema
     13 from gecko_taskgraph.util.attributes import release_level
     14 from gecko_taskgraph.util.scriptworker import add_scope_prefix
     15 
     16 push_flatpak_description_schema = Schema({
     17    Required("name"): str,
     18    Required("task-from"): task_description_schema["task-from"],
     19    Required("dependencies"): task_description_schema["dependencies"],
     20    Required("description"): task_description_schema["description"],
     21    Required("treeherder"): task_description_schema["treeherder"],
     22    Required("run-on-projects"): task_description_schema["run-on-projects"],
     23    Required("worker-type"): optionally_keyed_by("release-level", str),
     24    Required("worker"): object,
     25    Optional("scopes"): [str],
     26    Required("shipping-phase"): task_description_schema["shipping-phase"],
     27    Required("shipping-product"): task_description_schema["shipping-product"],
     28    Required("flathub-scope"): str,
     29    Optional("extra"): task_description_schema["extra"],
     30    Optional("attributes"): task_description_schema["attributes"],
     31    Optional("run-on-repo-type"): task_description_schema["run-on-repo-type"],
     32 })
     33 
     34 transforms = TransformSequence()
     35 transforms.add_validate(push_flatpak_description_schema)
     36 
     37 
     38 @transforms.add
     39 def make_task_description(config, jobs):
     40    for job in jobs:
     41        if len(job["dependencies"]) != 1:
     42            raise Exception("Exactly 1 dependency is required")
     43 
     44        job["worker"]["upstream-artifacts"] = generate_upstream_artifacts(
     45            job["dependencies"]
     46        )
     47 
     48        resolve_keyed_by(
     49            job,
     50            "worker.channel",
     51            item_name=job["name"],
     52            **{"release-type": config.params["release_type"]},
     53        )
     54        resolve_keyed_by(
     55            job,
     56            "worker-type",
     57            item_name=job["name"],
     58            **{"release-level": release_level(config.params)},
     59        )
     60        if release_level(config.params) == "production":
     61            job.setdefault("scopes", []).append(
     62                add_scope_prefix(
     63                    config,
     64                    "{}:{}".format(job["flathub-scope"], job["worker"]["channel"]),
     65                )
     66            )
     67        del job["flathub-scope"]
     68 
     69        yield job
     70 
     71 
     72 def generate_upstream_artifacts(dependencies):
     73    return [
     74        {
     75            "taskId": {"task-reference": f"<{task_kind}>"},
     76            "taskType": "build",
     77            "paths": ["public/build/target.flatpak.tar.xz"],
     78        }
     79        for task_kind in dependencies.keys()
     80    ]