From 3b386c5945a1eeaeb3604699dfb5c5591ced6812 Mon Sep 17 00:00:00 2001 From: zhoujing Date: Wed, 26 Jun 2024 09:21:27 +0800 Subject: [PATCH] Update python script --- llvm/utils/release/github-upload-release.py | 77 +++++++++++++++------ 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/llvm/utils/release/github-upload-release.py b/llvm/utils/release/github-upload-release.py index ac0992a87fdb..c743490a4c2b 100755 --- a/llvm/utils/release/github-upload-release.py +++ b/llvm/utils/release/github-upload-release.py @@ -5,10 +5,10 @@ # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # -#===------------------------------------------------------------------------===# +# ===------------------------------------------------------------------------===# # # Create and manage releases in the llvm github project. -# +# # This script requires python3 and the PyGithub module. # # Example Usage: @@ -25,53 +25,88 @@ # # You can upload as many files as you want at a time and use wildcards e.g. # ./github-upload-release.py --token $github_token --release 8.0.1-rc4 upload --files *.src.* -#===------------------------------------------------------------------------===# +# ===------------------------------------------------------------------------===# import argparse import github +import sys +from textwrap import dedent -def create_release(repo, release, tag = None, name = None, message = None): + +def create_release(repo, release, tag=None, name=None, message=None): if not tag: - tag = 'llvmorg-{}'.format(release) + tag = "llvmorg-{}".format(release) if not name: - name = 'LLVM {}'.format(release) + name = "LLVM {}".format(release) if not message: - message = 'LLVM {} Release'.format(release) + message = dedent( + """\ + LLVM {} Release + + # A note on binaries + + Volunteers make binaries for the LLVM project, which will be uploaded + when they have had time to test and build these binaries. They might + not be available directly or not at all for each release. We suggest + you use the binaries from your distribution or build your own if you + rely on a specific platform or configuration.""" + ).format(release) prerelease = True if "rc" in release else False - repo.create_git_release(tag = tag, name = name, message = message, - prerelease = prerelease) + repo.create_git_release(tag=tag, name=name, message=message, prerelease=prerelease) + def upload_files(repo, release, files): - release = repo.get_release('llvmorg-{}'.format(release)) + release = repo.get_release("llvmorg-{}".format(release)) for f in files: - print('Uploading {}'.format(f)) + print("Uploading {}".format(f)) release.upload_asset(f) print("Done") - parser = argparse.ArgumentParser() -parser.add_argument('command', type=str, choices=['create', 'upload']) +parser.add_argument( + "command", type=str, choices=["create", "upload", "check-permissions"] +) # All args -parser.add_argument('--token', type=str) -parser.add_argument('--release', type=str) +parser.add_argument("--token", type=str) +parser.add_argument("--release", type=str) +parser.add_argument("--user", type=str) +parser.add_argument("--user-token", type=str) # Upload args -parser.add_argument('--files', nargs='+', type=str) - +parser.add_argument("--files", nargs="+", type=str) args = parser.parse_args() -github = github.Github(args.token) -llvm_repo = github.get_organization('THU-DSP-LAB').get_repo('llvm-project') +gh = github.Github(args.token) +llvm_org = gh.get_organization("THU-DSP-LAB") +llvm_repo = llvm_org.get_repo("llvm-project") -if args.command == 'create': +if args.user: + if not args.user_token: + print("--user-token option required when --user is used") + sys.exit(1) + # Validate that this user is allowed to modify releases. + user = gh.get_user(args.user) + team = ( + github.Github(args.user_token) + .get_organization("llvm") + .get_team_by_slug("llvm-release-managers") + ) + if not team.has_in_members(user): + print("User {} is not a allowed to modify releases".format(args.user)) + sys.exit(1) +elif args.command == "check-permissions": + print("--user option required for check-permissions") + sys.exit(1) + +if args.command == "create": create_release(llvm_repo, args.release) -if args.command == 'upload': +if args.command == "upload": upload_files(llvm_repo, args.release, args.files)