Skip to content
Snippets Groups Projects
setup_silecs_env.py 2.44 KiB
import os
import argparse
from packaging import version

def get_major(v):
    return v._version.release[0]

def get_minor(v):
    return v._version.release[1]

def create_link(silecs_deploy_dir, version, link_name):
    target = os.path.join(silecs_deploy_dir, version)
    link = os.path.join(silecs_deploy_dir, link_name)
    try:
    	os.symlink(target, link)
    except FileExistsError as err:
        os.unlink(link)
        os.symlink(target, link)
    print(f"symlink created {link} -> {target}")


def get_available_versions(silecs_deploy_dir):
    """Find available versions of silecs in SILECS_DIR"""
    subfolders = [f.name for f in os.scandir(silecs_deploy_dir) if os.path.isdir(f) and not os.path.islink(f) ]
    available_versions = []
    for f in subfolders:
        try:
            v = version.Version(f)
            available_versions.append(f)
        except version.InvalidVersion:
            pass

    return sorted(available_versions, key= lambda x: version.Version(x), reverse=True)

def get_major_versions(versions):
    """Find all major versions eg ["3.0.1", "2.3.4", "1.4.1"] -> [3, 2, 1]"""

    major_versions = []
    for v in versions:
        v = version.Version(v)
        major = get_major(v)
        if not major in major_versions:
            major_versions.append(major)
    return major_versions


def run(silecs_deploy_dir):
    try:
        versions = get_available_versions(silecs_deploy_dir)
        major_versions = get_major_versions(versions)
        assert len(versions)
    except AssertionError:
        print("No versions found")
        return

    latest_version = versions[0]

    # set link for latest version
    create_link(silecs_deploy_dir, latest_version, 'latest')

    # For each major version create link to newest version
    for mv in major_versions:
        newest_version_with_major = str([version.Version(v) for v in versions if get_major(version.Version(v)) == mv][0])
        create_link(silecs_deploy_dir, newest_version_with_major, str(mv))
	
    print("Links successfully created")
    return

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument('silecs_deploy_dir', metavar='silecs_deploy_dir', type=str, nargs=1,
                    help='path to silecs deploy directory')

    try:
        options = parser.parse_args()
    except Exception:
        sys.exit(0)
    
    silecs_deploy_dir = options.silecs_deploy_dir[0]
    run(silecs_deploy_dir)