Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/secretsync/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
from importlib.metadata import PackageNotFoundError, version

try:
__version__ = version("secretsync")
__version__ = version("secretsync-cli")
except PackageNotFoundError: # editable / source tree without install metadata
__version__ = "0.0.0"
7 changes: 7 additions & 0 deletions src/secretsync/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import click
from loguru import logger

from secretsync import __version__
from secretsync.application.apply import run_apply
from secretsync.application.health import (
HealthReport,
Expand Down Expand Up @@ -344,6 +345,12 @@ def connectors_cmd(ctx: AppContext) -> None:
raise SystemExit(EXIT_OK)


@cli.command("version")
def version_cmd() -> None:
"""Display the installed SecretSync CLI version."""
click.echo(__version__)


def main() -> None:
cli(prog_name="secretsync")

Expand Down
2 changes: 2 additions & 0 deletions src/secretsync/tui/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from textual.app import App
from textual.binding import Binding

from secretsync import __version__
from secretsync.application.apply import ApplyReport
from secretsync.application.services import AppServices
from secretsync.domain.models import Plan
Expand All @@ -18,6 +19,7 @@ class SecretSyncApp(App[ApplyReport | None]):

CSS_PATH = "secretsync.tcss"
TITLE = "SecretSync"
SUB_TITLE = f"v{__version__}"
BINDINGS = [
Binding("q", "quit_app", "Quit", show=True),
Binding("r", "reload", "Reload", show=True),
Expand Down
8 changes: 8 additions & 0 deletions tests/unit/test_cli.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import annotations

import json
from importlib.metadata import version

from click.testing import CliRunner

Expand All @@ -22,6 +23,13 @@ def test_help() -> None:
assert "plan" in result.output


def test_version() -> None:
runner = CliRunner()
result = runner.invoke(cli, ["version"])
assert result.exit_code == 0
assert result.output == f"{version('secretsync-cli')}\n"


def test_validate_cli_ok() -> None:
runner = CliRunner()
result = runner.invoke(
Expand Down
6 changes: 6 additions & 0 deletions tests/unit/test_tui_pilot.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import pytest

from secretsync import __version__
from secretsync.application.services import create_services
from secretsync.presentation.json import apply_to_dict, render_apply_json
from secretsync.tui.app import SecretSyncApp
Expand Down Expand Up @@ -33,6 +34,11 @@ def _screen_text(app: SecretSyncApp) -> str:
return "\n".join(parts)


def test_tui_shows_package_version_in_subtitle() -> None:
expected = f"v{__version__}"
assert expected == SecretSyncApp.SUB_TITLE


@pytest.mark.asyncio
async def test_pilot_config_plan_confirm_navigation() -> None:
services = create_services(FAKE_ENV)
Expand Down