#!/usr/bin/env python3 """ Scrapes GitHub labels for Fenix and generates a set of glean tags for use in metrics See https://mozilla.github.io/glean/book/reference/yaml/tags.html """ import urllib from pathlib import Path import requests import yaml LICENSE_HEADER = """# 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 # file, You can obtain one at http://mozilla.org/MPL/2.0/. """ GENERATED_HEADER = """ ### This file was AUTOMATICALLY GENERATED by `./tools/update-glean-tags.py` ### DO NOT edit it by hand. # Disable line-length rule because the links in the descriptions can be long # yamllint disable rule:line-length """ TAGS_FILENAME = (Path(__file__).parent / "../app/tags.yaml").resolve() labels = [] page = 1 while True: more_labels = requests.get( f"https://api.github.com/repos/mozilla-mobile/fenix/labels?per_page=100&page={page}" ).json() if not more_labels: break labels += more_labels page += 1 tags = {"$schema": "moz://mozilla.org/schemas/glean/tags/1-0-0"} for label in labels: if label["name"].startswith("Feature:"): abbreviated_label = label["name"].replace("Feature:", "") url = ( "https://github.com/mozilla-mobile/fenix/issues?q=" + urllib.parse.quote_plus(f"label:{label['name']}") ) label_description = ( (label["description"].strip() + ". ") if len(label["description"]) else "" ) tags[abbreviated_label] = { "description": f"{label_description}Corresponds to the [{label['name']}]({url}) label on GitHub." } open(TAGS_FILENAME, "w").write( "{}\n{}\n\n".format(LICENSE_HEADER, GENERATED_HEADER) + yaml.dump(tags, width=78, explicit_start=True) )