nvoi 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.claude/todo/refactor/00-overview.md +171 -0
- data/.claude/todo/refactor/01-objects.md +96 -0
- data/.claude/todo/refactor/02-utils.md +143 -0
- data/.claude/todo/refactor/03-external-cloud.md +164 -0
- data/.claude/todo/refactor/04-external-dns.md +104 -0
- data/.claude/todo/refactor/05-external.md +133 -0
- data/.claude/todo/refactor/06-cli.md +123 -0
- data/.claude/todo/refactor/07-cli-deploy-command.md +177 -0
- data/.claude/todo/refactor/08-cli-deploy-steps.md +201 -0
- data/.claude/todo/refactor/09-cli-delete-command.md +169 -0
- data/.claude/todo/refactor/10-cli-exec-command.md +157 -0
- data/.claude/todo/refactor/11-cli-credentials-command.md +190 -0
- data/.claude/todo/refactor/12-cli-db-command.md +128 -0
- data/.claude/todo/refactor/_target.md +79 -0
- data/.claude/todo/refactor-execution/00-entrypoint.md +49 -0
- data/.claude/todo/refactor-execution/01-objects.md +42 -0
- data/.claude/todo/refactor-execution/02-utils.md +41 -0
- data/.claude/todo/refactor-execution/03-external-cloud.md +38 -0
- data/.claude/todo/refactor-execution/04-external-dns.md +35 -0
- data/.claude/todo/refactor-execution/05-external-other.md +46 -0
- data/.claude/todo/refactor-execution/06-cli-deploy.md +45 -0
- data/.claude/todo/refactor-execution/07-cli-delete.md +43 -0
- data/.claude/todo/refactor-execution/08-cli-exec.md +30 -0
- data/.claude/todo/refactor-execution/09-cli-credentials.md +34 -0
- data/.claude/todo/refactor-execution/10-cli-db.md +31 -0
- data/.claude/todo/refactor-execution/11-cli-router.md +44 -0
- data/.claude/todo/refactor-execution/12-cleanup.md +120 -0
- data/.claude/todo/refactor-execution/_monitoring-strategy.md +126 -0
- data/.claude/todo/scaleway.impl.md +644 -0
- data/.claude/todo/scaleway.reference.md +520 -0
- data/.claude/todos.md +550 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +46 -5
- data/Rakefile +1 -1
- data/doc/config-schema.yaml +44 -11
- data/examples/golang/deploy.enc +0 -0
- data/examples/golang/main.go +18 -0
- data/exe/nvoi +3 -1
- data/ingest +0 -0
- data/lib/nvoi/cli/config/command.rb +219 -0
- data/lib/nvoi/cli/credentials/edit/command.rb +384 -0
- data/lib/nvoi/cli/credentials/show/command.rb +35 -0
- data/lib/nvoi/cli/db/command.rb +308 -0
- data/lib/nvoi/cli/delete/command.rb +75 -0
- data/lib/nvoi/cli/delete/steps/detach_volumes.rb +98 -0
- data/lib/nvoi/cli/delete/steps/teardown_dns.rb +50 -0
- data/lib/nvoi/cli/delete/steps/teardown_firewall.rb +46 -0
- data/lib/nvoi/cli/delete/steps/teardown_network.rb +30 -0
- data/lib/nvoi/cli/delete/steps/teardown_server.rb +50 -0
- data/lib/nvoi/cli/delete/steps/teardown_tunnel.rb +44 -0
- data/lib/nvoi/cli/delete/steps/teardown_volume.rb +61 -0
- data/lib/nvoi/cli/deploy/command.rb +184 -0
- data/lib/nvoi/cli/deploy/steps/build_image.rb +27 -0
- data/lib/nvoi/cli/deploy/steps/cleanup_images.rb +42 -0
- data/lib/nvoi/cli/deploy/steps/configure_tunnel.rb +102 -0
- data/lib/nvoi/cli/deploy/steps/deploy_service.rb +399 -0
- data/lib/nvoi/cli/deploy/steps/provision_network.rb +44 -0
- data/lib/nvoi/cli/deploy/steps/provision_server.rb +143 -0
- data/lib/nvoi/cli/deploy/steps/provision_volume.rb +171 -0
- data/lib/nvoi/cli/deploy/steps/setup_k3s.rb +490 -0
- data/lib/nvoi/cli/exec/command.rb +173 -0
- data/lib/nvoi/cli/logs/command.rb +66 -0
- data/lib/nvoi/cli/onboard/command.rb +761 -0
- data/lib/nvoi/cli/unlock/command.rb +72 -0
- data/lib/nvoi/cli.rb +339 -141
- data/lib/nvoi/config_api/actions/app.rb +53 -0
- data/lib/nvoi/config_api/actions/compute_provider.rb +55 -0
- data/lib/nvoi/config_api/actions/database.rb +70 -0
- data/lib/nvoi/config_api/actions/domain_provider.rb +40 -0
- data/lib/nvoi/config_api/actions/env.rb +32 -0
- data/lib/nvoi/config_api/actions/init.rb +67 -0
- data/lib/nvoi/config_api/actions/secret.rb +32 -0
- data/lib/nvoi/config_api/actions/server.rb +66 -0
- data/lib/nvoi/config_api/actions/service.rb +52 -0
- data/lib/nvoi/config_api/actions/volume.rb +40 -0
- data/lib/nvoi/config_api/base.rb +38 -0
- data/lib/nvoi/config_api/result.rb +26 -0
- data/lib/nvoi/config_api.rb +93 -0
- data/lib/nvoi/errors.rb +68 -50
- data/lib/nvoi/external/cloud/aws.rb +450 -0
- data/lib/nvoi/external/cloud/base.rb +99 -0
- data/lib/nvoi/external/cloud/factory.rb +48 -0
- data/lib/nvoi/external/cloud/hetzner.rb +402 -0
- data/lib/nvoi/external/cloud/scaleway.rb +559 -0
- data/lib/nvoi/external/cloud.rb +15 -0
- data/lib/nvoi/external/containerd.rb +86 -0
- data/lib/nvoi/external/database/mysql.rb +84 -0
- data/lib/nvoi/external/database/postgres.rb +82 -0
- data/lib/nvoi/external/database/provider.rb +65 -0
- data/lib/nvoi/external/database/sqlite.rb +72 -0
- data/lib/nvoi/external/database.rb +22 -0
- data/lib/nvoi/external/dns/cloudflare.rb +310 -0
- data/lib/nvoi/external/kubectl.rb +65 -0
- data/lib/nvoi/external/ssh.rb +106 -0
- data/lib/nvoi/objects/config_override.rb +60 -0
- data/lib/nvoi/objects/configuration.rb +483 -0
- data/lib/nvoi/objects/database.rb +56 -0
- data/lib/nvoi/objects/dns.rb +14 -0
- data/lib/nvoi/objects/firewall.rb +11 -0
- data/lib/nvoi/objects/network.rb +11 -0
- data/lib/nvoi/objects/server.rb +14 -0
- data/lib/nvoi/objects/service_spec.rb +26 -0
- data/lib/nvoi/objects/tunnel.rb +14 -0
- data/lib/nvoi/objects/volume.rb +17 -0
- data/lib/nvoi/utils/config_loader.rb +172 -0
- data/lib/nvoi/utils/constants.rb +61 -0
- data/lib/nvoi/{credentials/manager.rb → utils/credential_store.rb} +16 -16
- data/lib/nvoi/{credentials → utils}/crypto.rb +8 -5
- data/lib/nvoi/{config → utils}/env_resolver.rb +10 -2
- data/lib/nvoi/utils/logger.rb +84 -0
- data/lib/nvoi/{config/naming.rb → utils/namer.rb} +37 -25
- data/lib/nvoi/{deployer → utils}/retry.rb +23 -3
- data/lib/nvoi/utils/templates.rb +62 -0
- data/lib/nvoi/version.rb +1 -1
- data/lib/nvoi.rb +27 -55
- data/templates/app-ingress.yaml.erb +3 -1
- data/templates/error-backend.yaml.erb +134 -0
- metadata +121 -44
- data/examples/golang/deploy.yml +0 -54
- data/lib/nvoi/cloudflare/client.rb +0 -287
- data/lib/nvoi/config/config.rb +0 -248
- data/lib/nvoi/config/loader.rb +0 -102
- data/lib/nvoi/config/ssh_keys.rb +0 -82
- data/lib/nvoi/config/types.rb +0 -274
- data/lib/nvoi/constants.rb +0 -59
- data/lib/nvoi/credentials/editor.rb +0 -272
- data/lib/nvoi/deployer/cleaner.rb +0 -36
- data/lib/nvoi/deployer/image_builder.rb +0 -23
- data/lib/nvoi/deployer/infrastructure.rb +0 -126
- data/lib/nvoi/deployer/orchestrator.rb +0 -146
- data/lib/nvoi/deployer/service_deployer.rb +0 -311
- data/lib/nvoi/deployer/tunnel_manager.rb +0 -57
- data/lib/nvoi/deployer/types.rb +0 -8
- data/lib/nvoi/k8s/renderer.rb +0 -44
- data/lib/nvoi/k8s/templates.rb +0 -29
- data/lib/nvoi/logger.rb +0 -72
- data/lib/nvoi/providers/aws.rb +0 -403
- data/lib/nvoi/providers/base.rb +0 -111
- data/lib/nvoi/providers/hetzner.rb +0 -288
- data/lib/nvoi/providers/hetzner_client.rb +0 -170
- data/lib/nvoi/remote/docker_manager.rb +0 -203
- data/lib/nvoi/remote/ssh_executor.rb +0 -72
- data/lib/nvoi/remote/volume_manager.rb +0 -103
- data/lib/nvoi/service/delete.rb +0 -234
- data/lib/nvoi/service/deploy.rb +0 -80
- data/lib/nvoi/service/exec.rb +0 -144
- data/lib/nvoi/service/provider.rb +0 -36
- data/lib/nvoi/steps/application_deployer.rb +0 -26
- data/lib/nvoi/steps/database_provisioner.rb +0 -60
- data/lib/nvoi/steps/k3s_cluster_setup.rb +0 -105
- data/lib/nvoi/steps/k3s_provisioner.rb +0 -351
- data/lib/nvoi/steps/server_provisioner.rb +0 -43
- data/lib/nvoi/steps/services_provisioner.rb +0 -29
- data/lib/nvoi/steps/tunnel_configurator.rb +0 -66
- data/lib/nvoi/steps/volume_provisioner.rb +0 -154
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Refactor Execution Entrypoint
|
|
2
|
+
|
|
3
|
+
## Strategy
|
|
4
|
+
|
|
5
|
+
**Clean slate rebuild.** Not migration.
|
|
6
|
+
|
|
7
|
+
- **Reference codebase:** `/Users/ben/Desktop/nvoi-rb/` (working code, read-only)
|
|
8
|
+
- **Worktree:** `/Users/ben/Desktop/nvoi-rb-refactor/` (clean slate, write here)
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# Clear worktree lib/nvoi/ (keep exe/, test/, templates/, etc.)
|
|
14
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
15
|
+
rm -rf lib/nvoi
|
|
16
|
+
mkdir lib/nvoi
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Execution Order
|
|
20
|
+
|
|
21
|
+
Each phase: **build → validate → test → commit**
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
Phase 1: 01-objects.md → Build objects/ from scratch
|
|
25
|
+
Phase 2: 02-utils.md → Build utils/ from scratch
|
|
26
|
+
Phase 3: 03-external-cloud.md → Build external/cloud/
|
|
27
|
+
Phase 4: 04-external-dns.md → Build external/dns/
|
|
28
|
+
Phase 5: 05-external-other.md → Build external/ssh, kubectl, containerd, database
|
|
29
|
+
Phase 6: 06-cli-deploy.md → Build cli/deploy/
|
|
30
|
+
Phase 7: 07-cli-delete.md → Build cli/delete/
|
|
31
|
+
Phase 8: 08-cli-exec.md → Build cli/exec/
|
|
32
|
+
Phase 9: 09-cli-credentials.md → Build cli/credentials/
|
|
33
|
+
Phase 10: 10-cli-db.md → Build cli/db/
|
|
34
|
+
Phase 11: 11-cli-router.md → Build cli.rb
|
|
35
|
+
Phase 12: 12-cleanup.md → Final wiring, lib/nvoi.rb, version.rb
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Per-Phase Protocol
|
|
39
|
+
|
|
40
|
+
1. **Build** - Create new files reading from reference
|
|
41
|
+
2. **Validate** - User reviews structure
|
|
42
|
+
3. **Test** - `bundle exec rake test`
|
|
43
|
+
4. **Commit** - Only after tests pass
|
|
44
|
+
|
|
45
|
+
## Current Step
|
|
46
|
+
|
|
47
|
+
**NOT STARTED**
|
|
48
|
+
|
|
49
|
+
Next: Clear worktree, then `01-objects.md`
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# 01 - Objects Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create `lib/nvoi/objects/` with:
|
|
9
|
+
|
|
10
|
+
| File | Content (from reference) |
|
|
11
|
+
|------|--------------------------|
|
|
12
|
+
| `server.rb` | `Server`, `ServerCreateOptions` from `providers/base.rb` |
|
|
13
|
+
| `network.rb` | `Network` from `providers/base.rb` |
|
|
14
|
+
| `firewall.rb` | `Firewall` from `providers/base.rb` |
|
|
15
|
+
| `volume.rb` | `Volume`, `VolumeCreateOptions` from `providers/base.rb`, `MountOptions` from `remote/volume_manager.rb` |
|
|
16
|
+
| `tunnel.rb` | `Tunnel` from `cloudflare/client.rb`, `TunnelInfo` from `deployer/types.rb` |
|
|
17
|
+
| `dns.rb` | `Zone`, `DNSRecord` from `cloudflare/client.rb` |
|
|
18
|
+
| `database.rb` | `DatabaseCredentials`, `DumpOptions`, `RestoreOptions`, `CreateOptions`, `Branch`, `BranchMetadata` from `database/provider.rb` |
|
|
19
|
+
| `service_spec.rb` | `ServiceSpec` from `config/types.rb` |
|
|
20
|
+
|
|
21
|
+
All under `Nvoi::Objects` namespace.
|
|
22
|
+
|
|
23
|
+
## Validate
|
|
24
|
+
|
|
25
|
+
- [ ] `ls lib/nvoi/objects/` shows 8 files
|
|
26
|
+
- [ ] Each file has `module Nvoi::Objects`
|
|
27
|
+
- [ ] Structs match reference
|
|
28
|
+
|
|
29
|
+
## Test
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
33
|
+
ruby -e "require './lib/nvoi/objects/server'; p Nvoi::Objects::Server.new(id: '1', name: 'test', status: 'running', public_ipv4: '1.2.3.4')"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
(Full test suite runs after all phases complete)
|
|
37
|
+
|
|
38
|
+
## Commit
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
git add -A && git commit -m "Phase 1: Build objects/"
|
|
42
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# 02 - Utils Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create `lib/nvoi/utils/` with:
|
|
9
|
+
|
|
10
|
+
| File | Content (from reference) |
|
|
11
|
+
|------|--------------------------|
|
|
12
|
+
| `logger.rb` | From `logger.rb` |
|
|
13
|
+
| `constants.rb` | From `constants.rb` |
|
|
14
|
+
| `errors.rb` | From `errors.rb` |
|
|
15
|
+
| `namer.rb` | From `config/naming.rb` + add `hostname(subdomain, domain)` |
|
|
16
|
+
| `env_resolver.rb` | From `config/env_resolver.rb` |
|
|
17
|
+
| `config_loader.rb` | Merge `config/loader.rb` + `config/ssh_keys.rb` |
|
|
18
|
+
| `crypto.rb` | Merge `credentials/crypto.rb` + `credentials/manager.rb` |
|
|
19
|
+
| `templates.rb` | Merge `k8s/templates.rb` + `k8s/renderer.rb` |
|
|
20
|
+
| `retry.rb` | From `deployer/retry.rb` |
|
|
21
|
+
|
|
22
|
+
All under `Nvoi::Utils` namespace.
|
|
23
|
+
|
|
24
|
+
## Validate
|
|
25
|
+
|
|
26
|
+
- [ ] `ls lib/nvoi/utils/` shows 9 files
|
|
27
|
+
- [ ] Each file has `module Nvoi::Utils`
|
|
28
|
+
- [ ] `hostname` method added to namer
|
|
29
|
+
|
|
30
|
+
## Test
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
34
|
+
ruby -e "require './lib/nvoi/utils/logger'; Nvoi::Utils::Logger.new.info('test')"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Commit
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git add -A && git commit -m "Phase 2: Build utils/"
|
|
41
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 03 - External Cloud Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create `lib/nvoi/external/cloud/` with:
|
|
9
|
+
|
|
10
|
+
| File | Content (from reference) |
|
|
11
|
+
|------|--------------------------|
|
|
12
|
+
| `base.rb` | From `providers/base.rb` (interface only, no Structs) |
|
|
13
|
+
| `hetzner.rb` | Merge `providers/hetzner.rb` + `providers/hetzner_client.rb` |
|
|
14
|
+
| `aws.rb` | From `providers/aws.rb` |
|
|
15
|
+
| `scaleway.rb` | Merge `providers/scaleway.rb` + `providers/scaleway_client.rb` |
|
|
16
|
+
| `factory.rb` | From `service/provider.rb` (ProviderHelper → `External::Cloud.for(config)`) |
|
|
17
|
+
|
|
18
|
+
All under `Nvoi::External::Cloud` namespace.
|
|
19
|
+
Use `Objects::Server`, `Objects::Network`, etc.
|
|
20
|
+
|
|
21
|
+
## Validate
|
|
22
|
+
|
|
23
|
+
- [ ] `ls lib/nvoi/external/cloud/` shows 5 files
|
|
24
|
+
- [ ] `base.rb` has no Struct definitions
|
|
25
|
+
- [ ] Each provider uses `Objects::` for return types
|
|
26
|
+
|
|
27
|
+
## Test
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
31
|
+
ruby -e "require './lib/nvoi/objects/server'; require './lib/nvoi/external/cloud/base'; p Nvoi::External::Cloud::Base"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Commit
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
git add -A && git commit -m "Phase 3: Build external/cloud/"
|
|
38
|
+
```
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# 04 - External DNS Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create `lib/nvoi/external/dns/` with:
|
|
9
|
+
|
|
10
|
+
| File | Content (from reference) |
|
|
11
|
+
|------|--------------------------|
|
|
12
|
+
| `cloudflare.rb` | Merge `cloudflare/client.rb` + `deployer/tunnel_manager.rb` (no Structs) |
|
|
13
|
+
|
|
14
|
+
Under `Nvoi::External::DNS` namespace.
|
|
15
|
+
Use `Objects::Tunnel`, `Objects::Zone`, `Objects::DNSRecord`, `Objects::TunnelInfo`.
|
|
16
|
+
Add `setup_tunnel` method from TunnelManager.
|
|
17
|
+
|
|
18
|
+
## Validate
|
|
19
|
+
|
|
20
|
+
- [ ] `ls lib/nvoi/external/dns/` shows 1 file
|
|
21
|
+
- [ ] No Struct definitions in file
|
|
22
|
+
- [ ] `setup_tunnel` method exists
|
|
23
|
+
|
|
24
|
+
## Test
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
28
|
+
ruby -e "require './lib/nvoi/objects/tunnel'; require './lib/nvoi/objects/dns'; require './lib/nvoi/external/dns/cloudflare'; p Nvoi::External::DNS::Cloudflare"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Commit
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
git add -A && git commit -m "Phase 4: Build external/dns/"
|
|
35
|
+
```
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 05 - External Other Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create in `lib/nvoi/external/`:
|
|
9
|
+
|
|
10
|
+
| File | Content (from reference) |
|
|
11
|
+
|------|--------------------------|
|
|
12
|
+
| `ssh.rb` | From `remote/ssh_executor.rb` |
|
|
13
|
+
| `kubectl.rb` | Extract kubectl ops from `k8s/renderer.rb` |
|
|
14
|
+
| `containerd.rb` | From `remote/docker_manager.rb` (rename class) |
|
|
15
|
+
| `volume_manager.rb` | From `remote/volume_manager.rb` (no MountOptions Struct) |
|
|
16
|
+
|
|
17
|
+
Create `lib/nvoi/external/database/`:
|
|
18
|
+
|
|
19
|
+
| File | Content (from reference) |
|
|
20
|
+
|------|--------------------------|
|
|
21
|
+
| `provider.rb` | From `database/provider.rb` (no Structs, use `Objects::`) |
|
|
22
|
+
| `postgres.rb` | From `database/postgres.rb` |
|
|
23
|
+
| `mysql.rb` | From `database/mysql.rb` |
|
|
24
|
+
| `sqlite.rb` | From `database/sqlite.rb` |
|
|
25
|
+
|
|
26
|
+
Under `Nvoi::External` namespace.
|
|
27
|
+
Use `Objects::MountOptions`, `Objects::DatabaseCredentials`, etc.
|
|
28
|
+
|
|
29
|
+
## Validate
|
|
30
|
+
|
|
31
|
+
- [ ] `ls lib/nvoi/external/` shows ssh.rb, kubectl.rb, containerd.rb, volume_manager.rb
|
|
32
|
+
- [ ] `ls lib/nvoi/external/database/` shows 4 files
|
|
33
|
+
- [ ] No Struct definitions in any file
|
|
34
|
+
|
|
35
|
+
## Test
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
39
|
+
ruby -e "require './lib/nvoi/external/ssh'; p Nvoi::External::SSH"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Commit
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
git add -A && git commit -m "Phase 5: Build external/ssh, kubectl, containerd, database"
|
|
46
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# 06 - CLI Deploy Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create `lib/nvoi/cli/deploy/command.rb`:
|
|
9
|
+
- Orchestrator from `service/deploy.rb`
|
|
10
|
+
- Uses `External::`, `Utils::`, `Objects::`
|
|
11
|
+
|
|
12
|
+
Create `lib/nvoi/cli/deploy/steps/`:
|
|
13
|
+
|
|
14
|
+
| File | Content (from reference) |
|
|
15
|
+
|------|--------------------------|
|
|
16
|
+
| `provision_network.rb` | From `deployer/infrastructure.rb` (network + firewall) |
|
|
17
|
+
| `provision_server.rb` | From `steps/server_provisioner.rb` |
|
|
18
|
+
| `provision_volume.rb` | From `steps/volume_provisioner.rb` |
|
|
19
|
+
| `setup_k3s.rb` | Merge `steps/k3s_provisioner.rb` + `steps/k3s_cluster_setup.rb` |
|
|
20
|
+
| `configure_tunnel.rb` | From `steps/tunnel_configurator.rb` |
|
|
21
|
+
| `build_image.rb` | From `deployer/image_builder.rb` |
|
|
22
|
+
| `deploy_database.rb` | From `steps/database_provisioner.rb` |
|
|
23
|
+
| `deploy_service.rb` | Merge `deployer/orchestrator.rb` + `deployer/service_deployer.rb` |
|
|
24
|
+
| `cleanup_images.rb` | From `deployer/cleaner.rb` |
|
|
25
|
+
|
|
26
|
+
Under `Nvoi::CLI::Deploy` namespace.
|
|
27
|
+
|
|
28
|
+
## Validate
|
|
29
|
+
|
|
30
|
+
- [ ] `ls lib/nvoi/cli/deploy/` shows command.rb + steps/
|
|
31
|
+
- [ ] `ls lib/nvoi/cli/deploy/steps/` shows 9 files
|
|
32
|
+
- [ ] command.rb orchestrates steps in correct order
|
|
33
|
+
|
|
34
|
+
## Test
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
38
|
+
ruby -e "require './lib/nvoi/cli/deploy/command'; p Nvoi::CLI::Deploy::Command"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Commit
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
git add -A && git commit -m "Phase 6: Build cli/deploy/"
|
|
45
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# 07 - CLI Delete Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create `lib/nvoi/cli/delete/command.rb`:
|
|
9
|
+
- Orchestrator from `service/delete.rb`
|
|
10
|
+
- Uses `External::`, `Utils::`, `Objects::`
|
|
11
|
+
|
|
12
|
+
Create `lib/nvoi/cli/delete/steps/`:
|
|
13
|
+
|
|
14
|
+
| File | Content (from reference) |
|
|
15
|
+
|------|--------------------------|
|
|
16
|
+
| `detach_volumes.rb` | Extract from `service/delete.rb` |
|
|
17
|
+
| `teardown_server.rb` | Extract from `service/delete.rb` |
|
|
18
|
+
| `teardown_volume.rb` | Extract from `service/delete.rb` |
|
|
19
|
+
| `teardown_firewall.rb` | Extract from `service/delete.rb` |
|
|
20
|
+
| `teardown_network.rb` | Extract from `service/delete.rb` |
|
|
21
|
+
| `teardown_tunnel.rb` | Extract from `service/delete.rb` |
|
|
22
|
+
| `teardown_dns.rb` | Extract from `service/delete.rb` |
|
|
23
|
+
|
|
24
|
+
Under `Nvoi::CLI::Delete` namespace.
|
|
25
|
+
|
|
26
|
+
## Validate
|
|
27
|
+
|
|
28
|
+
- [ ] `ls lib/nvoi/cli/delete/` shows command.rb + steps/
|
|
29
|
+
- [ ] `ls lib/nvoi/cli/delete/steps/` shows 7 files
|
|
30
|
+
- [ ] Teardown order correct: detach → servers → volumes → firewall → network → tunnel → dns
|
|
31
|
+
|
|
32
|
+
## Test
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
36
|
+
ruby -e "require './lib/nvoi/cli/delete/command'; p Nvoi::CLI::Delete::Command"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Commit
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
git add -A && git commit -m "Phase 7: Build cli/delete/"
|
|
43
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# 08 - CLI Exec Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create `lib/nvoi/cli/exec/command.rb`:
|
|
9
|
+
- From `service/exec.rb`
|
|
10
|
+
- Uses `External::SSH`, `Utils::`
|
|
11
|
+
|
|
12
|
+
Under `Nvoi::CLI::Exec` namespace.
|
|
13
|
+
|
|
14
|
+
## Validate
|
|
15
|
+
|
|
16
|
+
- [ ] `ls lib/nvoi/cli/exec/` shows command.rb
|
|
17
|
+
- [ ] Supports: single server, `--all`, `-i` interactive
|
|
18
|
+
|
|
19
|
+
## Test
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
23
|
+
ruby -e "require './lib/nvoi/cli/exec/command'; p Nvoi::CLI::Exec::Command"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Commit
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
git add -A && git commit -m "Phase 8: Build cli/exec/"
|
|
30
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 09 - CLI Credentials Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create `lib/nvoi/cli/credentials/edit/command.rb`:
|
|
9
|
+
- Edit logic from `credentials/editor.rb`
|
|
10
|
+
- Uses `Utils::Crypto`
|
|
11
|
+
|
|
12
|
+
Create `lib/nvoi/cli/credentials/show/command.rb`:
|
|
13
|
+
- Show logic from `credentials/editor.rb`
|
|
14
|
+
- Uses `Utils::Crypto`
|
|
15
|
+
|
|
16
|
+
Under `Nvoi::CLI::Credentials` namespace.
|
|
17
|
+
|
|
18
|
+
## Validate
|
|
19
|
+
|
|
20
|
+
- [ ] `ls lib/nvoi/cli/credentials/edit/` shows command.rb
|
|
21
|
+
- [ ] `ls lib/nvoi/cli/credentials/show/` shows command.rb
|
|
22
|
+
|
|
23
|
+
## Test
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
27
|
+
ruby -e "require './lib/nvoi/cli/credentials/edit/command'; p Nvoi::CLI::Credentials::Edit::Command"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Commit
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
git add -A && git commit -m "Phase 9: Build cli/credentials/"
|
|
34
|
+
```
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# 10 - CLI Database Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create `lib/nvoi/cli/db/command.rb`:
|
|
9
|
+
- From `service/db.rb`
|
|
10
|
+
- Uses `External::Database::`, `External::SSH`, `Utils::`
|
|
11
|
+
- Methods: `branch_create`, `branch_list`, `branch_restore`, `branch_download`
|
|
12
|
+
|
|
13
|
+
Under `Nvoi::CLI::Db` namespace.
|
|
14
|
+
|
|
15
|
+
## Validate
|
|
16
|
+
|
|
17
|
+
- [ ] `ls lib/nvoi/cli/db/` shows command.rb
|
|
18
|
+
- [ ] All branch methods present
|
|
19
|
+
|
|
20
|
+
## Test
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
24
|
+
ruby -e "require './lib/nvoi/cli/db/command'; p Nvoi::CLI::Db::Command"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Commit
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git add -A && git commit -m "Phase 10: Build cli/db/"
|
|
31
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# 11 - CLI Router Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Create `lib/nvoi/cli.rb`:
|
|
9
|
+
- Thor routing only (~50-80 lines)
|
|
10
|
+
- Lazy requires for each command
|
|
11
|
+
- Delegates to `CLI::Deploy::Command`, `CLI::Delete::Command`, etc.
|
|
12
|
+
|
|
13
|
+
```ruby
|
|
14
|
+
# Structure
|
|
15
|
+
module Nvoi
|
|
16
|
+
class CLI < Thor
|
|
17
|
+
desc "deploy", "Deploy application"
|
|
18
|
+
def deploy
|
|
19
|
+
require_relative "cli/deploy/command"
|
|
20
|
+
CLI::Deploy::Command.new(options).run
|
|
21
|
+
end
|
|
22
|
+
# ... etc
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Validate
|
|
28
|
+
|
|
29
|
+
- [ ] `wc -l lib/nvoi/cli.rb` < 100 lines
|
|
30
|
+
- [ ] No business logic in cli.rb
|
|
31
|
+
- [ ] All commands delegate to `cli/*/command.rb`
|
|
32
|
+
|
|
33
|
+
## Test
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
37
|
+
ruby -e "require './lib/nvoi/cli'; p Nvoi::CLI"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Commit
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
git add -A && git commit -m "Phase 11: Build cli.rb router"
|
|
44
|
+
```
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# 12 - Cleanup Execution
|
|
2
|
+
|
|
3
|
+
## Reference
|
|
4
|
+
Read from: `/Users/ben/Desktop/nvoi-rb/lib/nvoi/`
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
### Zeitwerk Pattern (dev-only dependency)
|
|
9
|
+
|
|
10
|
+
**Gemfile:**
|
|
11
|
+
```ruby
|
|
12
|
+
group :development do
|
|
13
|
+
gem "zeitwerk"
|
|
14
|
+
end
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**lib/nvoi.rb:**
|
|
18
|
+
```ruby
|
|
19
|
+
# frozen_string_literal: true
|
|
20
|
+
|
|
21
|
+
if defined?(Nvoi::AUTOLOADERS)
|
|
22
|
+
require "zeitwerk"
|
|
23
|
+
Nvoi::AUTOLOADERS << Zeitwerk::Loader.for_gem.tap do |loader|
|
|
24
|
+
loader.ignore("#{__dir__}/nvoi/loader.rb")
|
|
25
|
+
loader.setup
|
|
26
|
+
end
|
|
27
|
+
else
|
|
28
|
+
require_relative "nvoi/loader"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
module Nvoi
|
|
32
|
+
VERSION = "0.1.0"
|
|
33
|
+
end
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**bin/generate_loader** (script to regenerate loader.rb):
|
|
37
|
+
```ruby
|
|
38
|
+
#!/usr/bin/env ruby
|
|
39
|
+
require "zeitwerk"
|
|
40
|
+
|
|
41
|
+
loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
|
|
42
|
+
loader.ignore("#{__dir__}/../lib/nvoi/loader.rb")
|
|
43
|
+
|
|
44
|
+
requires = []
|
|
45
|
+
loader.on_load do |cpath, value, abspath|
|
|
46
|
+
requires << abspath.sub("#{__dir__}/../lib/", "").sub(".rb", "")
|
|
47
|
+
end
|
|
48
|
+
loader.setup
|
|
49
|
+
loader.eager_load
|
|
50
|
+
|
|
51
|
+
File.write("#{__dir__}/../lib/nvoi/loader.rb", <<~RUBY)
|
|
52
|
+
# frozen_string_literal: true
|
|
53
|
+
# AUTO-GENERATED by bin/generate_loader - do not edit manually
|
|
54
|
+
|
|
55
|
+
#{requires.map { |r| "require_relative \"#{r.sub('nvoi/', '')}\"" }.join("\n")}
|
|
56
|
+
RUBY
|
|
57
|
+
|
|
58
|
+
puts "Generated lib/nvoi/loader.rb with #{requires.size} requires"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**lib/nvoi/loader.rb** (auto-generated, committed):
|
|
62
|
+
```ruby
|
|
63
|
+
# frozen_string_literal: true
|
|
64
|
+
# AUTO-GENERATED by bin/generate_loader - do not edit manually
|
|
65
|
+
|
|
66
|
+
require_relative "version"
|
|
67
|
+
require_relative "objects/server"
|
|
68
|
+
# ... all files in dependency order
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Create config files
|
|
72
|
+
|
|
73
|
+
Create `lib/nvoi/version.rb`:
|
|
74
|
+
- From reference
|
|
75
|
+
|
|
76
|
+
Create `lib/nvoi/config/` (keep config types):
|
|
77
|
+
- `types.rb` - Config classes (Application, ServerConfig, etc.) - use `Objects::ServiceSpec`
|
|
78
|
+
- Other config files as needed
|
|
79
|
+
|
|
80
|
+
## Validate
|
|
81
|
+
|
|
82
|
+
- [ ] `tree lib/nvoi -L 2` matches target structure
|
|
83
|
+
- [ ] No old directories: `providers/`, `cloudflare/`, `remote/`, `service/`, `steps/`, `deployer/`, `k8s/`, `database/`, `credentials/`
|
|
84
|
+
- [ ] `ruby bin/generate_loader` runs without error
|
|
85
|
+
- [ ] `lib/nvoi.rb` loads without error (with and without Zeitwerk)
|
|
86
|
+
|
|
87
|
+
## Test
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cd /Users/ben/Desktop/nvoi-rb-refactor
|
|
91
|
+
|
|
92
|
+
# Test with Zeitwerk (dev mode)
|
|
93
|
+
NVOI_AUTOLOADERS=1 ruby -e "module Nvoi; AUTOLOADERS = []; end; require './lib/nvoi'; p Nvoi::Objects::Server"
|
|
94
|
+
|
|
95
|
+
# Test without Zeitwerk (production mode - uses loader.rb)
|
|
96
|
+
ruby -e "require './lib/nvoi'; p Nvoi::Objects::Server"
|
|
97
|
+
|
|
98
|
+
# Full test suite
|
|
99
|
+
bundle exec rake test
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Full test suite must pass.**
|
|
103
|
+
|
|
104
|
+
## Commit
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
git add -A && git commit -m "Phase 12: Final wiring with Zeitwerk pattern"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Final Verification
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# CLI smoke test
|
|
114
|
+
./exe/nvoi --help
|
|
115
|
+
./exe/nvoi deploy --help
|
|
116
|
+
./exe/nvoi delete --help
|
|
117
|
+
./exe/nvoi exec --help
|
|
118
|
+
./exe/nvoi credentials --help
|
|
119
|
+
./exe/nvoi db --help
|
|
120
|
+
```
|