nvoi 0.1.7 → 0.2.0

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.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -5
  3. data/Gemfile.lock +17 -8
  4. data/Rakefile +1 -1
  5. data/lib/nvoi/cli/config/command.rb +46 -41
  6. data/lib/nvoi/cli/credentials/edit/command.rb +20 -20
  7. data/lib/nvoi/cli/credentials/show/command.rb +1 -1
  8. data/lib/nvoi/cli/db/command.rb +10 -10
  9. data/lib/nvoi/cli/delete/command.rb +2 -2
  10. data/lib/nvoi/cli/deploy/command.rb +29 -13
  11. data/lib/nvoi/cli/deploy/steps/build_image.rb +48 -6
  12. data/lib/nvoi/cli/deploy/steps/configure_tunnel.rb +2 -2
  13. data/lib/nvoi/cli/deploy/steps/deploy_service.rb +3 -13
  14. data/lib/nvoi/cli/deploy/steps/provision_server.rb +1 -1
  15. data/lib/nvoi/cli/deploy/steps/provision_volume.rb +1 -1
  16. data/lib/nvoi/cli/exec/command.rb +3 -3
  17. data/lib/nvoi/cli/logs/command.rb +2 -2
  18. data/lib/nvoi/cli/onboard/command.rb +176 -622
  19. data/lib/nvoi/cli/onboard/steps/app.rb +108 -0
  20. data/lib/nvoi/cli/onboard/steps/app_name.rb +26 -0
  21. data/lib/nvoi/cli/onboard/steps/compute.rb +139 -0
  22. data/lib/nvoi/cli/onboard/steps/database.rb +97 -0
  23. data/lib/nvoi/cli/onboard/steps/domain.rb +48 -0
  24. data/lib/nvoi/cli/onboard/steps/env.rb +67 -0
  25. data/lib/nvoi/cli/onboard/ui.rb +84 -0
  26. data/lib/nvoi/cli/unlock/command.rb +2 -2
  27. data/lib/nvoi/cli.rb +0 -32
  28. data/lib/nvoi/configuration/app_service.rb +54 -0
  29. data/lib/nvoi/configuration/application.rb +44 -0
  30. data/lib/nvoi/configuration/builder.rb +417 -0
  31. data/lib/nvoi/configuration/database.rb +56 -0
  32. data/lib/nvoi/configuration/deploy.rb +15 -0
  33. data/lib/nvoi/{objects/service_spec.rb → configuration/deployment.rb} +4 -3
  34. data/lib/nvoi/{objects/config_override.rb → configuration/override.rb} +4 -4
  35. data/lib/nvoi/configuration/providers.rb +78 -0
  36. data/lib/nvoi/configuration/result.rb +43 -0
  37. data/lib/nvoi/configuration/root.rb +234 -0
  38. data/lib/nvoi/configuration/server.rb +39 -0
  39. data/lib/nvoi/configuration/service.rb +62 -0
  40. data/lib/nvoi/external/cloud/aws.rb +12 -12
  41. data/lib/nvoi/external/cloud/hetzner.rb +7 -7
  42. data/lib/nvoi/external/cloud/scaleway.rb +7 -7
  43. data/lib/nvoi/external/cloud/types.rb +42 -0
  44. data/lib/nvoi/external/containerd.rb +1 -48
  45. data/lib/nvoi/external/database/mysql.rb +1 -1
  46. data/lib/nvoi/external/database/postgres.rb +1 -1
  47. data/lib/nvoi/external/database/provider.rb +1 -1
  48. data/lib/nvoi/external/database/sqlite.rb +1 -1
  49. data/lib/nvoi/external/database/types.rb +55 -0
  50. data/lib/nvoi/external/dns/cloudflare.rb +6 -6
  51. data/lib/nvoi/external/dns/types.rb +24 -0
  52. data/lib/nvoi/external/ssh.rb +0 -12
  53. data/lib/nvoi/external/ssh_tunnel.rb +100 -0
  54. data/lib/nvoi/utils/config_loader.rb +12 -12
  55. data/lib/nvoi/utils/credential_store.rb +4 -4
  56. data/lib/nvoi/utils/env_resolver.rb +3 -3
  57. data/lib/nvoi/utils/namer.rb +2 -2
  58. data/lib/nvoi/utils/presence.rb +23 -0
  59. data/lib/nvoi/version.rb +1 -1
  60. data/lib/nvoi.rb +2 -17
  61. metadata +96 -57
  62. data/.claude/todo/refactor/00-overview.md +0 -171
  63. data/.claude/todo/refactor/01-objects.md +0 -96
  64. data/.claude/todo/refactor/02-utils.md +0 -143
  65. data/.claude/todo/refactor/03-external-cloud.md +0 -164
  66. data/.claude/todo/refactor/04-external-dns.md +0 -104
  67. data/.claude/todo/refactor/05-external.md +0 -133
  68. data/.claude/todo/refactor/06-cli.md +0 -123
  69. data/.claude/todo/refactor/07-cli-deploy-command.md +0 -177
  70. data/.claude/todo/refactor/08-cli-deploy-steps.md +0 -201
  71. data/.claude/todo/refactor/09-cli-delete-command.md +0 -169
  72. data/.claude/todo/refactor/10-cli-exec-command.md +0 -157
  73. data/.claude/todo/refactor/11-cli-credentials-command.md +0 -190
  74. data/.claude/todo/refactor/12-cli-db-command.md +0 -128
  75. data/.claude/todo/refactor/_target.md +0 -79
  76. data/.claude/todo/refactor-execution/00-entrypoint.md +0 -49
  77. data/.claude/todo/refactor-execution/01-objects.md +0 -42
  78. data/.claude/todo/refactor-execution/02-utils.md +0 -41
  79. data/.claude/todo/refactor-execution/03-external-cloud.md +0 -38
  80. data/.claude/todo/refactor-execution/04-external-dns.md +0 -35
  81. data/.claude/todo/refactor-execution/05-external-other.md +0 -46
  82. data/.claude/todo/refactor-execution/06-cli-deploy.md +0 -45
  83. data/.claude/todo/refactor-execution/07-cli-delete.md +0 -43
  84. data/.claude/todo/refactor-execution/08-cli-exec.md +0 -30
  85. data/.claude/todo/refactor-execution/09-cli-credentials.md +0 -34
  86. data/.claude/todo/refactor-execution/10-cli-db.md +0 -31
  87. data/.claude/todo/refactor-execution/11-cli-router.md +0 -44
  88. data/.claude/todo/refactor-execution/12-cleanup.md +0 -120
  89. data/.claude/todo/refactor-execution/_monitoring-strategy.md +0 -126
  90. data/.claude/todo/scaleway.impl.md +0 -644
  91. data/.claude/todo/scaleway.reference.md +0 -520
  92. data/.claude/todos.md +0 -550
  93. data/ingest +0 -0
  94. data/lib/nvoi/config_api/actions/app.rb +0 -53
  95. data/lib/nvoi/config_api/actions/compute_provider.rb +0 -55
  96. data/lib/nvoi/config_api/actions/database.rb +0 -70
  97. data/lib/nvoi/config_api/actions/domain_provider.rb +0 -40
  98. data/lib/nvoi/config_api/actions/env.rb +0 -32
  99. data/lib/nvoi/config_api/actions/init.rb +0 -67
  100. data/lib/nvoi/config_api/actions/secret.rb +0 -32
  101. data/lib/nvoi/config_api/actions/server.rb +0 -66
  102. data/lib/nvoi/config_api/actions/service.rb +0 -52
  103. data/lib/nvoi/config_api/actions/volume.rb +0 -40
  104. data/lib/nvoi/config_api/base.rb +0 -38
  105. data/lib/nvoi/config_api/result.rb +0 -26
  106. data/lib/nvoi/config_api.rb +0 -93
  107. data/lib/nvoi/objects/configuration.rb +0 -483
  108. data/lib/nvoi/objects/database.rb +0 -56
  109. data/lib/nvoi/objects/dns.rb +0 -14
  110. data/lib/nvoi/objects/firewall.rb +0 -11
  111. data/lib/nvoi/objects/network.rb +0 -11
  112. data/lib/nvoi/objects/server.rb +0 -14
  113. data/lib/nvoi/objects/tunnel.rb +0 -14
  114. data/lib/nvoi/objects/volume.rb +0 -17
