Skip to content

Commit 6acf125

Browse files
committed
feat: support frontend version
1 parent 22693ca commit 6acf125

2 files changed

Lines changed: 49 additions & 10 deletions

File tree

fast_dev_cli/cli.py

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,26 @@ def read_version_from_file(
272272
return "0.0.0"
273273

274274

275+
def _get_frontend_version() -> tuple[Path, str] | None:
276+
try:
277+
frontend_version_file = Project.get_work_dir("package.json", be_file=True)
278+
except EnvError:
279+
return None
280+
try:
281+
from asynctor.jsons import json_loads
282+
except ImportError:
283+
from json import loads as json_loads
284+
content = frontend_version_file.read_bytes()
285+
metadata: dict[str, str] = json_loads(content) # ty:ignore[invalid-assignment]
286+
try:
287+
current_version = metadata["version"]
288+
except (KeyError, TypeError):
289+
return None
290+
with contextlib.suppress(ValueError):
291+
frontend_version_file = frontend_version_file.relative_to(Path.cwd())
292+
return frontend_version_file, current_version
293+
294+
275295
@overload
276296
def get_current_version(
277297
verbose: bool = False,
@@ -310,11 +330,20 @@ def get_current_version(
310330
return out
311331
toml_text = work_dir = None
312332
if package_name is None:
313-
work_dir = Project.get_work_dir()
314-
toml_text = Project.load_toml_text()
315-
doc = tomllib.loads(toml_text)
316-
project_name = doc.get("project", {}).get("name", work_dir.name)
317-
package_name = re.sub(r"[- ]", "_", project_name)
333+
try:
334+
work_dir = Project.get_work_dir()
335+
except EnvError as e:
336+
if (res := _get_frontend_version()) is None:
337+
raise e
338+
current_version = res[1]
339+
if check_version:
340+
return False, current_version
341+
return current_version
342+
else:
343+
toml_text = Project.load_toml_text()
344+
doc = tomllib.loads(toml_text)
345+
project_name = doc.get("project", {}).get("name", work_dir.name)
346+
package_name = re.sub(r"[- ]", "_", project_name)
318347
local_version = read_version_from_file(package_name, work_dir, toml_text)
319348
try:
320349
installed_version = importlib_metadata.version(package_name)
@@ -549,12 +578,23 @@ def run(self) -> None:
549578
echo("You may want to pin tag by `fast tag`")
550579

551580

581+
def _echo_version(version_file: Any, value: str) -> None:
582+
styled = typer.style(value, bold=True)
583+
echo(f"Version value in {version_file}: " + styled)
584+
585+
552586
@cli.command()
553587
def version() -> None:
554588
"""Show the version of this tool"""
555589
echo("Fast Dev Cli Version: " + typer.style(__version__, fg=typer.colors.BLUE))
556590
with contextlib.suppress(FileNotFoundError, KeyError):
557-
toml_text = Project.load_toml_text()
591+
try:
592+
toml_text = Project.load_toml_text()
593+
except EnvError:
594+
if (res := _get_frontend_version()) is not None:
595+
_echo_version(*res)
596+
return
597+
raise
558598
doc = tomllib.loads(toml_text)
559599
if value := doc.get("project", {}).get("version", ""):
560600
styled = typer.style(value, bold=True, fg=typer.colors.CYAN)
@@ -569,8 +609,7 @@ def version() -> None:
569609
for line in text.splitlines():
570610
if line.strip().startswith(varname):
571611
value = line.split("=", 1)[-1].strip().strip('"').strip("'")
572-
styled = typer.style(value, bold=True)
573-
echo(f"Version value in {version_file}: " + styled)
612+
_echo_version(version_file, value)
574613
break
575614

576615

pdm.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)