nvoi 0.1.8 → 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 (110) 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 +2 -2
  11. data/lib/nvoi/cli/deploy/steps/configure_tunnel.rb +2 -2
  12. data/lib/nvoi/cli/deploy/steps/provision_server.rb +1 -1
  13. data/lib/nvoi/cli/deploy/steps/provision_volume.rb +1 -1
  14. data/lib/nvoi/cli/exec/command.rb +3 -3
  15. data/lib/nvoi/cli/logs/command.rb +2 -2
  16. data/lib/nvoi/cli/onboard/command.rb +176 -622
  17. data/lib/nvoi/cli/onboard/steps/app.rb +108 -0
  18. data/lib/nvoi/cli/onboard/steps/app_name.rb +26 -0
  19. data/lib/nvoi/cli/onboard/steps/compute.rb +139 -0
  20. data/lib/nvoi/cli/onboard/steps/database.rb +97 -0
  21. data/lib/nvoi/cli/onboard/steps/domain.rb +48 -0
  22. data/lib/nvoi/cli/onboard/steps/env.rb +67 -0
  23. data/lib/nvoi/cli/onboard/ui.rb +84 -0
  24. data/lib/nvoi/cli/unlock/command.rb +2 -2
  25. data/lib/nvoi/cli.rb +0 -32
  26. data/lib/nvoi/configuration/app_service.rb +54 -0
  27. data/lib/nvoi/configuration/application.rb +44 -0
  28. data/lib/nvoi/configuration/builder.rb +417 -0
  29. data/lib/nvoi/configuration/database.rb +56 -0
  30. data/lib/nvoi/configuration/deploy.rb +15 -0
  31. data/lib/nvoi/{objects/service_spec.rb → configuration/deployment.rb} +4 -3
  32. data/lib/nvoi/{objects/config_override.rb → configuration/override.rb} +4 -4
  33. data/lib/nvoi/configuration/providers.rb +78 -0
  34. data/lib/nvoi/configuration/result.rb +43 -0
  35. data/lib/nvoi/configuration/root.rb +234 -0
  36. data/lib/nvoi/configuration/server.rb +39 -0
  37. data/lib/nvoi/configuration/service.rb +62 -0
  38. data/lib/nvoi/external/cloud/aws.rb +12 -12
  39. data/lib/nvoi/external/cloud/hetzner.rb +7 -7
  40. data/lib/nvoi/external/cloud/scaleway.rb +7 -7
  41. data/lib/nvoi/external/cloud/types.rb +42 -0
  42. data/lib/nvoi/external/database/mysql.rb +1 -1
  43. data/lib/nvoi/external/database/postgres.rb +1 -1
  44. data/lib/nvoi/external/database/provider.rb +1 -1
  45. data/lib/nvoi/external/database/sqlite.rb +1 -1
  46. data/lib/nvoi/external/database/types.rb +55 -0
  47. data/lib/nvoi/external/dns/cloudflare.rb +6 -6
  48. data/lib/nvoi/external/dns/types.rb +24 -0
  49. data/lib/nvoi/utils/config_loader.rb +12 -12
  50. data/lib/nvoi/utils/credential_store.rb +4 -4
  51. data/lib/nvoi/utils/env_resolver.rb +3 -3
  52. data/lib/nvoi/utils/namer.rb +2 -2
  53. data/lib/nvoi/utils/presence.rb +23 -0
  54. data/lib/nvoi/version.rb +1 -1
  55. data/lib/nvoi.rb +2 -17
  56. metadata +95 -58
  57. data/.claude/todo/refactor/00-overview.md +0 -171
  58. data/.claude/todo/refactor/01-objects.md +0 -96
  59. data/.claude/todo/refactor/02-utils.md +0 -143
  60. data/.claude/todo/refactor/03-external-cloud.md +0 -164
  61. data/.claude/todo/refactor/04-external-dns.md +0 -104
  62. data/.claude/todo/refactor/05-external.md +0 -133
  63. data/.claude/todo/refactor/06-cli.md +0 -123
  64. data/.claude/todo/refactor/07-cli-deploy-command.md +0 -177
  65. data/.claude/todo/refactor/08-cli-deploy-steps.md +0 -201
  66. data/.claude/todo/refactor/09-cli-delete-command.md +0 -169
  67. data/.claude/todo/refactor/10-cli-exec-command.md +0 -157
  68. data/.claude/todo/refactor/11-cli-credentials-command.md +0 -190
  69. data/.claude/todo/refactor/12-cli-db-command.md +0 -128
  70. data/.claude/todo/refactor/_target.md +0 -79
  71. data/.claude/todo/refactor-execution/00-entrypoint.md +0 -49
  72. data/.claude/todo/refactor-execution/01-objects.md +0 -42
  73. data/.claude/todo/refactor-execution/02-utils.md +0 -41
  74. data/.claude/todo/refactor-execution/03-external-cloud.md +0 -38
  75. data/.claude/todo/refactor-execution/04-external-dns.md +0 -35
  76. data/.claude/todo/refactor-execution/05-external-other.md +0 -46
  77. data/.claude/todo/refactor-execution/06-cli-deploy.md +0 -45
  78. data/.claude/todo/refactor-execution/07-cli-delete.md +0 -43
  79. data/.claude/todo/refactor-execution/08-cli-exec.md +0 -30
  80. data/.claude/todo/refactor-execution/09-cli-credentials.md +0 -34
  81. data/.claude/todo/refactor-execution/10-cli-db.md +0 -31
  82. data/.claude/todo/refactor-execution/11-cli-router.md +0 -44
  83. data/.claude/todo/refactor-execution/12-cleanup.md +0 -120
  84. data/.claude/todo/refactor-execution/_monitoring-strategy.md +0 -126
  85. data/.claude/todo/scaleway.impl.md +0 -644
  86. data/.claude/todo/scaleway.reference.md +0 -520
  87. data/.claude/todos/buckets.md +0 -41
  88. data/.claude/todos.md +0 -550
  89. data/ingest +0 -0
  90. data/lib/nvoi/config_api/actions/app.rb +0 -53
  91. data/lib/nvoi/config_api/actions/compute_provider.rb +0 -55
  92. data/lib/nvoi/config_api/actions/database.rb +0 -70
  93. data/lib/nvoi/config_api/actions/domain_provider.rb +0 -40
  94. data/lib/nvoi/config_api/actions/env.rb +0 -32
  95. data/lib/nvoi/config_api/actions/init.rb +0 -67
  96. data/lib/nvoi/config_api/actions/secret.rb +0 -32
  97. data/lib/nvoi/config_api/actions/server.rb +0 -66
  98. data/lib/nvoi/config_api/actions/service.rb +0 -52
  99. data/lib/nvoi/config_api/actions/volume.rb +0 -40
  100. data/lib/nvoi/config_api/base.rb +0 -38
  101. data/lib/nvoi/config_api/result.rb +0 -26
  102. data/lib/nvoi/config_api.rb +0 -93
  103. data/lib/nvoi/objects/configuration.rb +0 -483
  104. data/lib/nvoi/objects/database.rb +0 -56
  105. data/lib/nvoi/objects/dns.rb +0 -14
  106. data/lib/nvoi/objects/firewall.rb +0 -11
  107. data/lib/nvoi/objects/network.rb +0 -11
  108. data/lib/nvoi/objects/server.rb +0 -14
  109. data/lib/nvoi/objects/tunnel.rb +0 -14
  110. data/lib/nvoi/objects/volume.rb +0 -17
@@ -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
- ```
@@ -1,120 +0,0 @@
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
- ```