diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c3e2e33962f10cf8d4e5d77ea91ab7cf8a2582c2..30439ba5d150a4c079a75fd4b1f53c84d3ae1ae9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -45,7 +45,7 @@ release_job: - pip install twine - chmod +x /usr/local/bin/release-cli script: - - python setup.py sdist + - python setup.py sdist bdist_wheel - TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --skip-existing --verbose --repository-url diff --git a/MANIFEST.in b/MANIFEST.in index af8fff7354653f73493850a46db55808b316c5c7..f20fbdc90a5a99c0d2b0950a79597e8126096a2c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1 @@ -graft ./assets/* +graft assets/* diff --git a/setup.py b/setup.py index bef2bb9ee074402d2213587d4b5ed8bc5773c482..6a247b2862c584c663c8798378b7573ed7b0f1d6 100644 --- a/setup.py +++ b/setup.py @@ -7,6 +7,8 @@ import urllib.request from setuptools import setup, find_packages from setuptools.command.develop import develop from setuptools.command.install import install +import sys +from typing import List THIS_DIR = Path(__file__).parent @@ -14,6 +16,20 @@ CONFIG_DIR = Path("freva") / "deployment" ASSET_DIR = THIS_DIR / "assets" +INSTALL_REQUIRES = [ + "appdirs", + "npyscreen", + "numpy", + "PyMySQL", + "pyncclient", + "pyyml", + "rich", + "toml", + "tomlkit", + "requests", +] + + def find_version(*parts): vers_file = read(*parts) match = re.search(r'^__version__ = "(\d+.\d+.\d+)"', vers_file, re.M) @@ -90,6 +106,26 @@ def read(*parts: str) -> str: return f.read() +def get_packages() -> List[str]: + """Get the packages needed to install.""" + plf = sys.platform + if plf.startswith("win") or plf.startswith("cygwin") or plf.startswith("ms"): + return INSTALL_REQUIRES + INSTALL_REQUIRES.append("ansible") + return INSTALL_REQUIRES + + +def get_data_files() -> List[str]: + dirs = [d for d in ASSET_DIR.rglob("*") if d.is_dir()] + files = [] + for d in dirs: + target_dir = Path("share") / "freva" / "deployment" / d.relative_to(ASSET_DIR) + add_files = [str(f.relative_to(THIS_DIR)) for f in d.rglob("*") if f.is_file()] + if add_files: + files.append((str(target_dir), add_files)) + return files + + setup( name="freva_deployment", version=find_version("src", "freva_deployment", "__init__.py"), @@ -101,7 +137,7 @@ setup( long_description=read("README.md"), long_description_content_type="text/markdown", include_package_data=True, - package_data={"assets": ["assets"]}, + data_files=get_data_files(), license="GPLv3", packages=find_packages("src"), package_dir={"": "src"}, @@ -119,18 +155,7 @@ setup( ] }, setup_requires=["appdirs"], - install_requires=[ - "appdirs", - "npyscreen", - "numpy", - "PyMySQL", - "pyncclient", - "pyyml", - "rich", - "toml", - "tomlkit", - "requests", - ], + install_requires=get_packages(), extras_require={ "docs": [ "sphinx", diff --git a/src/freva_deployment/__init__.py b/src/freva_deployment/__init__.py index 3c2a9d448211876c81fa9ea5c78dd7c2e61fd21b..4c0b5a1f618e7da1063dad5fe8f98d0a0b5dc836 100644 --- a/src/freva_deployment/__init__.py +++ b/src/freva_deployment/__init__.py @@ -1,4 +1,4 @@ -__version__ = "2207.0.2" +__version__ = "2207.0.3" AVAILABLE_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10"] AVAILABLE_CONDA_ARCHS = [ "Linux-x86_64", diff --git a/src/freva_deployment/utils.py b/src/freva_deployment/utils.py index c90fa91d44b9e794db72521dabdf299d729c270d..f5460e20848347543b9c2661d448bb7f8b8a7882 100644 --- a/src/freva_deployment/utils.py +++ b/src/freva_deployment/utils.py @@ -5,7 +5,9 @@ import logging import json from pathlib import Path import re -from subprocess import run, PIPE +from subprocess import PIPE +import sys +import shutil from typing import cast, NamedTuple import appdirs @@ -18,8 +20,7 @@ logging.basicConfig(format="%(name)s - %(levelname)s - %(message)s", level=loggi logger = logging.getLogger("freva-deployment") RichConsole = Console(markup=True, force_terminal=True) -config_dir = Path(appdirs.user_config_dir()) / "freva" / "deployment" -asset_dir = Path(appdirs.user_data_dir()) / "freva" / "deployment" + password_prompt = ( "[green]Choose[/] a [b]master password[/], this password will be used to:\n" "- create the [magenta]mysql root[/] password\n" @@ -33,6 +34,34 @@ ServiceInfo = NamedTuple( ) +class AssetDir: + def __init__(self): + + self._user_asset_dir = Path(appdirs.user_data_dir()) / "freva" / "deployment" + self._user_config_dir = Path(appdirs.user_config_dir()) / "freva" / "deployment" + self._central_asset_dir = Path(sys.exec_prefix) / "freva" / "deployment" + + @property + def asset_dir(self): + if self._user_asset_dir.exists(): + return self._user_asset_dir + return self._central_asset_dir + + @property + def config_dir(self): + inventory_file = self._user_config_dir / "inventory.toml" + if inventory_file.exists(): + return self._user_config_dir + self._user_config_dir.mkdir(exist_ok=True, parents=True) + shutil.copy(self.asset_dir / "config" / "inventory.toml", inventory_file) + return self._user_config_dir + + +AD = AssetDir() +asset_dir = AD.asset_dir +config_dir = AD.config_dir + + def guess_map_server( inp_server: str | None, default_port: int = 6111, mandatory: bool = True ) -> str: