Files
dev_tools/README.md
T
mathias 6b6c031242 Restore connections.env without triggering post-checkout hooks
git checkout fires post-checkout even for a single-file checkout
(flag=0), which was tripping an rsync hook in the target repo. Read
the committed blob with git cat-file instead and write it directly -
plumbing, no worktree update, no hooks - with a test that plants a
post-checkout hook and asserts it never runs.
2026-09-17 16:07:48 +02:00

67 lines
1.9 KiB
Markdown

# dev_tools
CLI tool to start and stop a local RCC test environment. It manages a Docker Compose service and toggles environment variable files between local and CI database configurations.
## Prerequisites
- Rust toolchain (stable)
- Docker with Compose plugin
## Configuration
The tool reads from a dotenv-style file at `~/.config/rcc/dev`. The following variables are required:
| Variable | Description |
|---|---|
| `DOCKER_SERVICE` | Name of the Docker container to check if it is running |
| `DOCKER_DIR` | Path to the Docker Compose directory, relative to `$HOME` |
| `<PROJECT>_DIR` | Absolute path to the project directory (one per project, e.g. `FOO_DIR`) |
Example `~/.config/rcc/dev`:
```
DOCKER_SERVICE=my-container
DOCKER_DIR=repos/docker/local
FOO_DIR=/home/user/repos/foo
```
## Build & Install
```bash
cargo build --release
# or install directly into ~/.cargo/bin
cargo install --path .
```
## Usage
```
dev_tools <project> <up|down>
```
| Argument | Description |
|---|---|
| `project` | Project key (matches `<PROJECT>_DIR` in the config, case-insensitive) |
| `up` / `down` | Start or stop the environment |
### Examples
```bash
# Start the environment for project "foo"
dev_tools foo up
# Stop it
dev_tools foo down
```
## What it does
1. Starts or stops the Docker Compose service defined by `DOCKER_SERVICE` / `DOCKER_DIR`.
2. `conf/global/connections.env`: `up` toggles it to the CI credentials and marks it `git update-index --assume-unchanged` to avoid accidental commits; `down` unmarks it and restores it to its committed state by reading the committed blob with `git cat-file` (rather than computing the reverse toggle or running `git checkout`, which would fire the repo's `post-checkout` hook), so it's guaranteed byte-for-byte identical to HEAD.
3. Toggles database connection entries in `<PROJECT_DIR>/conf/local/.env`: `up` switches the connection to `ci`, `down` switches it to `staging`.
## Tests
```bash
cargo test
```