add generate and read code from claude
This commit is contained in:
333
verification.md
Normal file
333
verification.md
Normal file
@@ -0,0 +1,333 @@
|
||||
# Verification Steps for sync-git-project.sh
|
||||
|
||||
This document outlines testing steps and edge cases for verifying the enhanced `sync-git-project.sh` script.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before testing, ensure you have:
|
||||
- A test server with SSH access
|
||||
- A git repository on the server
|
||||
- `sshpass` installed locally
|
||||
- Docker installed and running
|
||||
- `make` available
|
||||
|
||||
## Test Cases
|
||||
|
||||
### 1. Clone Test
|
||||
**Purpose:** Verify git clone works with credentials
|
||||
|
||||
**Steps:**
|
||||
1. Run `./sync-project.sh --git`
|
||||
2. Provide valid server credentials
|
||||
3. Verify repository is cloned to LOCAL_FOLDER
|
||||
|
||||
**Expected:** Repository cloned successfully, cd into project works
|
||||
|
||||
**Edge cases:**
|
||||
- Wrong SSH credentials → Should show error and exit
|
||||
- Repository doesn't exist → Should show clear error message
|
||||
- LOCAL_FOLDER already exists → Git will fail with appropriate error
|
||||
|
||||
---
|
||||
|
||||
### 2. .npmrc Check
|
||||
**Purpose:** Test with/without .npmrc file
|
||||
|
||||
**Steps:**
|
||||
1. Clone a project without .npmrc
|
||||
2. Verify script pauses and prompts user
|
||||
3. Add .npmrc file
|
||||
4. Press Enter to continue
|
||||
|
||||
**Expected:** Script pauses with clear message, continues after file added
|
||||
|
||||
---
|
||||
|
||||
### 3. Docker Env Copy
|
||||
**Purpose:** Verify .docker/config/.env.local exists and copies correctly
|
||||
|
||||
**Steps:**
|
||||
1. Ensure .docker/config/.env.local exists in repo
|
||||
2. Run setup
|
||||
3. Verify .env created in project root
|
||||
|
||||
**Expected:** `.env` copied from `.docker/config/.env.local`
|
||||
|
||||
**Edge cases:**
|
||||
- .docker/config/.env.local missing → Pause and prompt user
|
||||
|
||||
---
|
||||
|
||||
### 4. Clean Docker Volumes
|
||||
**Purpose:** Verify Docker volumes are cleaned before setup
|
||||
|
||||
**Steps:**
|
||||
1. Have existing Docker containers and volumes running
|
||||
2. Run setup
|
||||
3. Verify all containers stopped and removed
|
||||
4. Verify all volumes removed
|
||||
|
||||
**Expected:**
|
||||
- `docker ps -a` shows no containers
|
||||
- `docker volume ls` shows no volumes
|
||||
|
||||
**Edge cases:**
|
||||
- No containers running → Commands succeed silently
|
||||
- No volumes exist → Commands succeed silently
|
||||
|
||||
---
|
||||
|
||||
### 5. Docker Setup
|
||||
**Purpose:** Test with/without docker-setup.sh present
|
||||
|
||||
**Steps:**
|
||||
1. Test with project containing docker-setup.sh
|
||||
2. Test with project missing docker-setup.sh
|
||||
|
||||
**Expected:**
|
||||
- With script: Runs `sh docker-setup.sh`
|
||||
- Without script: Pauses and notifies user
|
||||
|
||||
---
|
||||
|
||||
### 6. Server .env Copy
|
||||
**Purpose:** Verify scp copies .env to .server.env
|
||||
|
||||
**Steps:**
|
||||
1. Ensure .env exists on server
|
||||
2. Run setup
|
||||
3. Verify .server.env created locally
|
||||
4. Run `git ls-files -v | grep .server.env` to verify assume-unchanged
|
||||
|
||||
**Expected:** .server.env copied and marked with 'h' (assume-unchanged)
|
||||
|
||||
**Edge cases:**
|
||||
- Server .env missing → Pause and prompt user
|
||||
|
||||
---
|
||||
|
||||
### 7. .env Modification
|
||||
**Purpose:** Check APP_NAME/APP_KEY extraction and insertion
|
||||
|
||||
**Steps:**
|
||||
1. Verify .server.env contains APP_NAME and APP_KEY
|
||||
2. Run setup
|
||||
3. Check local .env for updated values
|
||||
|
||||
**Expected:** APP_NAME and APP_KEY from .server.env appear in local .env
|
||||
|
||||
**Edge cases:**
|
||||
- APP_NAME missing in .server.env → Yellow warning, continues
|
||||
- APP_KEY missing in .server.env → Yellow warning, continues
|
||||
|
||||
---
|
||||
|
||||
### 8. .env.prod.local Creation
|
||||
**Purpose:** Verify all 5 variables populated correctly
|
||||
|
||||
**Steps:**
|
||||
1. Run setup with valid server credentials
|
||||
2. Check .env.prod.local contents
|
||||
|
||||
**Expected file contents:**
|
||||
```
|
||||
PROD_HOST="<extracted from SERVER_HOST>"
|
||||
PROD_USER="<extracted from SERVER_HOST>"
|
||||
PROD_DB_NAME="<DB_DATABASE from .server.env>"
|
||||
PROD_DB_USER="<DB_USERNAME from .server.env>"
|
||||
PROD_DB_PASS="<DB_PASSWORD from .server.env>"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 9. Helper Scripts
|
||||
**Purpose:** Verify ssh.sh created correctly
|
||||
|
||||
**Steps:**
|
||||
1. Run setup
|
||||
2. Check ssh.sh exists with executable permission
|
||||
3. Verify ssh.sh contains correct variables
|
||||
4. Check .gitignore includes ssh.sh
|
||||
|
||||
**Expected:** ssh.sh created with embedded credentials, added to .gitignore
|
||||
|
||||
---
|
||||
|
||||
### 10. Lazygit Upload
|
||||
**Purpose:** Verify upload and assume-unchanged on both server and local
|
||||
|
||||
**Steps:**
|
||||
1. Run setup
|
||||
2. SSH to server, check lazygit exists in project
|
||||
3. On server: `git ls-files -v | grep lazygit` shows 'h'
|
||||
4. Locally: `git ls-files -v | grep lazygit` shows 'h'
|
||||
|
||||
**Expected:** lazygit uploaded and marked assume-unchanged on both ends
|
||||
|
||||
---
|
||||
|
||||
### 11. SSH Keys - Case A
|
||||
**Purpose:** Server with only public key
|
||||
|
||||
**Setup:**
|
||||
```bash
|
||||
# On server
|
||||
rm ~/.ssh/id_rsa
|
||||
# Keep ~/.ssh/id_rsa.pub
|
||||
```
|
||||
|
||||
**Steps:**
|
||||
1. Run setup
|
||||
2. Verify staging.key created locally
|
||||
3. Verify both keys uploaded to server
|
||||
4. Verify public key added to authorized_keys
|
||||
|
||||
**Expected:** New keypair generated, uploaded, authorized
|
||||
|
||||
---
|
||||
|
||||
### 12. SSH Keys - Case B
|
||||
**Purpose:** Server with both keys
|
||||
|
||||
**Setup:**
|
||||
```bash
|
||||
# Server has both ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub
|
||||
```
|
||||
|
||||
**Steps:**
|
||||
1. Run setup
|
||||
2. Verify staging.key downloaded (matches server's id_rsa)
|
||||
3. Verify public key in authorized_keys
|
||||
|
||||
**Expected:** Private key downloaded as staging.key
|
||||
|
||||
---
|
||||
|
||||
### 13. SSH Keys - Case C
|
||||
**Purpose:** Server with neither key
|
||||
|
||||
**Setup:**
|
||||
```bash
|
||||
# On server
|
||||
rm -rf ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
|
||||
# or rm -rf ~/.ssh
|
||||
```
|
||||
|
||||
**Steps:**
|
||||
1. Run setup
|
||||
2. Verify ~/.ssh created on server
|
||||
3. Verify both keys uploaded
|
||||
4. Verify authorized_keys created/updated
|
||||
|
||||
**Expected:** New keypair generated, ~/.ssh created, keys uploaded
|
||||
|
||||
---
|
||||
|
||||
### 14. staging.key Assume-Unchanged
|
||||
**Purpose:** Verify git tracking status
|
||||
|
||||
**Steps:**
|
||||
1. After setup, run: `git ls-files -v | grep staging.key`
|
||||
|
||||
**Expected:** Output shows 'h staging.key' (lowercase h = assume-unchanged)
|
||||
|
||||
---
|
||||
|
||||
### 15. SSH-Add
|
||||
**Purpose:** Verify key added to agent
|
||||
|
||||
**Steps:**
|
||||
1. Ensure ssh-agent is running: `eval $(ssh-agent -s)`
|
||||
2. Run setup
|
||||
3. Check: `ssh-add -l` should show staging.key
|
||||
|
||||
**Expected:** staging.key fingerprint shown in ssh-add -l
|
||||
|
||||
**Edge cases:**
|
||||
- ssh-agent not running → Pause with instructions
|
||||
|
||||
---
|
||||
|
||||
### 16. db:wipe
|
||||
**Purpose:** Verify database wipe works
|
||||
|
||||
**Steps:**
|
||||
1. Ensure mtc-pharmacy-web container is running
|
||||
2. Run setup
|
||||
3. Verify db:wipe command executes
|
||||
|
||||
**Expected:** Database wiped successfully
|
||||
|
||||
**Edge cases:**
|
||||
- Container not running → Pause with instructions
|
||||
|
||||
---
|
||||
|
||||
### 17. db-sync
|
||||
**Purpose:** Verify make db-sync runs
|
||||
|
||||
**Steps:**
|
||||
1. Ensure Makefile exists with db-sync target
|
||||
2. Ensure .env.prod.local has correct values
|
||||
3. Run setup
|
||||
|
||||
**Expected:** Database synced from staging
|
||||
|
||||
**Edge cases:**
|
||||
- Makefile missing → Error from make
|
||||
- db-sync target missing → Error from make
|
||||
- Connection fails → Pause with instructions
|
||||
|
||||
---
|
||||
|
||||
## Edge Cases Summary
|
||||
|
||||
| Scenario | Expected Behavior |
|
||||
|----------|-------------------|
|
||||
| Clone fails (wrong credentials) | Red error, exit |
|
||||
| Clone fails (repo doesn't exist) | Red error, exit |
|
||||
| .npmrc missing | Yellow pause, wait for user |
|
||||
| .docker/config/.env.local missing | Red error, pause, retry |
|
||||
| No Docker containers/volumes | Commands succeed silently |
|
||||
| docker-setup.sh missing | Yellow pause, notify user |
|
||||
| Server .env missing | Red error, pause, retry |
|
||||
| .server.env malformed | get_env_value returns empty, yellow warning |
|
||||
| ~/.ssh doesn't exist on server | Create directory (Case C) |
|
||||
| authorized_keys doesn't exist | Create with public key |
|
||||
| staging.key assume-unchanged fails | Suppress error, continue |
|
||||
| ssh-agent not running | Yellow warning, instructions, pause |
|
||||
| Docker container not running | Yellow warning, pause, retry |
|
||||
| make db-sync fails | Yellow warning, pause |
|
||||
|
||||
## Manual Verification Checklist
|
||||
|
||||
- [ ] Clone test passes
|
||||
- [ ] .npmrc check pauses correctly
|
||||
- [ ] Docker env copied
|
||||
- [ ] Docker volumes cleaned
|
||||
- [ ] docker-setup.sh runs or notifies
|
||||
- [ ] Server .env copied to .server.env
|
||||
- [ ] .server.env marked assume-unchanged
|
||||
- [ ] APP_NAME/APP_KEY extracted and set
|
||||
- [ ] .env.prod.local has all 5 variables
|
||||
- [ ] ssh.sh created with correct variables
|
||||
- [ ] ssh.sh in .gitignore
|
||||
- [ ] staging.key in .gitignore
|
||||
- [ ] lazygit uploaded and assume-unchanged
|
||||
- [ ] SSH key management works (test appropriate case)
|
||||
- [ ] staging.key marked assume-unchanged
|
||||
- [ ] ssh-add succeeds
|
||||
- [ ] db:wipe runs
|
||||
- [ ] db-sync runs
|
||||
|
||||
## Cleanup After Testing
|
||||
|
||||
```bash
|
||||
# Remove test project locally
|
||||
rm -rf LOCAL_FOLDER
|
||||
|
||||
# On server, if you modified SSH keys:
|
||||
# Restore original keys or regenerate
|
||||
|
||||
# Remove any test databases
|
||||
```
|
||||
Reference in New Issue
Block a user