brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 0cff6c6 Raw
105 lines · python
1import github2import re3import sys4 5_SPECIAL_CASE_BINARIES = {6    "keith": {"clang+llvm-18.1.8-arm64-apple-macos11.tar.xz"},7}8 9 10def _is_valid(uploader_name, valid_uploaders, asset_name):11    if uploader_name in valid_uploaders:12        return True13 14    if uploader_name in _SPECIAL_CASE_BINARIES:15        return asset_name in _SPECIAL_CASE_BINARIES[uploader_name]16 17    return False18 19 20def _get_uploaders(release_version):21    # Until llvm 18, assets were uploaded by community members, the release managers22    # and the GitHub Actions bot.23    if release_version <= 18:24        return set(25            [26                "DimitryAndric",27                "stefanp-synopsys",28                "lei137",29                "omjavaid",30                "nicolerabjohn",31                "amy-kwan",32                "mandlebug",33                "zmodem",34                "androm3da",35                "tru",36                "rovka",37                "rorth",38                "quinnlp",39                "kamaub",40                "abrisco",41                "jakeegan",42                "maryammo",43                "tstellar",44                "github-actions[bot]",45            ]46        )47    # llvm 19 and beyond, only the release managers, bot and a much smaller48    # number of community members.49    elif release_version >= 19:50        return set(51            [52                "zmodem",53                "omjavaid",54                "tru",55                "tstellar",56                "github-actions[bot]",57                "c-rhodes",58                "dyung",59            ]60        )61 62 63def _get_major_release_version(release_title):64    # All release titles are of the form "LLVM X.Y.Z(-rcN)".65    match = re.match("LLVM ([0-9]+)\.", release_title)66    if match is None:67        _write_comment_and_exit_with_error(68            f'Could not parse release version from release title "{release_title}".'69        )70    else:71        return int(match.groups()[0])72 73 74def _write_comment_and_exit_with_error(comment):75    with open("comment", "w") as file:76        file.write(comment)77    sys.exit(1)78 79 80def main():81    token = sys.argv[1]82 83    gh = github.Github(login_or_token=token)84    repo = gh.get_repo("llvm/llvm-project")85 86    for release in repo.get_releases():87        print("Release:", release.title)88        uploaders = _get_uploaders(_get_major_release_version(release.title))89        for asset in release.get_assets():90            created_at = asset.created_at91            updated_at = (92                "" if asset.created_at == asset.updated_at else asset.updated_at93            )94            print(95                f"{asset.name} : {asset.uploader.login} [{created_at} {updated_at}] ( {asset.download_count} )"96            )97            if not _is_valid(asset.uploader.login, uploaders, asset.name):98                _write_comment_and_exit_with_error(99                    f"@{asset.uploader.login} is not a valid uploader."100                )101 102 103if __name__ == "__main__":104    main()105