Commit Graph

41 Commits

Author SHA1 Message Date
79ef5cca2d feat: list what the store holds for this repository 2026-09-08 17:35:24 +02:00
6389f3f1f5 feat: open psql in the database container 2026-09-08 17:35:23 +02:00
61f35f5ae4 feat: silence progress with --quiet 2026-09-08 17:35:22 +02:00
bb0a2cca44 refactor: name the modules after what they hold 2026-09-08 15:43:45 +02:00
a3c08f6eaa refactor: put every filesystem write behind one module 2026-09-08 15:43:44 +02:00
bbbca755be refactor: run git through the same layer as everything else 2026-09-08 15:43:43 +02:00
d7626d9f5e refactor: give every command we run a type of its own 2026-09-08 15:43:42 +02:00
3d06f7dcb0 refactor: pass invocation options down instead of reading a global 2026-09-08 15:43:41 +02:00
056da8b9b2 refactor: build one binary instead of a library and a binary 2026-09-08 15:43:37 +02:00
afa0b65c13 fix: stop --dry-run from writing to the working tree 2026-09-08 13:18:17 +02:00
4b1e9d68b0 feat: take the store root as an option 2026-09-08 12:00:52 +02:00
11ecd0ac89 refactor: return an exit code from main 2026-09-08 12:00:49 +02:00
260ef24174 feat: add link restore 2026-09-08 11:34:22 +02:00
15bcaafa85 feat: add exit-code to link check 2026-09-08 11:27:30 +02:00
b2a0c08256 feat: add verbose and dry run 2026-09-08 11:27:26 +02:00
ad269308cc feat: dump in every format import understands 2026-09-08 11:13:22 +02:00
77703485b9 feat: support custom format, plain sql and cluster dumps 2026-09-08 11:12:49 +02:00
6e44527a9a feat: deprecate compose subcommand 2026-09-07 13:11:36 +00:00
d11b0c68cd feat: drop dotenvy 2026-09-07 13:11:36 +00:00
9d63233d9a feat: detect the django and postgres services
ahab guessed that the django service is called django and the postgres one db,
falling back on AHAB_DJANGO_CONTAINER and AHAB_POSTGRES_CONTAINER. The standard
project layout happens to agree, but nothing enforces it, and a stack naming
them web and database could not use ahab without setting both variables.

One `docker compose config --format json` call, roughly 120ms, resolves the
stack even while it is down, and the services are identified from what they
are rather than what they are called:

- postgres is the service whose image is a postgres flavour, matching postg,
  timescale, pgvector or citus. Nothing else counts.
- django is the service that both builds an image and has
  DJANGO_SETTINGS_MODULE in its environment. A celery worker sharing the same
  build and env_file matches too, so published ports break the tie: the service
  answering requests wins.

Neither guess is allowed to be wrong quietly. No match, or two candidates that
cannot be told apart, is an error naming the services it looked at. There is no
variable to fall back on: both container variables are gone, along with the
guessed defaults they backed up, so an ambiguous stack is fixed in the compose
file rather than worked around per developer.

Every service lookup goes through these rules, so `compose exec` and the whole
django group agree on which container they mean.

POSTGRES_USER and POSTGRES_DB come off the detected service, so dropdb,
createdb, pg_restore and pg_dump stop assuming the role and database are both
literally `db`, falling back to that only when the service declares neither.

Note that env_file entries are merged into a service's environment, so
POSTGRES_* is not safe for identifying the database service: one such line in a
project's .env would make the django service match as well. That is why
identification uses the image and only credentials use the environment.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-07 13:11:35 +00:00
ef19f49c63 feat: add completions subcommand 2026-09-04 16:03:35 +02:00
8751c39cce style: run cargo fmt 2026-09-04 11:24:14 +02:00
54395f83e4 feat: add link command 2026-09-03 15:58:28 +02:00
2000204250 feat: update default service names 2026-02-24 08:52:08 -05:00
36fcc84881 feat: don't read DJANGO_SETTINGS_MODULE 2025-02-12 16:52:50 +01:00
e7308bd5c6 feat: control default services via env vars
Read default postgres compose service name and default django compose
service name from env variables.

AHAB_POSTGRES_CONTAINER - defaults to `appserver`
AHAB_DJANGO_CONATINER - defaults to `postgresdb`

Default values are there for 100% backwards compatibility.
2024-11-27 18:13:12 +01:00
3077420db2 feat!: respect COMPOSE_FILE env and remove docker command
Read COMPOSE_FILE from env and use it if it is set. Default is still
docker/local/docker-compose.yaml.

BREAKING CHANGE: Removed docker subcommand. Added deprecation notice to
compose subcommand.
2024-10-25 09:37:13 +02:00
2754a3bb30 feat: compile time completion generation
Removed `completion` command in favor of compile time completion
generation. This tool will only be build from source for the foreseeable
future so this makes sense for now.
2023-08-09 14:45:07 +02:00
e061d6dc6c feat: add compose ps command
Ps is new command scoped under compose. It is just proxy to `docker
compose ps`.
2023-08-09 13:59:58 +02:00
b45cfd3e0a feat: add compose exec and compose bash commands
Exec is new command scoped under compose. It allows sending commands
directly into appserver container. I will make this
customizable/controllable in the future.
2023-06-15 19:58:43 +02:00
5d45eccfef feat: add django test command
Added django's manage.py test command as a shortcut
2023-06-02 17:15:39 +02:00
de5e6b4d10 feat: rename commands and remove aliases in favour of completion
BREAKING CHANGE: changed commands as follows
D -> Docker
Dc -> Compose
Dj -> Django
Pg -> Postgres
2023-05-27 13:30:09 +02:00
61e7556997 feat: add clap_complete for generating completion files
`ahab generate <shell>` can now be used to generte completion files for
this tool.
2023-05-27 13:28:05 +02:00
a9a5e401dc refactor: create library with simple entrypoint in main
Create a library entrypoint 'src/lib.rs' and refactor binary entrypoint
'src/main.rs' accordingly.
2023-05-27 12:52:10 +02:00
7b64d6192a feat: docker_compose::start can be called with optional containers
Allow for starting just some of the containers. This will be needed for
implementing postgres::import where we'll need to stop all containers
and then only start postgres container.
2023-05-23 23:38:07 +02:00
286e16e7ce feat: finish django cli and add aliases
Implemented basic wanted functionality for django subcommands.

Added single or two letter aliases for all subsubcommands.
2023-05-23 22:49:18 +02:00
9c34f6ff59 chore: disable unused code check
Disable unused code checks while project is in development stage.
2023-05-21 23:48:24 +02:00
9f3cc86e3f feat: add basic error handling
Add anyhow::Result<()> return signature to all scripts and main.
2023-05-21 23:47:02 +02:00
4762c991a3 feat: finish docker compose cli
Implemented basic wanted functionality for docker compose subcommands.
We currently assume that docker-compose.yaml file is located in
local/docker/ folder.
2023-05-21 23:41:15 +02:00
eb232a93f8 feat: prepare initial cli layout
Made initial command scopes
d -> docker related commands
dc -> docker compose related commands
dj -> django related commands
pg -> postgres related commands
2023-05-21 22:40:34 +02:00
f6e9c7953a feat: initial commit
Add initial dependencies and change gitignore
2023-05-21 22:12:45 +02:00