Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
setup.py 2.56 KiB
from setuptools import setup
from setuptools.command.build_py import build_py
import subprocess
import os
import requests
import semver
        
vers = requests.get(f"{os.environ.get('NETDB_SCHEME', 'https')}://{os.environ.get('NETDB_ENDPOINT')}").json()[0]
largest_ver = None
for v in vers:
    sem_v = semver.Version.parse(v['numeric'])
    if largest_ver is None or largest_ver < sem_v:
        largest_ver = sem_v 

latest_previous_util_version = os.environ.get('LATEST_UTIL_VERSION', None)
latest_previous_api_version = os.environ.get('LATEST_API_VERSION', None)
post_version = os.environ.get('POST_NUM', None)
if post_version is not None and not post_version.isdigit():
    post_version = None

def get_gen_version():
    ver = subprocess.run(["pip freeze | grep net_api_generator"], shell=True, text=True, check=True, capture_output=True).stdout
    return ver.split('@')[-1][:12]

class APIGenBuild(build_py):
    def run(self):
        build_versions = [f'{v["major"]}.{v["minor"]}' for v in vers]
        default_version = f'{largest_ver.major}.{largest_ver.minor}'
        environ = os.environ.copy()
        for version in build_versions:
            target_dir = os.path.join(self.build_lib, 'netdb_client', f"api{version.replace('.', '')}")
            self.mkpath(target_dir)
            environ['NETDB_VERSION'] = version
            subprocess.run(['net-api-generator', 'python', f'--output-dir={target_dir}'], check=True, env=environ)
        target_dir = os.path.join(self.build_lib, 'netdb_client')
        environ['NETDB_VERSION'] = default_version
        subprocess.run(['net-api-generator', 'python', f'--output-dir={target_dir}'], check=True, env=environ)
        build_py.run(self)

util_version = f'{os.environ.get("CI_COMMIT_SHORT_SHA", "HEAD")}.{get_gen_version()}'

if util_version != latest_previous_util_version and str(largest_ver) == latest_previous_api_version:
    if post_version is None:
        post_version = 1
    else:
        post_version = int(post_version) + 1

setup(
    name='netdb_client',
    version=f'{str(largest_ver)}{".post" + str(post_version) if post_version is not None else ""}{".dev1" if os.environ.get("CI_COMMIT_BRANCH", "local") == "devel" else ""}+{util_version}',
    author='NETVS-Team <netvs@scc.kit.edu>',
    description='This is a meta package to install the automatically generated NET-API definitions for the currently supported API versions.',
    url='https://git.scc.kit.edu/scc-net/net-suite/netdb-client-lib',
    install_requires=['requests'],
    python_requires='>=3.7',
    packages=['netdb_client'],
    cmdclass={'build_py': APIGenBuild}
)