85 lines
2.5 KiB
Python

#!/usr/bin/env python
#
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
import argparse
import os
import requests
BASE_URL = "https://api.github.com/repos/microsoft/onefuzz"
class Onefuzz:
def get_latest_version_name(self):
latest_release = requests.get(f"{BASE_URL}/releases/latest").json()
return latest_release["name"]
def get_release_id_by_name(self, version_name=None):
if version_name is None:
release = requests.get(f"{BASE_URL}/releases/latest").json()
else:
release = requests.get(f"{BASE_URL}/releases/tags/{version_name}").json()
return release["id"]
def list_assets(self, release_id):
assets = requests.get(f"{BASE_URL}/releases/{release_id}/assets").json()
artifacts = []
for asset in assets:
artifacts.append({"id": asset["id"], "name": asset["name"]})
return artifacts
def download_artifact(self, path, asset_id, asset_name):
headers = {"Accept": "application/octet-stream"}
asset = requests.get(
f"{BASE_URL}/releases/assets/{asset_id}", headers=headers
)
with open(os.path.join(path, asset_name), "wb") as artifact:
artifact.write(asset.content)
def download_artifacts(self, path, artifacts):
for artifact in artifacts:
self.download_artifact(path, artifact["id"], artifact["name"])
def onefuzz_release_artifacts(self, path, version):
release_id = self.get_release_id_by_name(version)
artifacts = self.list_assets(release_id)
self.download_artifacts(path, artifacts)
def main():
def dir_path(path):
path = os.path.abspath(path)
if not os.path.isdir(path):
os.makedirs(path)
return path
parser = argparse.ArgumentParser(description="Download artifacts")
parser.add_argument(
"-path",
type=dir_path,
help="Path to download binaries",
)
parser.add_argument(
"-version",
type=str,
default=None,
help="Get specific Onefuzz version",
)
parser.add_argument(
"-display_latest_version",
action="store_true",
help="Get Onefuzz latest version",
)
args = parser.parse_args()
if args.path:
Onefuzz().onefuzz_release_artifacts(args.path, args.version)
if args.display_latest_version:
print(Onefuzz().get_latest_version_name())
if __name__ == "__main__":
main()