mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-21 23:11:00 +00:00
c29012d979
1.14.0 fixes the use of deprecated `pgk_resources` warning (https://github.com/anaconda/anaconda-client/releases/tag/1.14.0). Though bumping to the latest version. Warning: ``` /home/runner/micromamba/envs/test-env/lib/python3.11/site-packages/binstar_client/__init__.py:15: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81. ```
73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
# /// script
|
|
# requires-python = ">=3.11"
|
|
# dependencies = [
|
|
# "anaconda-client==1.15.0",
|
|
# ]
|
|
# ///
|
|
|
|
import os
|
|
from typing import Any
|
|
|
|
from binstar_client import Binstar # ty: ignore[unresolved-import]
|
|
from binstar_client.errors import BinstarError # ty: ignore[unresolved-import]
|
|
from binstar_client.utils import get_server_api # ty: ignore[unresolved-import]
|
|
|
|
# Configuration
|
|
api_token = os.environ["ANACONDA_TOKEN"]
|
|
pkg_name = "ifcopenshell"
|
|
channel_name = "ifcopenshell"
|
|
number_of_supported_versions = int(os.environ["NUM_SUPPORTED_VERSIONS"])
|
|
|
|
# Authenticate with Anaconda
|
|
aserver_api: Binstar = get_server_api(token=api_token)
|
|
|
|
|
|
# Get the list of packages in the channel
|
|
def get_package(filter_package_name: str | None = None) -> dict[str, Any]:
|
|
try:
|
|
user_packages = aserver_api.user_packages(channel_name)
|
|
if filter_package_name:
|
|
user_packages = [pkg for pkg in user_packages if pkg["name"] == filter_package_name]
|
|
if len(user_packages) == 0:
|
|
print(f"No packages found for {filter_package_name}.")
|
|
if len(user_packages) > 1:
|
|
raise ValueError(
|
|
f"Found {len(user_packages)} package for {filter_package_name}. Will only support 1 package."
|
|
)
|
|
|
|
return user_packages[0]
|
|
except BinstarError as err:
|
|
raise ValueError(f"Failed to fetch packages: {err}")
|
|
|
|
|
|
# Delete a package version
|
|
def delete_package(package_name: str, version: str) -> None:
|
|
try:
|
|
aserver_api.remove_release(channel_name, package_name, version)
|
|
print(f"Deleted {package_name} version {version}")
|
|
except BinstarError as err:
|
|
print(f"Failed to delete {package_name} version {version}: {err}")
|
|
|
|
|
|
# Main logic
|
|
def main() -> None:
|
|
package = get_package(pkg_name)
|
|
package_name = package["name"]
|
|
versions = package["versions"]
|
|
if len(versions) <= number_of_supported_versions:
|
|
print(f"Number of versions {len(versions)} is less than or equal to {number_of_supported_versions}.")
|
|
return
|
|
|
|
# sort the versions in descending order
|
|
print(f"Before reversal: {versions=}")
|
|
versions.reverse()
|
|
print(f"After reversal: {versions=}")
|
|
|
|
releases = versions[number_of_supported_versions:]
|
|
|
|
for release in releases:
|
|
delete_package(package_name, release)
|
|
|
|
|
|
main()
|