--- description: Verify the test environment is configured correctly allowed-tools: [Read, Glob, Bash] --- # Test Setup — Environment Check Check the project's current setup state and guide the user through anything that's missing. ## Step 1: Check `settings.toml` Read `settings.toml` if it exists. If it does not exist, tell the user they need to create one. Explain the format: ```toml default_instance = "" [instances.] server = "" domain_suffix = "" protected_recipes = ["traefik", "backup-bot-two"] ``` - `default_instance` — which instance the skills use by default - `server` — the SSH hostname of the test server - `domain_suffix` — the domain suffix for app URLs (e.g. `myserver.example.com` means apps get deployed as `.myserver.example.com`) - `protected_recipes` — apps that `/test-context-reset` will never undeploy You can define multiple instances and switch between them with `/switch-default-instance`. ## Step 2: Check `test-ssh/` Check if `test-ssh/` exists and contains an `ssh-config` file and a key directory. If it does not exist, tell the user they need to create it: ``` test-ssh/ ├── ssh-config # SSH config with Host entries for each server └── test-ssh-keys/ └── # Private key(s) for the test server(s) ``` The `ssh-config` should have a `Host` entry for each server defined in `settings.toml`. Example: ``` Host myserver.example.com User root IdentityFile test-ssh-keys/mykey Port 22 ``` The `IdentityFile` path is relative to `test-ssh/`. ## Step 3: Check `maintained-recipes` Read `maintained-recipes` if it exists (also accept `maintained-recipes.md` as an alternative name). If neither exists, tell the user they can create one to list the recipes they maintain. It's a plain list of recipe names, one per line (markdown list format also accepted): ``` cryptpad lasuite-drive matrix-synapse ``` This file is used by `/recipe-overview` and `/recipe-test-all` to know which recipes to check. ## Step 4: Check SSH connectivity If `settings.toml` and `test-ssh/` both exist, test SSH connectivity to the default instance's server: ```bash ssh -F test-ssh/ssh-config -o ConnectTimeout=5 "echo ok" 2>&1 ``` Report whether the connection succeeded or failed. ## Step 5: Check abra Run `abra version` to confirm abra is installed and report the version. ## Step 6: Summary Print a summary of the project state: | Component | Status | |-----------|--------| | `settings.toml` | Found / Missing | | `test-ssh/` | Found / Missing | | `maintained-recipes` | Found (N recipes) / Missing | | SSH connectivity | OK / Failed / Not tested | | `abra` CLI | vX.Y.Z / Not found | If everything is set up, suggest the user start with `/recipe-overview` to see the current state of their recipes. If anything is missing, show the setup guide below. ## Setting up a new environment from scratch If the environment is not yet configured, walk the user through these steps: ### 1. Generate SSH keys Create the `test-ssh/` directory and generate a new keypair: ```bash mkdir -p test-ssh/test-ssh-keys ssh-keygen -t ed25519 -f test-ssh/test-ssh-keys/testkey -N "" -C "coopcloud-recipe-toolkit" ``` ### 2. Create a server The user needs a server (VPS, VM, etc.) running a supported Linux distribution. Once the server exists: - Upload the public key (`test-ssh/test-ssh-keys/testkey.pub`) to the server's `~/.ssh/authorized_keys` for the user they'll SSH in as (typically `root`) - Note the server's hostname, SSH port, and username ### 3. Create `test-ssh/ssh-config` Create `test-ssh/ssh-config` with a Host entry matching the server. Use absolute paths for the IdentityFile: ``` Host myserver.example.com User root IdentityFile /workspace/test-ssh/test-ssh-keys/testkey Port 22 ``` ### 4. Create `settings.toml` ```toml default_instance = "myinstance" [instances.myinstance] server = "myserver.example.com" domain_suffix = "myserver.example.com" protected_recipes = ["traefik", "backup-bot-two"] ``` The `domain_suffix` is used to construct app URLs — apps get deployed as `.`. ### 5. Create `maintained-recipes` List the recipes you want to maintain, one per line: ``` recipe-one recipe-two ``` ### 6. Verify and initialize Re-run `/test-setup` to confirm everything is working. If SSH connects successfully, ask Claude to make sure the server is properly initialized for Co-op Cloud (Docker Swarm enabled, `abra` server added, Traefik deployed). Then either: - **`/init-instance`** — Deploy all maintained recipes to the server at once - **`/recipe-deploy `** — Deploy one recipe at a time