@@ -1,128 +0,0 @@
1
- # 12 - CLI: Database Commands
2
-
3
- ## Priority: FIFTH (parallel with others)
4
-
5
- ---
6
-
7
- ## Current State (NEW from main)
8
-
9
- | File | Lines | Purpose |
10
- |------|-------|---------|
11
- | `service/db.rb` | 285 | DbService - database branch operations |
12
- | `database/provider.rb` | 160 | Base provider + factory + structs |
13
- | `database/postgres.rb` | ~100 | Postgres dump/restore |
14
- | `database/mysql.rb` | ~100 | MySQL dump/restore |
15
- | `database/sqlite.rb` | ~80 | SQLite dump/restore |
16
-
17
- **Total: ~725 lines**
18
-
19
- ---
20
-
21
- ## What It Does
22
-
23
- Database "branching" = snapshots for backup/restore:
24
-
25
- ```bash
26
- nvoi db branch create [name] # Dump current DB to file
27
- nvoi db branch list # List saved branches
28
- nvoi db branch restore <id> # Restore branch to new DB
29
- nvoi db branch download <id> # Download dump locally
30
- ```
31
-
32
- ---
33
-
34
- ## Target Structure
35
-
36
- ```
37
- lib/nvoi/cli/db/
38
- ├── command.rb # Router for subcommands
39
- ├── branch/
40
- │ ├── create/
41
- │ │ └── command.rb
42
- │ ├── list/
43
- │ │ └── command.rb
44
- │ ├── restore/
45
- │ │ └── command.rb
46
- │ └── download/
47
- │ └── command.rb
48
- ```
49
-
50
- OR simpler (single file since operations are small):
51
-
52
- ```
53
- lib/nvoi/cli/db/
54
- └── command.rb # All branch operations
55
- ```
56
-
57
- ---
58
-
59
- ## Database Module → External
60
-
61
- The `database/` providers are external adapters (talk to DBs via kubectl exec):
62
-
63
- ```
64
- lib/nvoi/external/database/
65
- ├── provider.rb # Base + factory
66
- ├── postgres.rb
67
- ├── mysql.rb
68
- └── sqlite.rb
69
- ```
70
-
71
- **Note:** These use `kubectl exec` to run dump/restore commands in pods. They're external adapters like cloud providers.
72
-
73
- ---
74
-
75
- ## Objects to Extract
76
-
77
- From `database/provider.rb`:
78
-
79
- ```ruby
80
- # objects/database.rb
81
- Credentials = Struct.new(:user, :password, :host, :port, :database, :path, keyword_init: true)
82
- DumpOptions = Struct.new(:pod_name, :database, :user, :password, :host_path, keyword_init: true)
83
- RestoreOptions = Struct.new(:pod_name, :database, :user, :password, :source_db, :host_path, keyword_init: true)
84
- CreateOptions = Struct.new(:pod_name, :database, :user, :password, keyword_init: true)
85
- Branch = Struct.new(:id, :created_at, :size, :adapter, :database, keyword_init: true)
86
- BranchMetadata # class with branches array
87
- ```
88
-
89
- ---
90
-
91
- ## DRY Opportunities
92
-
93
- ### 1. SSH Helper Pattern
94
- `DbService#with_ssh` creates SSH executor. Same pattern in other services.
95
- Extract to base or mixin:
96
-
97
- ```ruby
98
- # In command base or utils
99
- def with_master_ssh(config, provider)
100
- server_ip = get_master_server_ip(config, provider)
101
- ssh = External::SSH.new(server_ip, config.ssh_key_path)
102
- yield ssh
103
- end
104
- ```
105
-
106
- ### 2. Database Credentials Resolution
107
- `Config::DatabaseHelper.get_credentials` is called from multiple places.
108
- Keep in config or move to database provider factory.
109
-
110
- ---
111
-
112
- ## Migration Steps
113
-
114
- 1. Create `lib/nvoi/external/database/` directory
115
- 2. Move `database/*.rb` → `external/database/`
116
- 3. Extract Structs to `objects/database.rb`
117
- 4. Create `lib/nvoi/cli/db/command.rb`
118
- 5. Move logic from `service/db.rb` → `cli/db/command.rb`
119
- 6. Delete `service/db.rb`
120
-
121
- ---
122
-
123
- ## Estimated Effort
124
-
125
- - **Lines to reorganize:** ~725
126
- - **Files created:** 5 (1 command + 4 external/database)
127
- - **Files deleted/moved:** 5
128
- - **Net change:** minimal (reorganization)
@@ -1,79 +0,0 @@
1
- lib/nvoi/
2
-
3
- ├── cli.rb # Thor routing only
4
-
5
- ├── cli/
6
- │ ├── deploy/
7
- │ │ ├── command.rb
8
- │ │ └── steps/
9
- │ │ ├── provision_network.rb
10
- │ │ ├── provision_server.rb
11
- │ │ ├── provision_volume.rb
12
- │ │ ├── setup_k3s.rb
13
- │ │ ├── configure_tunnel.rb
14
- │ │ ├── build_image.rb
15
- │ │ ├── deploy_service.rb
16
- │ │ └── cleanup_images.rb
17
- │ │
18
- │ ├── delete/
19
- │ │ ├── command.rb
20
- │ │ └── steps/
21
- │ │ ├── teardown_tunnel.rb
22
- │ │ ├── teardown_dns.rb
23
- │ │ ├── detach_volumes.rb
24
- │ │ ├── teardown_server.rb
25
- │ │ ├── teardown_volume.rb
26
- │ │ ├── teardown_firewall.rb
27
- │ │ └── teardown_network.rb
28
- │ │
29
- │ ├── exec/
30
- │ │ └── command.rb
31
- │ │
32
- │ └── credentials/
33
- │ ├── edit/
34
- │ │ └── command.rb
35
- │ └── show/
36
- │ └── command.rb
37
-
38
- ├── external/
39
- │ ├── cloud/
40
- │ │ ├── base.rb
41
- │ │ ├── hetzner.rb
42
- │ │ ├── aws.rb
43
- │ │ └── scaleway.rb
44
- │ ├── dns/
45
- │ │ └── cloudflare.rb
46
- │ ├── ssh.rb
47
- │ ├── kubectl.rb
48
- │ └── containerd.rb
49
-
50
- ├── objects/
51
- │ ├── server.rb
52
- │ ├── network.rb
53
- │ ├── firewall.rb
54
- │ ├── volume.rb
55
- │ ├── tunnel.rb
56
- │ ├── dns_record.rb
57
- │ ├── zone.rb
58
- │ ├── service_spec.rb
59
- │ └── config.rb
60
-
61
- └── utils/
62
- ├── namer.rb
63
- ├── env_resolver.rb
64
- ├── crypto.rb
65
- ├── templates.rb
66
- ├── logger.rb
67
- └── constants.rb
68
-
69
- ---
70
-
71
- Summary:
72
-
73
- | Folder | Purpose | Rule |
74
- | ------------- | ---------------------- | ------------------------------------- |
75
- | cli/ | Command entrypoints | 1 command = 1 command.rb |
76
- | cli/\*/steps/ | Multi-step pipelines | Only for commands with ordered phases |
77
- | external/ | Outside world adapters | APIs, SSH, CLIs |
78
- | objects/ | Data structures | No behavior, just shape |
79
- | utils/ | Stateless helpers | Used everywhere |
@@ -1,49 +0,0 @@
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`
@@ -1,42 +0,0 @@
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
- ```
@@ -1,41 +0,0 @@
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
- ```
@@ -1,38 +0,0 @@
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
- ```
@@ -1,35 +0,0 @@
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
- ```
@@ -1,46 +0,0 @@
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
- ```
@@ -1,45 +0,0 @@
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
- ```
@@ -1,43 +0,0 @@
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
- ```
@@ -1,30 +0,0 @@
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
- ```
@@ -1,34 +0,0 @@
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
- ```
@@ -1,31 +0,0 @@
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
- ```
@@ -1,44 +0,0 @@
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
- ```