Bump version to v1.5.2
This commit is contained in:
parent
1badb77173
commit
6ab8bdaadb
4 changed files with 68 additions and 25 deletions
19
CHANGELOG.md
19
CHANGELOG.md
|
|
@ -1,7 +1,24 @@
|
||||||
## [1.5.1] - 2025-07-09
|
## [1.5.2] - 2025-07-09
|
||||||
|
|
||||||
- Beschreibung...
|
- Beschreibung...
|
||||||
|
|
||||||
|
## [v1.5.2] - 2025-07-09
|
||||||
|
|
||||||
|
- Fehlerbehandlung bei `CHANGELOG.md`-Doppelungen hinzugefügt
|
||||||
|
- Signaturlogik robuster (SSH, GPG, fallback)
|
||||||
|
- Farbige Terminalausgabe verbessert
|
||||||
|
- dry-run Argument hinzugefügt:
|
||||||
|
* Versionsnummer wird berechnet ✅
|
||||||
|
* Änderungen (Version, Changelog, Commit, Tag, Push) werden nur angezeigt, nicht ausgeführt ✅
|
||||||
|
* Ausgabe erfolgt farbig und klar gegliedert ✅
|
||||||
|
|
||||||
|
|
||||||
|
## [1.5.1] - 2025-07-09
|
||||||
|
|
||||||
|
SSH-Commit-Signatur in versioning.py eingebaut
|
||||||
|
Automatischer Fallback auf GPG oder keine Signatur
|
||||||
|
Farbige Terminalausgabe zur Signaturmethode
|
||||||
|
Readme erweitert mit Setup-Anleitung
|
||||||
|
|
||||||
|
|
||||||
## [v1.5.0] – 2025-07-08
|
## [v1.5.0] – 2025-07-08
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ Die Datei versioning.py automatisiert:
|
||||||
Beispiel:
|
Beispiel:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python versioning.py create --level minor --push
|
python versioning.py --level minor --push
|
||||||
```
|
```
|
||||||
|
|
||||||
* Wählt automatisch SSH oder GPG zur Signatur
|
* Wählt automatisch SSH oder GPG zur Signatur
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
VERSION = "1.5.1"
|
VERSION = "1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -5,17 +5,22 @@ from datetime import datetime
|
||||||
import typer
|
import typer
|
||||||
import os
|
import os
|
||||||
|
|
||||||
app = typer.Typer()
|
|
||||||
|
|
||||||
CHANGELOG_FILE = Path("CHANGELOG.md")
|
CHANGELOG_FILE = Path("CHANGELOG.md")
|
||||||
VERSION_FILE = Path("__version__.py")
|
VERSION_FILE = Path("__version__.py")
|
||||||
VERSION_PATTERN = r"## \[v?(\d+\.\d+\.\d+)\]"
|
VERSION_PATTERN = r"## \[v?(\d+\.\d+\.\d+)\]"
|
||||||
|
|
||||||
def get_latest_version():
|
def get_latest_version():
|
||||||
|
try:
|
||||||
|
# Versuch über Git-Tags
|
||||||
|
tag = subprocess.check_output(["git", "describe", "--tags", "--abbrev=0"], stderr=subprocess.DEVNULL)
|
||||||
|
return tag.decode("utf-8").strip().lstrip("v")
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
# Fallback: Changelog
|
||||||
content = CHANGELOG_FILE.read_text(encoding="utf-8")
|
content = CHANGELOG_FILE.read_text(encoding="utf-8")
|
||||||
matches = re.findall(VERSION_PATTERN, content)
|
matches = re.findall(VERSION_PATTERN, content)
|
||||||
return matches[0] if matches else "0.0.0"
|
return matches[0] if matches else "0.0.0"
|
||||||
|
|
||||||
|
|
||||||
def bump_version(version: str, level: str = "patch") -> str:
|
def bump_version(version: str, level: str = "patch") -> str:
|
||||||
major, minor, patch = map(int, version.split("."))
|
major, minor, patch = map(int, version.split("."))
|
||||||
if level == "major":
|
if level == "major":
|
||||||
|
|
@ -31,7 +36,12 @@ def update_changelog(version: str):
|
||||||
date = datetime.now().strftime("%Y-%m-%d")
|
date = datetime.now().strftime("%Y-%m-%d")
|
||||||
new_entry = f"## [{version}] - {date}\n\n- Beschreibung...\n\n"
|
new_entry = f"## [{version}] - {date}\n\n- Beschreibung...\n\n"
|
||||||
content = CHANGELOG_FILE.read_text(encoding="utf-8")
|
content = CHANGELOG_FILE.read_text(encoding="utf-8")
|
||||||
|
|
||||||
|
if f"## [{version}]" in content:
|
||||||
|
typer.secho(f"ℹ️ Version {version} ist bereits im CHANGELOG.md vorhanden. Kein Eintrag hinzugefügt.", fg=typer.colors.BLUE)
|
||||||
|
else:
|
||||||
CHANGELOG_FILE.write_text(new_entry + content, encoding="utf-8")
|
CHANGELOG_FILE.write_text(new_entry + content, encoding="utf-8")
|
||||||
|
typer.secho(f"📄 CHANGELOG.md um Version {version} ergänzt.", fg=typer.colors.MAGENTA)
|
||||||
|
|
||||||
def is_ssh_signing_available() -> bool:
|
def is_ssh_signing_available() -> bool:
|
||||||
return Path("~/.ssh/id_ed25519").expanduser().exists()
|
return Path("~/.ssh/id_ed25519").expanduser().exists()
|
||||||
|
|
@ -51,20 +61,33 @@ def configure_signing(use_ssh: bool):
|
||||||
subprocess.run(["git", "config", "--global", "gpg.format", "openpgp"], check=True)
|
subprocess.run(["git", "config", "--global", "gpg.format", "openpgp"], check=True)
|
||||||
subprocess.run(["git", "config", "--global", "commit.gpgsign", "true"], check=True)
|
subprocess.run(["git", "config", "--global", "commit.gpgsign", "true"], check=True)
|
||||||
|
|
||||||
def create_git_tag(version: str, sign: bool):
|
def create(
|
||||||
if sign:
|
level: str = "patch",
|
||||||
subprocess.run(["git", "tag", "-s", f"v{version}", "-m", f"Release v{version}"], check=True)
|
push: bool = False,
|
||||||
else:
|
no_sign: bool = False,
|
||||||
subprocess.run(["git", "tag", "-a", f"v{version}", "-m", f"Release v{version} (unsigned)"], check=True)
|
dry_run: bool = False
|
||||||
|
):
|
||||||
def push_git_tag(version: str):
|
"""
|
||||||
subprocess.run(["git", "push"], check=True)
|
Erstellt eine neue Version mit optional signiertem Commit & Tag.
|
||||||
subprocess.run(["git", "push", "origin", f"v{version}"], check=True)
|
Optional: --push, --no-sign, --dry-run
|
||||||
|
"""
|
||||||
@app.command()
|
|
||||||
def create(level: str = "patch", push: bool = False, no_sign: bool = False):
|
|
||||||
current = get_latest_version()
|
current = get_latest_version()
|
||||||
new_version = bump_version(current, level)
|
new_version = bump_version(current, level)
|
||||||
|
|
||||||
|
if dry_run:
|
||||||
|
typer.secho("🔍 Dry-Run aktiviert – keine Dateien oder Git-Kommandos werden ausgeführt.\n", fg=typer.colors.YELLOW)
|
||||||
|
typer.echo(f"➡️ Aktuelle Version: {current}")
|
||||||
|
typer.echo(f"➡️ Neue Version: {new_version}")
|
||||||
|
typer.echo(f"➡️ Commit-Level: {level}")
|
||||||
|
typer.echo(f"➡️ Push nach GitHub: {'Ja' if push else 'Nein'}")
|
||||||
|
typer.echo(f"➡️ Signieren: {'Nein' if no_sign else 'Automatisch (SSH > GPG)'}")
|
||||||
|
|
||||||
|
date = datetime.now().strftime("%Y-%m-%d")
|
||||||
|
typer.echo("\n📄 Vorschlag für CHANGELOG-Eintrag:")
|
||||||
|
typer.echo(f"\n## [{new_version}] - {date}\n\n- Beschreibung...\n")
|
||||||
|
typer.secho("🚫 Dry-Run beendet.\n", fg=typer.colors.YELLOW)
|
||||||
|
return
|
||||||
|
|
||||||
write_version_file(new_version)
|
write_version_file(new_version)
|
||||||
update_changelog(new_version)
|
update_changelog(new_version)
|
||||||
subprocess.run(["git", "add", "."], check=True)
|
subprocess.run(["git", "add", "."], check=True)
|
||||||
|
|
@ -87,10 +110,14 @@ def create(level: str = "patch", push: bool = False, no_sign: bool = False):
|
||||||
commit_cmd.append("-S")
|
commit_cmd.append("-S")
|
||||||
subprocess.run(commit_cmd, check=True)
|
subprocess.run(commit_cmd, check=True)
|
||||||
|
|
||||||
create_git_tag(new_version, sign=use_signing)
|
if use_signing:
|
||||||
|
subprocess.run(["git", "tag", "-s", f"v{new_version}", "-m", f"Release v{new_version}"], check=True)
|
||||||
|
else:
|
||||||
|
subprocess.run(["git", "tag", "-a", f"v{new_version}", "-m", f"Release v{new_version} (unsigned)"], check=True)
|
||||||
|
|
||||||
if push:
|
if push:
|
||||||
push_git_tag(new_version)
|
subprocess.run(["git", "push"], check=True)
|
||||||
|
subprocess.run(["git", "push", "origin", f"v{new_version}"], check=True)
|
||||||
|
|
||||||
if use_signing:
|
if use_signing:
|
||||||
if signing_method == "ssh":
|
if signing_method == "ssh":
|
||||||
|
|
@ -100,6 +127,5 @@ def create(level: str = "patch", push: bool = False, no_sign: bool = False):
|
||||||
else:
|
else:
|
||||||
typer.secho(f"⚠️ Version {new_version} wurde ohne Signatur erstellt", fg=typer.colors.YELLOW)
|
typer.secho(f"⚠️ Version {new_version} wurde ohne Signatur erstellt", fg=typer.colors.YELLOW)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app()
|
typer.run(create)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue