1#!/usr/bin/env python3 2# ===-- github-upload-release.py ------------------------------------------===# 3# 4# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5# See https://llvm.org/LICENSE.txt for license information. 6# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7# 8#===------------------------------------------------------------------------===# 9# 10# Create and manage releases in the llvm github project. 11# 12# This script requires python3 and the PyGithub module. 13# 14# Example Usage: 15# 16# You will need to obtain a personal access token for your github account in 17# order to use this script. Instructions for doing this can be found here: 18# https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line 19# 20# Create a new release from an existing tag: 21# ./github-upload-release.py --token $github_token --release 8.0.1-rc4 create 22# 23# Upload files for a release 24# ./github-upload-release.py --token $github_token --release 8.0.1-rc4 upload --files llvm-8.0.1rc4.src.tar.xz 25# 26# You can upload as many files as you want at a time and use wildcards e.g. 27# ./github-upload-release.py --token $github_token --release 8.0.1-rc4 upload --files *.src.* 28#===------------------------------------------------------------------------===# 29 30 31import argparse 32import github 33 34def create_release(repo, release, tag = None, name = None, message = None): 35 if not tag: 36 tag = 'llvmorg-{}'.format(release) 37 38 if not name: 39 name = 'LLVM {}'.format(release) 40 41 if not message: 42 message = 'LLVM {} Release'.format(release) 43 44 prerelease = True if "rc" in release else False 45 46 repo.create_git_release(tag = tag, name = name, message = message, 47 prerelease = prerelease) 48 49def upload_files(repo, release, files): 50 release = repo.get_release('llvmorg-{}'.format(release)) 51 for f in files: 52 print('Uploading {}'.format(f)) 53 release.upload_asset(f) 54 print("Done") 55 56 57 58parser = argparse.ArgumentParser() 59parser.add_argument('command', type=str, choices=['create', 'upload']) 60 61# All args 62parser.add_argument('--token', type=str) 63parser.add_argument('--release', type=str) 64 65# Upload args 66parser.add_argument('--files', nargs='+', type=str) 67 68 69args = parser.parse_args() 70 71github = github.Github(args.token) 72llvm_repo = github.get_organization('llvm').get_repo('llvm-project') 73 74if args.command == 'create': 75 create_release(llvm_repo, args.release) 76if args.command == 'upload': 77 upload_files(llvm_repo, args.release, args.files) 78