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)