Consolidates the last duplicated derivations, and removes the ansible
tree along with the CLI surface that existed only to drive it.
Naming rules:
* agebd/names.py holds ServiceName -- the single definition of how a
service name is spelled in each context: dir_name, module_name,
ioc_name, systemd_unit_name and the case forms. The environment
suffix is deliberately not part of it; that stays a deploy-time
token applied to these base names.
* cli's Service model delegates every name_* property to it, so the
CLI and the CI scripts derive names the same way.
* scripts/ci/service_names.py emits the derived forms as shell
assignments, and deploy-and-restart-service.sh evals them instead of
carrying its own tr calls and its own copy of the systemd naming
convention. Values are shell-quoted, and an invalid name exits
non-zero emitting nothing, so an eval cannot leave empty variables
behind.
Registry lookups:
* agebd.subs.find_service_entry is now the only place that answers
"which registry entry is this service", used by read_ioc_port,
get_ioc_port.py and cli's ServiceRegistry. get_ioc_port.py no longer
parses the registry itself.
* That also settles a semantic split: ServiceRegistry matched names
case-sensitively while read_ioc_port did not. Both now match
case-insensitively via ServiceName, so 'tune', 'Tune' and 'TUNE'
resolve to the same service everywhere.
Ansible removal:
* ansible/ is deleted, along with cli/src/ioc.py, cli/src/core/
ansible.py, the IOC_ENV enum, the ansible and ansible-runner
dependencies, and docs/developer/ansible.md.
* This removes the 'agebd ioc install|start|restart' commands. They
were pure playbook wrappers, so they could not outlive the
playbooks; IOC install, start and restart now have no automation
path in this repo.
bin/start_service.sh keeps deriving its two name forms in bash, with a
comment saying why: it runs on the deploy host before the service venv
exists, so it cannot import agebd. It is the one deliberate exception.
Verified: get_ioc_port.py, cli's ServiceRegistry and agebd's renderer all
return 50007 for 'tune', 'Tune' and 'TUNE'; the shell-emitted names match
the committed on-disk layout for real services including the dashed
OpticsFF-X02S; the CLI runs with only the 'service' command left.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
71 lines
1.2 KiB
TOML
71 lines
1.2 KiB
TOML
[project]
|
|
name = "agebd-cli"
|
|
version = "0.1.0"
|
|
description = "CLI for SLS HLA Framework"
|
|
requires-python = "==3.10.*"
|
|
authors = [
|
|
{ name = "Benjamin Labrecque" }
|
|
]
|
|
|
|
dependencies = [
|
|
"agebd",
|
|
"copier>=9.10.3",
|
|
"pydantic>=2.13.4",
|
|
"pydantic-settings>=2.14.2",
|
|
"pytest-mock>=3.15.1",
|
|
"pyyaml>=6.0.3",
|
|
"typer>=0.23.2",
|
|
]
|
|
|
|
# Dev dependencies
|
|
[dependency-groups]
|
|
dev = [
|
|
"ipython>=8.39.0",
|
|
"pyright>=1.1.410",
|
|
"pytest>=8.4.2",
|
|
"pytest-env>=1.7.0",
|
|
"pytest-mock>=3.15.1",
|
|
"ruff>=0.15.19",
|
|
]
|
|
|
|
[tool.uv.sources]
|
|
agebd = { path = "../packages/agebd", editable = true }
|
|
|
|
[build-system]
|
|
requires = ["setuptools", "wheel"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project.scripts]
|
|
agebd = "main:cli"
|
|
|
|
[tool.setuptools]
|
|
package-dir = {"" = "src"}
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["src"]
|
|
|
|
[tool.uv]
|
|
package = true
|
|
|
|
[tool.pytest.ini_options]
|
|
# avoid pytest running tests inside tests/fixtures
|
|
testpaths = ["tests/tests"]
|
|
|
|
[tool.ruff]
|
|
include = [
|
|
"src/**/*.py",
|
|
"tests/**/*.py",
|
|
]
|
|
line-length = 100
|
|
|
|
[tool.ruff.lint]
|
|
extend-select = [
|
|
# use isort to sort imports
|
|
"I",
|
|
# remove unused imports
|
|
# "F401",
|
|
]
|
|
|
|
[tool.ruff.lint.isort]
|
|
known-first-party = ["agebd"]
|