Skip to content
Snippets Groups Projects
Commit 6fa99778 authored by Martin Bergemann's avatar Martin Bergemann :speech_balloon:
Browse files

Improve packaging

parent d9e0a069
No related branches found
Tags v2205.1.14
1 merge request!44Better packaging
...@@ -45,7 +45,7 @@ release_job: ...@@ -45,7 +45,7 @@ release_job:
- pip install twine - pip install twine
- chmod +x /usr/local/bin/release-cli - chmod +x /usr/local/bin/release-cli
script: script:
- python setup.py sdist - python setup.py sdist bdist_wheel
- TWINE_PASSWORD=${CI_JOB_TOKEN} - TWINE_PASSWORD=${CI_JOB_TOKEN}
TWINE_USERNAME=gitlab-ci-token TWINE_USERNAME=gitlab-ci-token
python -m twine upload --skip-existing --verbose --repository-url python -m twine upload --skip-existing --verbose --repository-url
......
graft ./assets/* graft assets/*
...@@ -7,6 +7,8 @@ import urllib.request ...@@ -7,6 +7,8 @@ import urllib.request
from setuptools import setup, find_packages from setuptools import setup, find_packages
from setuptools.command.develop import develop from setuptools.command.develop import develop
from setuptools.command.install import install from setuptools.command.install import install
import sys
from typing import List
THIS_DIR = Path(__file__).parent THIS_DIR = Path(__file__).parent
...@@ -14,6 +16,20 @@ CONFIG_DIR = Path("freva") / "deployment" ...@@ -14,6 +16,20 @@ CONFIG_DIR = Path("freva") / "deployment"
ASSET_DIR = THIS_DIR / "assets" ASSET_DIR = THIS_DIR / "assets"
INSTALL_REQUIRES = [
"appdirs",
"npyscreen",
"numpy",
"PyMySQL",
"pyncclient",
"pyyml",
"rich",
"toml",
"tomlkit",
"requests",
]
def find_version(*parts): def find_version(*parts):
vers_file = read(*parts) vers_file = read(*parts)
match = re.search(r'^__version__ = "(\d+.\d+.\d+)"', vers_file, re.M) match = re.search(r'^__version__ = "(\d+.\d+.\d+)"', vers_file, re.M)
...@@ -90,6 +106,26 @@ def read(*parts: str) -> str: ...@@ -90,6 +106,26 @@ def read(*parts: str) -> str:
return f.read() 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) for f in d.rglob("*") if f.is_file()]
if add_files:
files.append((str(target_dir), add_files))
return files
setup( setup(
name="freva_deployment", name="freva_deployment",
version=find_version("src", "freva_deployment", "__init__.py"), version=find_version("src", "freva_deployment", "__init__.py"),
...@@ -101,7 +137,7 @@ setup( ...@@ -101,7 +137,7 @@ setup(
long_description=read("README.md"), long_description=read("README.md"),
long_description_content_type="text/markdown", long_description_content_type="text/markdown",
include_package_data=True, include_package_data=True,
package_data={"assets": ["assets"]}, data_files=get_data_files(),
license="GPLv3", license="GPLv3",
packages=find_packages("src"), packages=find_packages("src"),
package_dir={"": "src"}, package_dir={"": "src"},
...@@ -119,18 +155,7 @@ setup( ...@@ -119,18 +155,7 @@ setup(
] ]
}, },
setup_requires=["appdirs"], setup_requires=["appdirs"],
install_requires=[ install_requires=get_packages(),
"appdirs",
"npyscreen",
"numpy",
"PyMySQL",
"pyncclient",
"pyyml",
"rich",
"toml",
"tomlkit",
"requests",
],
extras_require={ extras_require={
"docs": [ "docs": [
"sphinx", "sphinx",
......
...@@ -5,7 +5,9 @@ import logging ...@@ -5,7 +5,9 @@ import logging
import json import json
from pathlib import Path from pathlib import Path
import re import re
from subprocess import run, PIPE from subprocess import PIPE
import sys
import shutil
from typing import cast, NamedTuple from typing import cast, NamedTuple
import appdirs import appdirs
...@@ -18,8 +20,7 @@ logging.basicConfig(format="%(name)s - %(levelname)s - %(message)s", level=loggi ...@@ -18,8 +20,7 @@ logging.basicConfig(format="%(name)s - %(levelname)s - %(message)s", level=loggi
logger = logging.getLogger("freva-deployment") logger = logging.getLogger("freva-deployment")
RichConsole = Console(markup=True, force_terminal=True) 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 = ( password_prompt = (
"[green]Choose[/] a [b]master password[/], this password will be used to:\n" "[green]Choose[/] a [b]master password[/], this password will be used to:\n"
"- create the [magenta]mysql root[/] password\n" "- create the [magenta]mysql root[/] password\n"
...@@ -33,6 +34,34 @@ ServiceInfo = NamedTuple( ...@@ -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( def guess_map_server(
inp_server: str | None, default_port: int = 6111, mandatory: bool = True inp_server: str | None, default_port: int = 6111, mandatory: bool = True
) -> str: ) -> str:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment