diff --git a/.github/workflows/ci-ifcopenshell-conda-cleaner.yml b/.github/workflows/ci-ifcopenshell-conda-cleaner.yml index 2daa331c50..b6f90666f3 100644 --- a/.github/workflows/ci-ifcopenshell-conda-cleaner.yml +++ b/.github/workflows/ci-ifcopenshell-conda-cleaner.yml @@ -24,6 +24,8 @@ jobs: if: | github.repository == 'IfcOpenShell/IfcOpenShell' steps: + - uses: actions/checkout@v7 + - uses: mamba-org/setup-micromamba@v3 # https://github.com/mamba-org/setup-micromamba with: environment-name: test-env @@ -32,73 +34,4 @@ jobs: anaconda-client=1.12.3 - name: Run conda cleaner - run: | - python - << EOF - - import os - from datetime import datetime, timedelta - from binstar_client.utils import get_server_api - from binstar_client.errors import BinstarError - - # Configuration - api_token = os.environ.get('ANACONDA_TOKEN') - pkg_name = 'ifcopenshell' - channel_name = 'ifcopenshell' - - # Authenticate with Anaconda - aserver_api = get_server_api(token=api_token) - - - # Get the list of packages in the channel - def get_package(filter_package_name: str = None): - 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, version): - 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(): - package = get_package(pkg_name) - if not package: - print("No packages found.") - return - - number_of_supported_versions = ${{ env.NUM_SUPPORTED_VERSIONS }} - - 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() - - EOF + run: python conda/clean-old-versions.py diff --git a/conda/clean-old-versions.py b/conda/clean-old-versions.py new file mode 100644 index 0000000000..3fdb800663 --- /dev/null +++ b/conda/clean-old-versions.py @@ -0,0 +1,67 @@ +import os + +from binstar_client.errors import BinstarError +from binstar_client.utils import get_server_api + +# Configuration +api_token = os.environ.get("ANACONDA_TOKEN") +pkg_name = "ifcopenshell" +channel_name = "ifcopenshell" +number_of_supported_versions = int(os.environ["NUM_SUPPORTED_VERSIONS"]) + +# Authenticate with Anaconda +aserver_api = get_server_api(token=api_token) + + +# Get the list of packages in the channel +def get_package(filter_package_name: str = None): + 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, version): + 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(): + package = get_package(pkg_name) + if not package: + print("No packages found.") + return + + 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()