requirements_file_dev :=  "requirements.dev.txt"
pyproject := "pyproject.toml"
releasenotes := "releasenotes.md"
requirements_file := "requirements.txt"
the_app := "teilchensammler_cli.main"
uv_export_options := "--frozen --format requirements.txt --quiet --no-install-project"

uv := require("uv")
git := require("git")
fj := require("fj")
prek := require("prek")
markdownlint := require("markdownlint-cli2")
mv := require("mv")
woodpecker-cli := require("woodpecker-cli")

[private]
default:
  @just --list

# create venv, install dependencies
setup:
  uv sync

# console to observe log messages
console:
  uv run textual console

# run app with logs going to console
run-console:
  uv run textual run --dev {{ the_app }}

# run the app
run:
  uv run python -m {{ the_app }}

# Update dependencies to new versions
update-deps:
  uv lock --upgrade
  uv sync

# export dependencies into requirements files
exports-deps:
  uv export {{ uv_export_options }} --output-file {{ requirements_file }}
  uv export {{ uv_export_options }} --output-file {{ requirements_file_dev }} --only-dev

# Run tests, ARGS are passed-through to pytest
test *ARGS:
  uv run pytest -m "not final" {{ ARGS }}

alltests *ARGS:
  uv run pytest {{ ARGS }}

# run tests and create coverage reports
coverage:
  uv run pytest -m "not final" --cov=src/ --cov-report term --cov-report xml --cov-report html --cov-config {{ pyproject }}

# lint python, markdown, wheel file names, prek config
lint:
  uv run ruff check .
  markdownlint-cli2 .
  uv run twine check --strict dist/*
  prek validate-config prek.toml
  woodpecker-cli lint .woodpecker/workflow.yaml

release *release_name: setup
  #!/usr/bin/env fish
  test -f {{ releasenotes }}; and set -l body "$(cat {{ releasenotes }})"; or begin echo Release notes are missing!; exit 2; end
  set -l tag (uv version --short --output-format text)

  just exports-deps
  git add {{ pyproject }} uv.lock {{ requirements_file }} {{ requirements_file_dev }}
  git commit -m "Release version $tag"
  git tag "v$tag"

  git push
  git push origin tag "v$tag"

  just build

  fj release create "v$tag: {{ release_name }}" --tag "v$tag" --attach dist/*.whl --body "$body"
  just upload
  mv {{ releasenotes }} {{ releasenotes }}.$tag

# builds a package
build:
  uv build --wheel --clear

# upload to Package Registry
upload:
  uv run twine upload --repository code.cbo --config-file ~/.config/pypirc dist/*.whl
