diff options
Diffstat (limited to '.github/workflows/download_openssl.py')
| -rw-r--r-- | .github/workflows/download_openssl.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/.github/workflows/download_openssl.py b/.github/workflows/download_openssl.py new file mode 100644 index 00000000..559e6819 --- /dev/null +++ b/.github/workflows/download_openssl.py @@ -0,0 +1,60 @@ +import io +import os +import sys +import zipfile + +import requests + +from urllib3.util.retry import Retry + + +def get_response(session, url, token): + response = session.get(url, headers={"Authorization": "token " + token}) + if response.status_code != 200: + raise ValueError("Got HTTP {} fetching {}: ".format( + response.status_code, url + )) + return response + + +def main(platform, target): + if platform == "windows": + workflow = "build-windows-openssl.yml" + path = "C:/" + elif platform == "macos": + workflow = "build-macos-openssl.yml" + path = os.environ["HOME"] + else: + raise ValueError("Invalid platform") + + session = requests.Session() + adapter = requests.adapters.HTTPAdapter( + max_retries=Retry() + ) + session.mount("https://", adapter) + session.mount("http://", adapter) + + token = os.environ["GITHUB_TOKEN"] + print("Looking for: {}".format(target)) + runs_url = ( + "https://api.github.com/repos/pyca/infra/actions/workflows/" + "{}/runs?branch=master&status=success".format(workflow) + ) + + response = get_response(session, runs_url, token).json() + artifacts_url = response["workflow_runs"][0]["artifacts_url"] + response = get_response(session, artifacts_url, token).json() + for artifact in response["artifacts"]: + if artifact["name"] == target: + print("Found artifact") + response = get_response( + session, artifact["archive_download_url"], token + ) + zipfile.ZipFile(io.BytesIO(response.content)).extractall( + os.path.join(path, artifact["name"]) + ) + return + + +if __name__ == "__main__": + main(sys.argv[1], sys.argv[2]) |
