diff --git a/.github/workflows/ci-blenderbim-choco.yml b/.github/workflows/ci-blenderbim-choco.yml index 03b4d682dd..10751a474c 100644 --- a/.github/workflows/ci-blenderbim-choco.yml +++ b/.github/workflows/ci-blenderbim-choco.yml @@ -42,5 +42,6 @@ jobs: - name: Check in release tags if we should do a choco release and perform the release if needed id: do_choco_release run: | + pip install pygithub cd /home/runner/work/IfcOpenShell/IfcOpenShell/choco/blenderbim/ && python3 choco_release.py diff --git a/choco/blenderbim/choco_release.py b/choco/blenderbim/choco_release.py index 4673d97bda..b63ee3bf89 100644 --- a/choco/blenderbim/choco_release.py +++ b/choco/blenderbim/choco_release.py @@ -14,9 +14,11 @@ import os import pathlib import re from urllib import request +from github import Github +from typing import NoReturn -def get_repo_tag_names(): +def get_repo_tag_names() -> list[str]: git_return = os.popen("git tag -l").read() tag_names = [tag_name for tag_name in git_return.split("\n") if tag_name] print(f"{len(tag_names)} tag_names found in repo") @@ -43,7 +45,7 @@ def get_latest_choco_blender_version() -> list: return re.findall(RE_BLENDER_VERSION_MIN_MAJ_PAT, html_txt) -def get_file_sha256_hash(file_path): +def get_file_sha256_hash(file_path: str) -> str: BLOCKSIZE = 65536 hasher = hashlib.sha256() @@ -56,16 +58,29 @@ def get_file_sha256_hash(file_path): return hasher.hexdigest() -def quit_with_error_message(message: str): +def quit_with_error_message(message: str) -> NoReturn: print(f"ERROR: {message}") quit(0) +def get_release_zip(tag: str) -> tuple[str, str]: + g = Github() + repo = g.get_repo("IfcOpenShell/IfcOpenShell") + release = repo.get_release(tag) + for asset in release.get_assets(): + asset_name = asset.name + if python_version not in asset_name: + continue + if TARGET_OS not in asset_name: + continue + return (asset_name, asset.browser_download_url) + raise Exception(f"Couldn't find the release matching '{python_version}' and '{TARGET_OS}' in tag '{tag}'.") + + start = datetime.datetime.now() URL_CHOCO_PACKAGE = "https://community.chocolatey.org/packages/blender" URL_BLENDER_CMAKE = "https://raw.githubusercontent.com/blender/blender/{}/build_files/cmake/Modules/FindPythonLibsUnix.cmake" -URL_IFCOS_RELEASES = "https://github.com/IfcOpenShell/IfcOpenShell/releases/download/" RE_BLENDER_VERSION_MIN_MAJ = r"Latest Version.+Blender (\d+\.\d+)\..+" RE_BLENDER_VERSION_MIN_MAJ_PAT = r"Latest Version.+Blender (\d+\.\d+\.\d+)" RE_BLENDER_PYTHON_VERSION_MAJ_MIN = r"\(_PYTHON_VERSION_SUPPORTED (\d+\.\d+)\)" @@ -79,7 +94,7 @@ os.chdir(BLENDERBIM_DIR) blenderbim_date_yesterday = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%y%m%d") should_release = False target_release_tag = "" -target_os = "win" +TARGET_OS = "windows-x64" git_status = os.popen("git status").read() print(git_status) @@ -130,10 +145,7 @@ print(f"{python_version=}") blenderbim_build_version = target_release_tag.replace("blenderbim-", "") # url_blenderbim_py3x_win_zip -release_zip_file_name = f"{target_release_tag}-{python_version}-{target_os}.zip" - -# download release -url_blenderbim_py3x_win_zip = f"{URL_IFCOS_RELEASES}{target_release_tag}/{release_zip_file_name}" +release_zip_file_name, url_blenderbim_py3x_win_zip = get_release_zip(target_release_tag) os.popen(f"wget {url_blenderbim_py3x_win_zip} --no-verbose").read() # sha256sum_blenderbim_py310_win_zip