github-upload-release.py 2.49 KB
#!/usr/bin/env python3
# ===-- github-upload-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-upload-release.py --token $github_token --release 8.0.1-rc4 create
#
# Upload files for a release
# ./github-upload-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-upload-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)