diff --git a/src/mozilla_taskgraph/worker_types.py b/src/mozilla_taskgraph/worker_types.py index 812f311..fab5b7e 100644 --- a/src/mozilla_taskgraph/worker_types.py +++ b/src/mozilla_taskgraph/worker_types.py @@ -1,4 +1,6 @@ import binascii +import json +import os from base64 import b64decode from typing import Literal, Optional, Union @@ -447,17 +449,33 @@ def get_release_config(config): Args: config (TransformConfig): The configuration for the kind being transformed. + When the `PARTIAL_UPDATES` environment variable is set (as done by the + `release_promotion` action), a `partial_versions` entry describing the + partial updates is also included. + Returns: - dict: containing both `build_number` and `version`. This can be used to - update `task.payload`. + dict: containing at least `build_number` and `version`. This can be + used to update `task.payload`. """ - return { + release_config = { "version": config.params["version"], "appVersion": config.params["app_version"], "next_version": config.params["next_version"], "build_number": config.params["build_number"], } + partial_updates = os.environ.get("PARTIAL_UPDATES", "") + if partial_updates != "": + partial_updates = json.loads(partial_updates) + release_config["partial_versions"] = ", ".join( + [ + "{}build{}".format(v, info["buildNumber"]) + for v, info in partial_updates.items() + ] + ) + + return release_config + def process_l10n_bump_info(info): l10n_bump_info = [] diff --git a/test/test_worker_types.py b/test/test_worker_types.py index 03cec75..f4b330a 100644 --- a/test/test_worker_types.py +++ b/test/test_worker_types.py @@ -1,12 +1,15 @@ import inspect +import json from pprint import pprint from typing import Optional import pytest +from taskgraph.transforms.base import TransformConfig from taskgraph.transforms.task import payload_builders from taskgraph.util.schema import validate_schema import mozilla_taskgraph.worker_types # noqa - trigger payload_builder registration +from mozilla_taskgraph.worker_types import get_release_config @pytest.fixture @@ -1478,3 +1481,41 @@ def test_beetmover_upload_data_bad_encoding(build_payload): assert False, "should've raised an exception" except Exception as e: assert "data must be base64 encoded" in e.args[0] + + +@pytest.fixture +def make_release_config(monkeypatch, make_graph_config, parameters): + def inner(kind, partial_updates=None): + if partial_updates is None: + monkeypatch.delenv("PARTIAL_UPDATES", raising=False) + else: + monkeypatch.setenv("PARTIAL_UPDATES", partial_updates) + + graph_config = make_graph_config() + + config = TransformConfig( + kind, "test", {}, parameters, {}, graph_config, write_artifacts=False + ) + return get_release_config(config) + + return inner + + +def test_get_release_config_base(make_release_config): + assert make_release_config("release-beetmover") == { + "version": "99.0", + "appVersion": "99.0", + "next_version": "100.0", + "build_number": 1, + } + + +def test_get_release_config_partials(make_release_config): + partial_updates = json.dumps( + {"70.0": {"buildNumber": 1}, "69.0": {"buildNumber": 3}} + ) + release_config = make_release_config( + "release-update-verify-config", + partial_updates=partial_updates, + ) + assert release_config["partial_versions"] == "70.0build1, 69.0build3"