| #!/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) |