ndev-stack 0.3.7__tar.gz → 0.3.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/PKG-INFO +1 -1
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/__init__.py +1 -1
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/utils.py +25 -1
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/available.py +38 -38
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/ctl.py +6 -3
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/current.py +10 -10
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/db.py +319 -319
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/install.py +39 -39
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/list.py +45 -45
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/mailpit.py +82 -82
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/status.py +5 -2
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/uninstall.py +69 -69
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/update.py +56 -56
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/upgrade.py +81 -81
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/use.py +111 -108
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/runtime/fpm.py +122 -117
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/runtime/services.py +16 -8
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev_stack.egg-info/PKG-INFO +1 -1
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/pyproject.toml +1 -1
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/tests/test_opensuse_compat.py +20 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/README.md +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/__main__.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/cli.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/__init__.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/config.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/constants.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/distro.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/github.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/logger.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/manifest.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/__init__.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/base.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/builtin/mailpit/manifest.json +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/builtin/mailpit/module.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/builtin/mongodb/manifest.json +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/builtin/mongodb/module.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/builtin/postgres/manifest.json +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/builtin/postgres/module.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/builtin/redis/manifest.json +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/builtin/redis/module.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/common/modules/manager.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/__init__.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/chroot/manager.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/chroot/packages.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/chroot/shell.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/cli.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/clean.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/doctor.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/grok.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/logs.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/modules.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/mongodb.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/postgres.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/reload.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/restart.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/setup.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/start.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/stop.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/commands/vhost.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/php/builder.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/php/downloader.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/php/extensions.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/php/installer.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/php/resolver.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/php/templates.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/runtime/mailpit.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/runtime/nginx_helper.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/runtime/pma.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/runtime/process.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/runtime/sockets.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/runtime/upgrade.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/linux/tui.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/main.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/tui.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/__init__.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/bin/shim.exe +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/cli.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/commands/__init__.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/__init__.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/db.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/elevate.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/ext.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/fcgi.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/grok.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/logs.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/mailpit.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/mkcert.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/paths.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/php.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/pma.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/redis_core.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/services.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/setup.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/shim.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/upgrade.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/core/vhost.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/templates/vhost.conf.tmpl +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/templates/vhost_ssl.conf.tmpl +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev/win/tui.py +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev_stack.egg-info/SOURCES.txt +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev_stack.egg-info/dependency_links.txt +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev_stack.egg-info/entry_points.txt +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev_stack.egg-info/requires.txt +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/ndev_stack.egg-info/top_level.txt +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/setup.cfg +0 -0
- {ndev_stack-0.3.7 → ndev_stack-0.3.8}/tests/test_shim.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ndev-stack
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.8
|
|
4
4
|
Summary: Cross-platform developer stack manager for PHP, FastCGI/PHP-FPM, MariaDB, Redis, PostgreSQL, MongoDB, Nginx, SSL, and Mailpit on Linux and Windows
|
|
5
5
|
Author-email: Ankit Karan <ankit.karan99@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/ankitkaran99/ndev
|
|
@@ -92,7 +92,31 @@ def get_version_or_prompt(version: str = None, prompt_message: str = "PHP versio
|
|
|
92
92
|
except Exception:
|
|
93
93
|
pass
|
|
94
94
|
|
|
95
|
-
return typer.prompt(prompt_message).strip()
|
|
95
|
+
return typer.prompt(prompt_message).strip()
|
|
96
|
+
|
|
97
|
+
def resolve_installed_version(version: str | None) -> str | None:
|
|
98
|
+
"""Resolve an installed PHP version, matching exact name or major.minor prefix."""
|
|
99
|
+
if not version:
|
|
100
|
+
return version
|
|
101
|
+
from ndev.common.constants import PHP_DIR
|
|
102
|
+
if not PHP_DIR.exists():
|
|
103
|
+
return version
|
|
104
|
+
direct_path = PHP_DIR / version
|
|
105
|
+
if direct_path.exists() and direct_path.is_dir():
|
|
106
|
+
return version
|
|
107
|
+
# Try prefix matching (e.g. '8.4' -> '8.4.27')
|
|
108
|
+
matches = [
|
|
109
|
+
d.name for d in PHP_DIR.iterdir()
|
|
110
|
+
if d.is_dir() and (d.name == version or d.name.startswith(f"{version}."))
|
|
111
|
+
]
|
|
112
|
+
if matches:
|
|
113
|
+
from packaging.version import parse as parse_version
|
|
114
|
+
try:
|
|
115
|
+
matches.sort(key=parse_version, reverse=True)
|
|
116
|
+
except Exception:
|
|
117
|
+
matches.sort(reverse=True)
|
|
118
|
+
return matches[0]
|
|
119
|
+
return version
|
|
96
120
|
|
|
97
121
|
def which_binary(cmd: str) -> str | None:
|
|
98
122
|
"""
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import typer
|
|
2
|
-
from rich.console import Console
|
|
3
|
-
from rich.table import Table
|
|
4
|
-
from ndev.common.github import fetch_releases
|
|
5
|
-
from ndev.common.logger import logger
|
|
6
|
-
|
|
7
|
-
console = Console()
|
|
8
|
-
|
|
9
|
-
def available_cmd():
|
|
10
|
-
"""List all available PHP versions from php.net."""
|
|
11
|
-
logger.info("Fetching available PHP versions from php.net...")
|
|
12
|
-
|
|
13
|
-
releases_8 = fetch_releases(8)
|
|
14
|
-
releases_7 = fetch_releases(7)
|
|
15
|
-
|
|
16
|
-
all_releases = {**releases_8, **releases_7}
|
|
17
|
-
|
|
18
|
-
if not all_releases:
|
|
19
|
-
logger.error("Could not fetch available releases. Check your network connection.")
|
|
20
|
-
raise typer.Exit(code=1)
|
|
21
|
-
|
|
22
|
-
from packaging.version import parse as parse_version
|
|
23
|
-
sorted_versions = sorted(all_releases.keys(), key=parse_version, reverse=True)
|
|
24
|
-
|
|
25
|
-
table = Table(title="Available PHP Releases")
|
|
26
|
-
table.add_column("Version", style="bold cyan")
|
|
27
|
-
table.add_column("Release Date")
|
|
28
|
-
table.add_column("Security Release")
|
|
29
|
-
|
|
30
|
-
for v in sorted_versions:
|
|
31
|
-
data = all_releases[v]
|
|
32
|
-
date = data.get("date", "N/A")
|
|
33
|
-
tags = data.get("tags", [])
|
|
34
|
-
is_security = "Yes" if "security" in tags else "No"
|
|
35
|
-
|
|
36
|
-
table.add_row(v, date, is_security)
|
|
37
|
-
|
|
38
|
-
console.print(table)
|
|
1
|
+
import typer
|
|
2
|
+
from rich.console import Console
|
|
3
|
+
from rich.table import Table
|
|
4
|
+
from ndev.common.github import fetch_releases
|
|
5
|
+
from ndev.common.logger import logger
|
|
6
|
+
|
|
7
|
+
console = Console()
|
|
8
|
+
|
|
9
|
+
def available_cmd():
|
|
10
|
+
"""List all available PHP versions from php.net."""
|
|
11
|
+
logger.info("Fetching available PHP versions from php.net...")
|
|
12
|
+
|
|
13
|
+
releases_8 = fetch_releases(8)
|
|
14
|
+
releases_7 = fetch_releases(7)
|
|
15
|
+
|
|
16
|
+
all_releases = {**releases_8, **releases_7}
|
|
17
|
+
|
|
18
|
+
if not all_releases:
|
|
19
|
+
logger.error("Could not fetch available releases. Check your network connection.")
|
|
20
|
+
raise typer.Exit(code=1)
|
|
21
|
+
|
|
22
|
+
from packaging.version import parse as parse_version
|
|
23
|
+
sorted_versions = sorted(all_releases.keys(), key=parse_version, reverse=True)
|
|
24
|
+
|
|
25
|
+
table = Table(title="Available PHP Releases")
|
|
26
|
+
table.add_column("Version", style="bold cyan")
|
|
27
|
+
table.add_column("Release Date")
|
|
28
|
+
table.add_column("Security Release")
|
|
29
|
+
|
|
30
|
+
for v in sorted_versions:
|
|
31
|
+
data = all_releases[v]
|
|
32
|
+
date = data.get("date", "N/A")
|
|
33
|
+
tags = data.get("tags", [])
|
|
34
|
+
is_security = "Yes" if "security" in tags else "No"
|
|
35
|
+
|
|
36
|
+
table.add_row(v, date, is_security)
|
|
37
|
+
|
|
38
|
+
console.print(table)
|
|
@@ -42,12 +42,15 @@ def resolve_service_name(service: str) -> str:
|
|
|
42
42
|
return "redis"
|
|
43
43
|
return service
|
|
44
44
|
|
|
45
|
+
from ndev.common.utils import resolve_installed_version
|
|
46
|
+
|
|
45
47
|
def service_exists(service: str) -> bool:
|
|
46
48
|
if service == "pma":
|
|
47
49
|
return True
|
|
48
50
|
if service.startswith("ndev-"):
|
|
49
51
|
version = service[5:]
|
|
50
|
-
|
|
52
|
+
v = resolve_installed_version(version)
|
|
53
|
+
return (get_user_ndev_dir() / "php" / (v or version)).exists()
|
|
51
54
|
|
|
52
55
|
resolved = resolve_service_name(service)
|
|
53
56
|
if shutil.which("systemctl"):
|
|
@@ -71,7 +74,7 @@ def service_status(service: str) -> str:
|
|
|
71
74
|
return "STOPPED"
|
|
72
75
|
|
|
73
76
|
if service.startswith("ndev-"):
|
|
74
|
-
version = service[5:]
|
|
77
|
+
version = resolve_installed_version(service[5:]) or service[5:]
|
|
75
78
|
script_path = sys.argv[0]
|
|
76
79
|
res = subprocess.run([sys.executable, script_path, "status", version], capture_output=True, text=True)
|
|
77
80
|
if "Running" in res.stdout:
|
|
@@ -105,7 +108,7 @@ def manage_service(service: str, action: str):
|
|
|
105
108
|
elif action == "restart":
|
|
106
109
|
restart_pma()
|
|
107
110
|
elif service.startswith("ndev-"):
|
|
108
|
-
version = service[5:]
|
|
111
|
+
version = resolve_installed_version(service[5:]) or service[5:]
|
|
109
112
|
script_path = sys.argv[0]
|
|
110
113
|
subprocess.run([sys.executable, script_path, action, version])
|
|
111
114
|
else:
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
from ndev.common.constants import CURRENT_LINK
|
|
2
|
-
from ndev.common.logger import logger
|
|
3
|
-
|
|
4
|
-
def current_cmd():
|
|
5
|
-
"""Show the currently active PHP version."""
|
|
6
|
-
if CURRENT_LINK.exists() and CURRENT_LINK.is_symlink():
|
|
7
|
-
version = CURRENT_LINK.resolve().name
|
|
8
|
-
logger.info(f"Current active PHP version: {version}")
|
|
9
|
-
else:
|
|
10
|
-
logger.info("No active PHP version set. Use 'ndev use <version>' to set one.")
|
|
1
|
+
from ndev.common.constants import CURRENT_LINK
|
|
2
|
+
from ndev.common.logger import logger
|
|
3
|
+
|
|
4
|
+
def current_cmd():
|
|
5
|
+
"""Show the currently active PHP version."""
|
|
6
|
+
if CURRENT_LINK.exists() and CURRENT_LINK.is_symlink():
|
|
7
|
+
version = CURRENT_LINK.resolve().name
|
|
8
|
+
logger.info(f"Current active PHP version: {version}")
|
|
9
|
+
else:
|
|
10
|
+
logger.info("No active PHP version set. Use 'ndev use <version>' to set one.")
|