in pylib/mozautomation/mozautomation/releasescraper.py [0:0]
def find_builds_from_tags():
session = get_session()
with futures.ThreadPoolExecutor(requests.adapters.DEFAULT_POOLSIZE) as e:
archive_fs = []
seen_tags = set()
# Need to process in order because we only process each tag once.
for repo, channel in TAGS_REPOS:
url = b"https://hg.mozilla.org/%s/json-tags" % repo
r = session.get(url)
if r.status_code != 200:
raise Exception("unexpected non-200 from %s" % url)
for entry in r.json()[b"tags"]:
m = RE_TAG.match(entry[b"tag"])
if not m:
continue
if entry[b"tag"] in seen_tags:
continue
seen_tags.add(entry[b"tag"])
version = m.group("version")
if b"a" in version:
sep = b"a"
major, sub = version.split(b"a")
elif b"b" in version:
sep = b"b"
major, sub = version.split(b"b")
else:
major = version
sub = None
major = major.replace(b"_", b".")
app_version = major
if sub:
app_version += b"%s%s" % (sep, sub)
# Some releases are tagged but were never released. Skip them.
if app_version in MISSING_RELEASES:
continue
# There are no build ids for release builds. Construct a
# dummy one from the tag date.
td = datetime.timedelta(seconds=entry[b"date"][0])
dt = datetime.datetime(1970, 1, 1) + td
day = dt.date()
build_id = dt.strftime("%Y%m%d%H%M%S").encode("utf-8")
for platform, archive_platform in RELEASES_PLATFORMS.items():
# win64 not produced until release 42.
if platform == b"win64":
v = distutils.version.StrictVersion
ours = v(major) if b"." in major else v(b"%s.0" % major)
if ours < v(b"42.0"):
continue
archive_url = b"%s/%s/%s/" % (
RELEASES_ARCHIVE_URL,
app_version,
archive_platform,
)
build = {
b"revision": entry[b"node"],
b"tag": entry[b"tag"],
b"channel": channel,
b"app_version": app_version,
b"platform": platform,
b"artifacts_url": archive_url,
b"build_id": build_id,
b"day": day,
}
archive_fs.append((build, e.submit(session.get, archive_url)))
for build, f in archive_fs:
r = f.result()
if r.status_code != 200:
# We shouldn't hit this.
print(
b"could not find release %s %s from tag %s"
% (build[b"app_version"], build[b"platform"], build[b"tag"])
)
continue
yield build