| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/usr/bin/env python3
- from github import Github, GithubException
- import argparse
- import os
- GH_TOKEN_ENV_VAR_NAME = "GH_TOKEN"
- GH_REPO_SLUG = os.environ["CI_REPO_SLUG"]
- class UploadReleaseAssetError(Exception):
- pass
- def upload_asset_to_github_release(
- asset_path: str, release_tag: str, github_token: str, asset_name: str = None
- ):
- """
- Upload an asset to a release
- :param asset_path: the file path
- :param release_tag: the release tag as identified on Github
- :param github_token: a token to allow editing the release
- :param asset_name: an optional name to give to the asset
- """
- repo = Github(github_token).get_repo(GH_REPO_SLUG)
- try:
- print("Getting release on {}".format(GH_REPO_SLUG))
- gh_release = repo.get_release(id=release_tag)
- print(gh_release, gh_release.tag_name, gh_release.upload_url)
- except GithubException as e:
- raise UploadReleaseAssetError("Release {} not found".format(release_tag))
- try:
- assert os.path.exists(asset_path)
- if asset_name:
- print("Uploading asset: {} as {}".format(asset_path, asset_name))
- gh_release.upload_asset(path=asset_path, label=asset_name, name=asset_name)
- else:
- print("Uploading asset: {}".format(asset_path))
- gh_release.upload_asset(asset_path)
- print("OK")
- except GithubException as e:
- print(e)
- raise UploadReleaseAssetError(
- "Could not upload asset for release {}.".format(release_tag)
- )
- def main():
- parser = argparse.ArgumentParser()
- parser.add_argument("release_asset", help="The file to be uploaded")
- parser.add_argument("release_tag", help="The version tag")
- parser.add_argument(
- "--github-token",
- default=os.environ.get(GH_TOKEN_ENV_VAR_NAME),
- help="The Github API token. If not specified, it will"
- " be taken from ${}.".format(GH_TOKEN_ENV_VAR_NAME),
- )
- parser.add_argument(
- "--asset-name", default=None, help="An optional name for the release asset"
- )
- args = parser.parse_args()
- upload_asset_to_github_release(
- args.release_asset, args.release_tag, args.github_token, args.asset_name
- )
- return 0
- if __name__ == "__main__":
- exit(main())
|