Revision control
Copy as Markdown
Other Tools
# 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
"""
Compute the release notes and pushlog links used by the smoke test email.
"""
from typing import Optional
from mozilla_version.gecko import ThunderbirdVersion
from taskgraph.transforms.base import TransformSequence
from taskgraph.util.taskcluster import get_session
transforms = TransformSequence()
strip_transforms = TransformSequence()
def get_thunderbird_versions() -> dict[str, str]:
response = get_session().get(THUNDERBIRD_VERSIONS, timeout=60)
response.raise_for_status()
return response.json()
def get_previous_version(parsed: ThunderbirdVersion) -> Optional[str]:
major = parsed.major_number
latest_releases = get_thunderbird_versions()
if parsed.is_beta:
return latest_releases["LATEST_THUNDERBIRD_DEVEL_VERSION"]
elif parsed.is_esr:
for key in ("THUNDERBIRD_ESR", "THUNDERBIRD_ESR_NEXT"):
if ThunderbirdVersion.parse(latest_releases[key]).major_number == major:
return latest_releases[key]
# The first build of a new ESR has no shipped release on its branch to
# compare against, so the email links to its release tag instead.
return None
else:
return latest_releases["LATEST_THUNDERBIRD_VERSION"]
def release_tag(version, suffix) -> str:
return "THUNDERBIRD_{}_{}".format(version.replace(".", "_"), suffix)
@transforms.add
def add_smoke_test_links(config, jobs):
version = config.params["version"]
build_number = config.params["build_number"]
parsed = ThunderbirdVersion.parse(version)
previous = get_previous_version(parsed)
notes_version = f"{parsed.major_number}.0beta" if parsed.is_beta else version
if previous:
pushlog = "{}/compare/{}...{}".format(
GIT_REPOSITORY,
release_tag(previous, "RELEASE"),
release_tag(version, f"BUILD{build_number}"),
)
else:
pushlog = "{}/releases/tag/{}".format(
GIT_REPOSITORY, release_tag(version, f"BUILD{build_number}")
)
for job in jobs:
job["smoke-test"] = {
"release-notes-url": f"https://stage.thunderbird.net/en-US/thunderbird/{notes_version}/releasenotes/",
"pushlog-url": pushlog,
}
yield job
@strip_transforms.add
def remove_smoke_test_links(config, jobs):
for job in jobs:
job.pop("smoke-test", None)
yield job