diff --git a/llvm/utils/release/github-upload-release.py b/llvm/utils/release/github-upload-release.py new file mode 100755 --- /dev/null +++ b/llvm/utils/release/github-upload-release.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +# ===-- github-release.py -------------------------------------------------===# +# +# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# 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: +# +# You will need to obtain a personal access token for your github account in +# order to use this script. Instructions for doing this can be found here: +# https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line +# +# Create a new release from an existing tag: +# ./github-release.py --token $github_token --release 8.0.1-rc4 create +# +# Upload files for a release +# ./github-release.py --token $github_token --release 8.0.1-rc4 upload --files llvm-8.0.1rc4.src.tar.xz +# +# You can upload as many files as you want at a time and use wildcards e.g. +# ./github-release.py --token $github_token --release 8.0.1-rc4 upload --files *.src.* +#===------------------------------------------------------------------------===# + + +import argparse +import github + +def create_release(repo, release, tag = None, name = None, message = None): + if not tag: + tag = 'llvmorg-{}'.format(release) + + if not name: + name = 'LLVM {}'.format(release) + + if not message: + message = 'LLVM {} Release'.format(release) + + prerelease = True if "rc" in release else False + + 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)) + for f in files: + print('Uploading {}'.format(f)) + release.upload_asset(f) + print("Done") + + + +parser = argparse.ArgumentParser() +parser.add_argument('command', type=str, choices=['create', 'upload']) + +# All args +parser.add_argument('--token', type=str) +parser.add_argument('--release', type=str) + +# Upload args +parser.add_argument('--files', nargs='+', type=str) + + +args = parser.parse_args() + +github = github.Github(args.token) +llvm_repo = github.get_organization('llvm').get_repo('llvm-project') + +if args.command == 'create': + create_release(llvm_repo, args.release) +if args.command == 'upload': + upload_files(llvm_repo, args.release, args.files)