katalon-cli 0.1.7__tar.gz → 0.1.9__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.
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/PKG-INFO +3 -2
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/README.md +2 -1
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/pyproject.toml +1 -1
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/pyproject.toml.orig +1 -1
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/core/release.py +11 -14
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/main.py +26 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/__init__.py +0 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/core/__init__.py +0 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/core/backup.py +0 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/core/checks.py +0 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/core/compose_gen.py +0 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/core/docker.py +0 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/core/paths.py +0 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/core/state.py +0 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/py.typed +0 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/templates/compose.yaml.j2 +0 -0
- {katalon_cli-0.1.7 → katalon_cli-0.1.9}/src/katalon_cli/templates/nginx.conf.j2 +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: katalon-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
4
4
|
Summary: Installer & Updater CLI für Katalon Production-Instanzen
|
|
5
5
|
Author: Karl Krägelin
|
|
6
6
|
Author-email: Karl Krägelin <karlkraegelin@gmail.com>
|
|
@@ -30,6 +30,7 @@ uv tool install katalon-cli
|
|
|
30
30
|
```bash
|
|
31
31
|
katalon install # interaktiver Setup-Wizard (Rich-Prompts + Progress)
|
|
32
32
|
katalon start / stop / status
|
|
33
|
+
katalon check-updates # prüft nur, ob ein neues Release verfügbar ist
|
|
33
34
|
katalon update # interaktives Update, Backup zuerst immer
|
|
34
35
|
katalon rollback # letztes Backup einspielen
|
|
35
36
|
katalon doctor # Docker, Diskspace, Ports prüfen
|
|
@@ -65,7 +66,7 @@ uv run pytest
|
|
|
65
66
|
## Architektur
|
|
66
67
|
|
|
67
68
|
- `core/state.py` — `installation.json`, Single Source of Truth für laufende Version.
|
|
68
|
-
- `core/release.py` — GitHub-Release-Metadaten (`katalon-release.json` Asset)
|
|
69
|
+
- `core/release.py` — GitHub-Release-Metadaten (`katalon-release.json` Asset). Enthält
|
|
69
70
|
optional `env_vars`/`deprecated_env_vars`: `install`/`update` ergänzen neue Pflichtvariablen
|
|
70
71
|
automatisch (Secret generieren oder Default übernehmen), fragen bei fehlendem Default interaktiv
|
|
71
72
|
nach (`--yes` bricht dann ab), tragen neue optionale Variablen auskommentiert in `.env` ein und
|
|
@@ -16,6 +16,7 @@ uv tool install katalon-cli
|
|
|
16
16
|
```bash
|
|
17
17
|
katalon install # interaktiver Setup-Wizard (Rich-Prompts + Progress)
|
|
18
18
|
katalon start / stop / status
|
|
19
|
+
katalon check-updates # prüft nur, ob ein neues Release verfügbar ist
|
|
19
20
|
katalon update # interaktives Update, Backup zuerst immer
|
|
20
21
|
katalon rollback # letztes Backup einspielen
|
|
21
22
|
katalon doctor # Docker, Diskspace, Ports prüfen
|
|
@@ -51,7 +52,7 @@ uv run pytest
|
|
|
51
52
|
## Architektur
|
|
52
53
|
|
|
53
54
|
- `core/state.py` — `installation.json`, Single Source of Truth für laufende Version.
|
|
54
|
-
- `core/release.py` — GitHub-Release-Metadaten (`katalon-release.json` Asset)
|
|
55
|
+
- `core/release.py` — GitHub-Release-Metadaten (`katalon-release.json` Asset). Enthält
|
|
55
56
|
optional `env_vars`/`deprecated_env_vars`: `install`/`update` ergänzen neue Pflichtvariablen
|
|
56
57
|
automatisch (Secret generieren oder Default übernehmen), fragen bei fehlendem Default interaktiv
|
|
57
58
|
nach (`--yes` bricht dann ab), tragen neue optionale Variablen auskommentiert in `.env` ein und
|
|
@@ -2,16 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import json
|
|
6
|
-
import time
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
|
|
9
5
|
import httpx
|
|
10
6
|
from pydantic import BaseModel, Field
|
|
11
7
|
|
|
12
8
|
GITHUB_REPO = "katalon-collections/katalon"
|
|
13
|
-
CACHE_TTL_SECONDS = 3600
|
|
14
|
-
CACHE_PATH = Path.home() / ".cache" / "katalon-cli" / "releases.json"
|
|
15
9
|
|
|
16
10
|
|
|
17
11
|
class ReleaseRequirements(BaseModel):
|
|
@@ -69,6 +63,16 @@ def _fetch_release_asset(tag: str | None) -> dict:
|
|
|
69
63
|
asset_resp.raise_for_status()
|
|
70
64
|
return asset_resp.json()
|
|
71
65
|
|
|
66
|
+
def get_release_notes(tag: str) -> str:
|
|
67
|
+
"""Lädt den Changelog-Text (Release-Body) für einen Tag."""
|
|
68
|
+
with httpx.Client(timeout=15) as client:
|
|
69
|
+
release = client.get(
|
|
70
|
+
f"https://api.github.com/repos/{GITHUB_REPO}/releases/tags/{tag}"
|
|
71
|
+
)
|
|
72
|
+
release.raise_for_status()
|
|
73
|
+
return release.json().get("body") or ""
|
|
74
|
+
|
|
75
|
+
|
|
72
76
|
def _fetch_releases() -> list[dict]:
|
|
73
77
|
"""Lädt alle veröffentlichten Katalon-Releases."""
|
|
74
78
|
releases: list[dict] = []
|
|
@@ -119,15 +123,8 @@ def get_releases_between(installed_version: str, target_version: str) -> list[Re
|
|
|
119
123
|
]
|
|
120
124
|
|
|
121
125
|
|
|
122
|
-
def get_latest_release(
|
|
123
|
-
if use_cache and CACHE_PATH.exists():
|
|
124
|
-
age = time.time() - CACHE_PATH.stat().st_mtime
|
|
125
|
-
if age < CACHE_TTL_SECONDS:
|
|
126
|
-
return ReleaseMetadata.model_validate_json(CACHE_PATH.read_text())
|
|
127
|
-
|
|
126
|
+
def get_latest_release() -> ReleaseMetadata:
|
|
128
127
|
payload = _fetch_release_asset(tag=None)
|
|
129
|
-
CACHE_PATH.parent.mkdir(parents=True, exist_ok=True)
|
|
130
|
-
CACHE_PATH.write_text(json.dumps(payload))
|
|
131
128
|
return ReleaseMetadata.model_validate(payload)
|
|
132
129
|
|
|
133
130
|
|
|
@@ -481,6 +481,23 @@ def doctor(dir: Path = typer.Option(DEFAULT_DIR, "--dir")):
|
|
|
481
481
|
)
|
|
482
482
|
docker.compose(dir, "ps")
|
|
483
483
|
|
|
484
|
+
@app.command()
|
|
485
|
+
def check_updates(dir: Path = typer.Option(DEFAULT_DIR, "--dir")):
|
|
486
|
+
"""Prüft, ob eine neue Katalon-Version verfügbar ist."""
|
|
487
|
+
instance_dir_or_raise(dir)
|
|
488
|
+
state = InstallationState.load(dir)
|
|
489
|
+
try:
|
|
490
|
+
meta = release.get_latest_release()
|
|
491
|
+
except Exception as exc:
|
|
492
|
+
console.print(f"[red]✖ Release-Metadaten konnten nicht geladen werden: {exc}[/]")
|
|
493
|
+
raise typer.Exit(1) from exc
|
|
494
|
+
|
|
495
|
+
if meta.version == state.version:
|
|
496
|
+
console.print(f"[green]✔[/] Bereits auf aktueller Version {meta.version}.")
|
|
497
|
+
return
|
|
498
|
+
console.print(f"Update verfügbar: [bold]{state.version}[/] → [bold]{meta.version}[/]")
|
|
499
|
+
|
|
500
|
+
|
|
484
501
|
@app.command()
|
|
485
502
|
def update(
|
|
486
503
|
dir: Path = typer.Option(DEFAULT_DIR, "--dir"),
|
|
@@ -576,6 +593,15 @@ def update(
|
|
|
576
593
|
state.record(meta.version, meta.compose_revision, "update")
|
|
577
594
|
state.save(dir)
|
|
578
595
|
console.print(f"[green]✔[/] Update auf {meta.version} abgeschlossen.")
|
|
596
|
+
|
|
597
|
+
try:
|
|
598
|
+
notes = release.get_release_notes(f"v{meta.version}")
|
|
599
|
+
except Exception:
|
|
600
|
+
notes = ""
|
|
601
|
+
if notes:
|
|
602
|
+
console.rule("Changelog")
|
|
603
|
+
console.print(notes)
|
|
604
|
+
|
|
579
605
|
_print_next_steps(dir, state.base_url)
|
|
580
606
|
|
|
581
607
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|