diff options
author | lovetox <philipp@hoerist.com> | 2022-07-29 23:27:19 +0300 |
---|---|---|
committer | lovetox <philipp@hoerist.com> | 2022-07-30 00:04:43 +0300 |
commit | 54d4c9f8a326b96ef116a01e72429b84533cce77 (patch) | |
tree | 42f22d0e250c1e10139c3f680717fb09c29d1bc6 /.ci | |
parent | b7cd7dcc3140044dddd1d67a7243a8290652f6a7 (diff) |
ci: Split windows job into build and deploy stages
Diffstat (limited to '.ci')
-rw-r--r-- | .ci/appveyor_build.py | 28 | ||||
-rw-r--r-- | .ci/deploy.py | 32 |
2 files changed, 47 insertions, 13 deletions
diff --git a/.ci/appveyor_build.py b/.ci/appveyor_build.py index f301c0945..5ab2750b0 100644 --- a/.ci/appveyor_build.py +++ b/.ci/appveyor_build.py @@ -1,5 +1,8 @@ #!/usr/bin/env python3 +from typing import Any + +import json import os import requests import time @@ -7,6 +10,7 @@ from pathlib import Path from rich.console import Console + ACCOUNT = 'lovetox' PROJECT_SLUG = 'gajim' BRANCH = 'master' @@ -67,7 +71,7 @@ def is_build_finished(build: dict[str, str]) -> bool: return build['status'] == 'success' -def get_artifacts(build_id: str) -> None: +def check_for_response(build_id: str) -> None: time.sleep(INITIAL_START_DELAY) while True: time.sleep(RETRY_TIMEOUT) @@ -89,28 +93,26 @@ def get_artifacts(build_id: str) -> None: build_folder.mkdir() for job in build['jobs']: - download_job_artifacts(job['jobId'], build_folder) - - console.print('All artifacts downloaded!') + response = get_job_response(job['jobId']) + result = build_folder / f'{job["jobId"]}.json' + result.write_text(json.dumps(response)) + console.print('Write job response:', result) -def download_job_artifacts(job_id: str, target_folder: Path) -> None: +def get_job_response(job_id: str) -> list[dict[str, Any]]: artifacts_api_url = f'{BASE_URL}/buildjobs/{job_id}/artifacts' req = requests.get(artifacts_api_url, headers=HEADERS) req.raise_for_status() response = req.json() for artifact in response: - filename = artifact['fileName'] - console.print('Download', filename, '...') - file_url = f'{artifacts_api_url}/{filename}' - req = requests.get(file_url, headers=HEADERS) - req.raise_for_status() - with open(target_folder / filename, 'wb') as file: - file.write(req.content) + file_url = f'{artifacts_api_url}/{artifact["fileName"]}' + artifact['fileUrl'] = file_url + + return response if __name__ == '__main__': push_yaml_to_project() build_id = start_build() - get_artifacts(build_id) + check_for_response(build_id) diff --git a/.ci/deploy.py b/.ci/deploy.py index b25df2986..bc3d4afcb 100644 --- a/.ci/deploy.py +++ b/.ci/deploy.py @@ -1,13 +1,17 @@ +#!/usr/bin/env python3 + from typing import Any from typing import Optional import functools +import json import os import sys from datetime import date from ftplib import FTP_TLS from pathlib import Path +import requests from rich.console import Console @@ -15,6 +19,9 @@ FTP_URL = 'panoramix.gajim.org' FTP_USER = os.environ['FTP_USER'] FTP_PASS = os.environ['FTP_PASS'] +API_KEY = os.environ['APPVEYOR_API_KEY'] +HEADERS = {'Authorization': f'Bearer {API_KEY}'} + WINDOWS_NIGHTLY_FOLDER = 'downloads/snap/win' LINUX_NIGHTLY_FOLDER = 'downloads/snap' @@ -84,6 +91,29 @@ def upload_file(ftp: FTP_TLS, ftp.storbinary('STOR ' + name, f) +def download_artifacts(path: Path) -> None: + build_results = list(path.glob('*.json')) + if not build_results: + sys.exit('No build build_results found') + + responses = [json.loads(response.read_text()) for response in build_results] + + for response in responses: + for artifact in response: + filename = artifact['fileName'] + file_url = artifact['fileUrl'] + + console.print('Download', filename, '...') + + req = requests.get(file_url, headers=HEADERS) + req.raise_for_status() + with open(path / filename, 'wb') as file: + file.write(req.content) + + for result in build_results: + result.unlink() + + def get_deploy_method() -> str: deploy_type = os.environ['DEPLOY_TYPE'] is_nightly = bool(os.environ.get('GAJIM_NIGHTLY_BUILD')) @@ -95,6 +125,7 @@ def get_deploy_method() -> str: @ftp_connection def deploy_windows_nightly(ftp: FTP_TLS, filedir: Path) -> None: ftp.cwd(WINDOWS_NIGHTLY_FOLDER) + download_artifacts(filedir) upload_all_from_dir(ftp, filedir) @@ -102,6 +133,7 @@ def deploy_windows_nightly(ftp: FTP_TLS, filedir: Path) -> None: def deploy_windows_release(ftp: FTP_TLS, filedir: Path) -> None: tag = get_gajim_tag() create_release_folder(ftp, tag) + download_artifacts(filedir) upload_all_from_dir(ftp, filedir) |