nvoi 0.1.5
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 +7 -0
- data/.rubocop.yml +19 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +151 -0
- data/Makefile +26 -0
- data/Rakefile +16 -0
- data/doc/config-schema.yaml +357 -0
- data/examples/apex-wildcard/deploy.yml +68 -0
- data/examples/golang/.gitignore +19 -0
- data/examples/golang/Dockerfile +43 -0
- data/examples/golang/README.md +59 -0
- data/examples/golang/deploy.enc +0 -0
- data/examples/golang/deploy.yml +54 -0
- data/examples/golang/go.mod +39 -0
- data/examples/golang/go.sum +96 -0
- data/examples/golang/main.go +177 -0
- data/examples/golang/models/user.go +17 -0
- data/examples/golang-postgres-multi/.gitignore +18 -0
- data/examples/golang-postgres-multi/Dockerfile +39 -0
- data/examples/golang-postgres-multi/README.md +211 -0
- data/examples/golang-postgres-multi/deploy.yml +67 -0
- data/examples/golang-postgres-multi/go.mod +45 -0
- data/examples/golang-postgres-multi/go.sum +108 -0
- data/examples/golang-postgres-multi/main.go +197 -0
- data/examples/golang-postgres-multi/models/user.go +17 -0
- data/examples/postgres-multi/.env.production.example +11 -0
- data/examples/postgres-multi/README.md +112 -0
- data/examples/postgres-multi/deploy.yml +74 -0
- data/examples/postgres-single/.env.production.example +11 -0
- data/examples/postgres-single/.gitignore +15 -0
- data/examples/postgres-single/Dockerfile +35 -0
- data/examples/postgres-single/README.md +76 -0
- data/examples/postgres-single/deploy.yml +56 -0
- data/examples/postgres-single/go.mod +45 -0
- data/examples/postgres-single/go.sum +108 -0
- data/examples/postgres-single/main.go +184 -0
- data/examples/rails-single/.dockerignore +51 -0
- data/examples/rails-single/.env.production.example +11 -0
- data/examples/rails-single/.github/dependabot.yml +12 -0
- data/examples/rails-single/.github/workflows/ci.yml +39 -0
- data/examples/rails-single/.gitignore +20 -0
- data/examples/rails-single/.node-version +1 -0
- data/examples/rails-single/.rubocop.yml +8 -0
- data/examples/rails-single/.ruby-version +1 -0
- data/examples/rails-single/Dockerfile +86 -0
- data/examples/rails-single/Gemfile +56 -0
- data/examples/rails-single/Gemfile.lock +350 -0
- data/examples/rails-single/Procfile.dev +3 -0
- data/examples/rails-single/README.md +17 -0
- data/examples/rails-single/Rakefile +6 -0
- data/examples/rails-single/app/assets/builds/.keep +0 -0
- data/examples/rails-single/app/assets/images/.keep +0 -0
- data/examples/rails-single/app/assets/stylesheets/application.tailwind.css +1 -0
- data/examples/rails-single/app/controllers/application_controller.rb +4 -0
- data/examples/rails-single/app/controllers/concerns/.keep +0 -0
- data/examples/rails-single/app/controllers/users_controller.rb +19 -0
- data/examples/rails-single/app/helpers/application_helper.rb +2 -0
- data/examples/rails-single/app/javascript/application.js +3 -0
- data/examples/rails-single/app/javascript/controllers/application.js +9 -0
- data/examples/rails-single/app/javascript/controllers/hello_controller.js +7 -0
- data/examples/rails-single/app/javascript/controllers/index.js +8 -0
- data/examples/rails-single/app/jobs/application_job.rb +7 -0
- data/examples/rails-single/app/mailers/application_mailer.rb +4 -0
- data/examples/rails-single/app/models/application_record.rb +3 -0
- data/examples/rails-single/app/models/concerns/.keep +0 -0
- data/examples/rails-single/app/models/user.rb +2 -0
- data/examples/rails-single/app/views/layouts/application.html.erb +28 -0
- data/examples/rails-single/app/views/layouts/mailer.html.erb +13 -0
- data/examples/rails-single/app/views/layouts/mailer.text.erb +1 -0
- data/examples/rails-single/app/views/pwa/manifest.json.erb +22 -0
- data/examples/rails-single/app/views/pwa/service-worker.js +26 -0
- data/examples/rails-single/app/views/users/index.html.erb +38 -0
- data/examples/rails-single/bin/brakeman +7 -0
- data/examples/rails-single/bin/bundle +109 -0
- data/examples/rails-single/bin/dev +11 -0
- data/examples/rails-single/bin/docker-entrypoint +14 -0
- data/examples/rails-single/bin/jobs +6 -0
- data/examples/rails-single/bin/kamal +27 -0
- data/examples/rails-single/bin/rails +4 -0
- data/examples/rails-single/bin/rake +4 -0
- data/examples/rails-single/bin/rubocop +8 -0
- data/examples/rails-single/bin/setup +37 -0
- data/examples/rails-single/bin/thrust +5 -0
- data/examples/rails-single/bun.lock +224 -0
- data/examples/rails-single/config/application.rb +42 -0
- data/examples/rails-single/config/boot.rb +4 -0
- data/examples/rails-single/config/cable.yml +17 -0
- data/examples/rails-single/config/cache.yml +16 -0
- data/examples/rails-single/config/credentials.yml.enc +1 -0
- data/examples/rails-single/config/database.yml +100 -0
- data/examples/rails-single/config/environment.rb +5 -0
- data/examples/rails-single/config/environments/development.rb +69 -0
- data/examples/rails-single/config/environments/production.rb +87 -0
- data/examples/rails-single/config/environments/test.rb +50 -0
- data/examples/rails-single/config/initializers/assets.rb +7 -0
- data/examples/rails-single/config/initializers/content_security_policy.rb +25 -0
- data/examples/rails-single/config/initializers/filter_parameter_logging.rb +8 -0
- data/examples/rails-single/config/initializers/inflections.rb +16 -0
- data/examples/rails-single/config/locales/en.yml +31 -0
- data/examples/rails-single/config/puma.rb +41 -0
- data/examples/rails-single/config/queue.yml +18 -0
- data/examples/rails-single/config/recurring.yml +15 -0
- data/examples/rails-single/config/routes.rb +4 -0
- data/examples/rails-single/config.ru +6 -0
- data/examples/rails-single/db/cable_schema.rb +11 -0
- data/examples/rails-single/db/cache_schema.rb +12 -0
- data/examples/rails-single/db/migrate/20251123095526_create_users.rb +10 -0
- data/examples/rails-single/db/queue_schema.rb +129 -0
- data/examples/rails-single/db/seeds.rb +9 -0
- data/examples/rails-single/deploy.yml +57 -0
- data/examples/rails-single/lib/tasks/.keep +0 -0
- data/examples/rails-single/log/.keep +0 -0
- data/examples/rails-single/package.json +17 -0
- data/examples/rails-single/public/400.html +114 -0
- data/examples/rails-single/public/404.html +114 -0
- data/examples/rails-single/public/406-unsupported-browser.html +114 -0
- data/examples/rails-single/public/422.html +114 -0
- data/examples/rails-single/public/500.html +114 -0
- data/examples/rails-single/public/icon.png +0 -0
- data/examples/rails-single/public/icon.svg +3 -0
- data/examples/rails-single/public/robots.txt +1 -0
- data/examples/rails-single/script/.keep +0 -0
- data/examples/rails-single/vendor/.keep +0 -0
- data/examples/rails-single/yarn.lock +188 -0
- data/exe/nvoi +6 -0
- data/lib/nvoi/cli.rb +190 -0
- data/lib/nvoi/cloudflare/client.rb +287 -0
- data/lib/nvoi/config/config.rb +248 -0
- data/lib/nvoi/config/env_resolver.rb +63 -0
- data/lib/nvoi/config/loader.rb +102 -0
- data/lib/nvoi/config/naming.rb +196 -0
- data/lib/nvoi/config/ssh_keys.rb +82 -0
- data/lib/nvoi/config/types.rb +274 -0
- data/lib/nvoi/constants.rb +59 -0
- data/lib/nvoi/credentials/crypto.rb +88 -0
- data/lib/nvoi/credentials/editor.rb +272 -0
- data/lib/nvoi/credentials/manager.rb +173 -0
- data/lib/nvoi/deployer/cleaner.rb +36 -0
- data/lib/nvoi/deployer/image_builder.rb +23 -0
- data/lib/nvoi/deployer/infrastructure.rb +126 -0
- data/lib/nvoi/deployer/orchestrator.rb +146 -0
- data/lib/nvoi/deployer/retry.rb +67 -0
- data/lib/nvoi/deployer/service_deployer.rb +311 -0
- data/lib/nvoi/deployer/tunnel_manager.rb +57 -0
- data/lib/nvoi/deployer/types.rb +8 -0
- data/lib/nvoi/errors.rb +67 -0
- data/lib/nvoi/k8s/renderer.rb +44 -0
- data/lib/nvoi/k8s/templates.rb +29 -0
- data/lib/nvoi/logger.rb +72 -0
- data/lib/nvoi/providers/aws.rb +403 -0
- data/lib/nvoi/providers/base.rb +111 -0
- data/lib/nvoi/providers/hetzner.rb +288 -0
- data/lib/nvoi/providers/hetzner_client.rb +170 -0
- data/lib/nvoi/remote/docker_manager.rb +203 -0
- data/lib/nvoi/remote/ssh_executor.rb +72 -0
- data/lib/nvoi/remote/volume_manager.rb +103 -0
- data/lib/nvoi/service/delete.rb +234 -0
- data/lib/nvoi/service/deploy.rb +80 -0
- data/lib/nvoi/service/exec.rb +144 -0
- data/lib/nvoi/service/provider.rb +36 -0
- data/lib/nvoi/steps/application_deployer.rb +26 -0
- data/lib/nvoi/steps/database_provisioner.rb +60 -0
- data/lib/nvoi/steps/k3s_cluster_setup.rb +105 -0
- data/lib/nvoi/steps/k3s_provisioner.rb +351 -0
- data/lib/nvoi/steps/server_provisioner.rb +43 -0
- data/lib/nvoi/steps/services_provisioner.rb +29 -0
- data/lib/nvoi/steps/tunnel_configurator.rb +66 -0
- data/lib/nvoi/steps/volume_provisioner.rb +154 -0
- data/lib/nvoi/version.rb +5 -0
- data/lib/nvoi.rb +79 -0
- data/templates/app-deployment.yaml.erb +102 -0
- data/templates/app-ingress.yaml.erb +20 -0
- data/templates/app-secret.yaml.erb +10 -0
- data/templates/app-service.yaml.erb +12 -0
- data/templates/db-statefulset.yaml.erb +76 -0
- data/templates/service-deployment.yaml.erb +91 -0
- data/templates/worker-deployment.yaml.erb +50 -0
- metadata +361 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
|
|
7
|
+
<title>We’re sorry, but something went wrong (500 Internal Server Error)</title>
|
|
8
|
+
|
|
9
|
+
<meta charset="utf-8">
|
|
10
|
+
<meta name="viewport" content="initial-scale=1, width=device-width">
|
|
11
|
+
<meta name="robots" content="noindex, nofollow">
|
|
12
|
+
|
|
13
|
+
<style>
|
|
14
|
+
|
|
15
|
+
*, *::before, *::after {
|
|
16
|
+
box-sizing: border-box;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
* {
|
|
20
|
+
margin: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
html {
|
|
24
|
+
font-size: 16px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
body {
|
|
28
|
+
background: #FFF;
|
|
29
|
+
color: #261B23;
|
|
30
|
+
display: grid;
|
|
31
|
+
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Aptos, Roboto, "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
32
|
+
font-size: clamp(1rem, 2.5vw, 2rem);
|
|
33
|
+
-webkit-font-smoothing: antialiased;
|
|
34
|
+
font-style: normal;
|
|
35
|
+
font-weight: 400;
|
|
36
|
+
letter-spacing: -0.0025em;
|
|
37
|
+
line-height: 1.4;
|
|
38
|
+
min-height: 100vh;
|
|
39
|
+
place-items: center;
|
|
40
|
+
text-rendering: optimizeLegibility;
|
|
41
|
+
-webkit-text-size-adjust: 100%;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
a {
|
|
45
|
+
color: inherit;
|
|
46
|
+
font-weight: 700;
|
|
47
|
+
text-decoration: underline;
|
|
48
|
+
text-underline-offset: 0.0925em;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
b, strong {
|
|
52
|
+
font-weight: 700;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
i, em {
|
|
56
|
+
font-style: italic;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
main {
|
|
60
|
+
display: grid;
|
|
61
|
+
gap: 1em;
|
|
62
|
+
padding: 2em;
|
|
63
|
+
place-items: center;
|
|
64
|
+
text-align: center;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
main header {
|
|
68
|
+
width: min(100%, 12em);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
main header svg {
|
|
72
|
+
height: auto;
|
|
73
|
+
max-width: 100%;
|
|
74
|
+
width: 100%;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
main article {
|
|
78
|
+
width: min(100%, 30em);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
main article p {
|
|
82
|
+
font-size: 75%;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
main article br {
|
|
86
|
+
|
|
87
|
+
display: none;
|
|
88
|
+
|
|
89
|
+
@media(min-width: 48em) {
|
|
90
|
+
display: inline;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
</style>
|
|
96
|
+
|
|
97
|
+
</head>
|
|
98
|
+
|
|
99
|
+
<body>
|
|
100
|
+
|
|
101
|
+
<!-- This file lives in public/500.html -->
|
|
102
|
+
|
|
103
|
+
<main>
|
|
104
|
+
<header>
|
|
105
|
+
<svg height="172" viewBox="0 0 480 172" width="480" xmlns="http://www.w3.org/2000/svg"><path d="m101.23 93.8427c-8.1103 0-15.4098 3.7849-19.7354 8.3813h-36.2269v-99.21891h103.8143v37.03791h-68.3984v24.8722c5.1366-2.7035 15.1396-5.9477 24.6014-5.9477 35.146 0 56.233 22.7094 56.233 55.4215 0 34.605-23.791 57.315-60.558 57.315-37.8492 0-61.64-22.169-63.8028-55.963h42.9857c1.0814 10.814 9.1919 19.195 21.6281 19.195 11.355 0 19.465-8.381 19.465-20.547 0-11.625-7.299-20.5463-20.006-20.5463zm138.833 77.8613c-40.822 0-64.884-35.146-64.884-85.7015 0-50.5554 24.062-85.700907 64.884-85.700907 40.823 0 64.884 35.145507 64.884 85.700907 0 50.5555-24.061 85.7015-64.884 85.7015zm0-133.2831c-17.572 0-22.709 21.8984-22.709 47.5816 0 25.6835 5.137 47.5815 22.709 47.5815 17.303 0 22.71-21.898 22.71-47.5815 0-25.6832-5.407-47.5816-22.71-47.5816zm140.456 133.2831c-40.823 0-64.884-35.146-64.884-85.7015 0-50.5554 24.061-85.700907 64.884-85.700907 40.822 0 64.884 35.145507 64.884 85.700907 0 50.5555-24.062 85.7015-64.884 85.7015zm0-133.2831c-17.573 0-22.71 21.8984-22.71 47.5816 0 25.6835 5.137 47.5815 22.71 47.5815 17.302 0 22.709-21.898 22.709-47.5815 0-25.6832-5.407-47.5816-22.709-47.5816z" fill="#f0eff0"/><path d="m23.1377 68.9967v34.0033h-8.9162v-34.0033zm4.3157 34.0033v-24.921h8.6947v2.1598c1.3845-1.5506 3.8212-2.7136 6.701-2.7136 5.538 0 8.8054 3.5997 8.8054 9.1377v16.3371h-8.6393v-14.2327c0-2.049-1.0522-3.5443-3.2674-3.5443-1.7168 0-3.1567.9969-3.5997 2.7136v15.0634zm29.9913-8.5839v-9.5807h-3.655v-6.7564h3.655v-6.8671h8.5839v6.8671h5.2058v6.7564h-5.2058v8.307c0 1.9383.9415 2.769 2.6583 2.769.9414 0 1.9937-.2216 2.769-.5538v7.3654c-.9969.443-2.8798.775-4.8181.775-5.8703 0-9.1931-2.769-9.1931-9.0819zm32.3666-.1108h8.0301c-.8861 5.7597-5.2057 9.2487-11.6852 9.2487-7.6424 0-12.682-5.2613-12.682-13.0145 0-7.6978 5.3165-13.0143 12.5159-13.0143 7.6424 0 11.9621 5.095 11.9621 12.5159v2.1598h-16.1156c.2769 2.9905 1.8275 4.5965 4.3196 4.5965 1.7722 0 3.1567-.7753 3.6551-2.4921zm-3.8212-10.0237c-2.0491 0-3.4336 1.2737-3.9874 3.5997h7.5317c-.1107-2.0491-1.3845-3.5997-3.5443-3.5997zm31.4299-6.3134v8.3624c-1.052-.5538-2.215-.7753-3.599-.7753-2.382 0-3.988 1.0522-4.431 2.8244v14.6203h-8.694v-24.921h8.694v2.2152c1.219-1.6614 3.157-2.769 5.649-2.769 1.108 0 1.994.2215 2.381.443zm2.949 25.0318v-24.921h8.694v2.1598c1.385-1.5506 3.821-2.7136 6.701-2.7136 5.538 0 8.806 3.5997 8.806 9.1377v16.3371h-8.64v-14.2327c0-2.049-1.052-3.5443-3.267-3.5443-1.717 0-3.157.9969-3.6 2.7136v15.0634zm50.371 0h-8.363v-1.274c-.83.831-3.323 1.717-5.981 1.717-4.929 0-9.082-2.769-9.082-8.0301 0-4.818 4.153-7.9193 9.581-7.9193 2.049 0 4.485.6646 5.482 1.3845v-1.606c0-1.606-.941-2.9905-3.046-2.9905-1.606 0-2.547.7199-2.935 1.8275h-8.196c.72-4.8181 4.984-8.6393 11.408-8.6393 7.089 0 11.132 3.7659 11.132 10.2453zm-8.363-6.9779v-1.4399c-.554-1.0522-2.049-1.7167-3.655-1.7167-1.717 0-3.433.7199-3.433 2.3813 0 1.7168 1.716 2.4367 3.433 2.4367 1.606 0 3.101-.6645 3.655-1.6614zm20.742-29.0191v35.997h-8.694v-35.997zm13.036 25.9178h9.248c.72 2.326 2.714 3.489 5.483 3.489 2.713 0 4.596-1.163 4.596-3.2674 0-1.6061-1.052-2.326-3.212-2.8244l-6.534-1.3845c-4.985-1.1076-8.751-3.7105-8.751-9.47 0-6.6456 5.538-11.0206 13.07-11.0206 8.307 0 13.014 4.5411 13.956 10.4114h-8.695c-.72-1.8829-2.27-3.3228-5.205-3.3228-2.548 0-4.265 1.1076-4.265 2.9905 0 1.4953 1.052 2.326 2.825 2.7137l6.645 1.5506c5.815 1.3845 9.027 4.5412 9.027 9.8023 0 6.9778-5.87 10.9654-13.291 10.9654-8.141 0-13.679-3.9322-14.897-10.6332zm46.509 1.3845h8.031c-.887 5.7597-5.206 9.2487-11.686 9.2487-7.642 0-12.682-5.2613-12.682-13.0145 0-7.6978 5.317-13.0143 12.516-13.0143 7.643 0 11.962 5.095 11.962 12.5159v2.1598h-16.115c.277 2.9905 1.827 4.5965 4.319 4.5965 1.773 0 3.157-.7753 3.655-2.4921zm-3.821-10.0237c-2.049 0-3.433 1.2737-3.987 3.5997h7.532c-.111-2.0491-1.385-3.5997-3.545-3.5997zm31.431-6.3134v8.3624c-1.053-.5538-2.216-.7753-3.6-.7753-2.381 0-3.988 1.0522-4.431 2.8244v14.6203h-8.694v-24.921h8.694v2.2152c1.219-1.6614 3.157-2.769 5.649-2.769 1.108 0 1.994.2215 2.382.443zm18.288 25.0318h-7.809l-9.47-24.921h8.861l4.763 14.288 4.652-14.288h8.528zm25.614-8.6947h8.03c-.886 5.7597-5.206 9.2487-11.685 9.2487-7.642 0-12.682-5.2613-12.682-13.0145 0-7.6978 5.316-13.0143 12.516-13.0143 7.642 0 11.962 5.095 11.962 12.5159v2.1598h-16.116c.277 2.9905 1.828 4.5965 4.32 4.5965 1.772 0 3.157-.7753 3.655-2.4921zm-3.821-10.0237c-2.049 0-3.434 1.2737-3.988 3.5997h7.532c-.111-2.0491-1.384-3.5997-3.544-3.5997zm31.43-6.3134v8.3624c-1.052-.5538-2.215-.7753-3.6-.7753-2.381 0-3.987 1.0522-4.43 2.8244v14.6203h-8.695v-24.921h8.695v2.2152c1.218-1.6614 3.157-2.769 5.649-2.769 1.107 0 1.993.2215 2.381.443zm13.703-8.9715h24.312v7.6424h-15.562v5.3165h14.232v7.4763h-14.232v5.8703h15.562v7.6978h-24.312zm44.667 8.9715v8.3624c-1.052-.5538-2.215-.7753-3.6-.7753-2.381 0-3.987 1.0522-4.43 2.8244v14.6203h-8.695v-24.921h8.695v2.2152c1.218-1.6614 3.156-2.769 5.648-2.769 1.108 0 1.994.2215 2.382.443zm19.673 0v8.3624c-1.053-.5538-2.216-.7753-3.6-.7753-2.381 0-3.987 1.0522-4.43 2.8244v14.6203h-8.695v-24.921h8.695v2.2152c1.218-1.6614 3.156-2.769 5.648-2.769 1.108 0 1.994.2215 2.382.443zm26.769 12.5713c0 7.6978-5.15 13.0145-12.737 13.0145-7.532 0-12.738-5.3167-12.738-13.0145s5.206-13.0143 12.738-13.0143c7.587 0 12.737 5.3165 12.737 13.0143zm-8.529 0c0-3.4336-1.495-5.8703-4.208-5.8703-2.659 0-4.154 2.4367-4.154 5.8703s1.495 5.8149 4.154 5.8149c2.713 0 4.208-2.3813 4.208-5.8149zm28.082-12.5713v8.3624c-1.052-.5538-2.215-.7753-3.6-.7753-2.381 0-3.987 1.0522-4.43 2.8244v14.6203h-8.695v-24.921h8.695v2.2152c1.218-1.6614 3.157-2.769 5.649-2.769 1.107 0 1.993.2215 2.381.443z" fill="#d30001"/></svg>
|
|
106
|
+
</header>
|
|
107
|
+
<article>
|
|
108
|
+
<p><strong>We’re sorry, but something went wrong.</strong><br> If you’re the application owner check the logs for more information.</p>
|
|
109
|
+
</article>
|
|
110
|
+
</main>
|
|
111
|
+
|
|
112
|
+
</body>
|
|
113
|
+
|
|
114
|
+
</html>
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
2
|
+
# yarn lockfile v1
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
"@esbuild/aix-ppc64@0.27.0":
|
|
6
|
+
version "0.27.0"
|
|
7
|
+
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz#1d8be43489a961615d49e037f1bfa0f52a773737"
|
|
8
|
+
integrity sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==
|
|
9
|
+
|
|
10
|
+
"@esbuild/android-arm64@0.27.0":
|
|
11
|
+
version "0.27.0"
|
|
12
|
+
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz#bd1763194aad60753fa3338b1ba9bda974b58724"
|
|
13
|
+
integrity sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==
|
|
14
|
+
|
|
15
|
+
"@esbuild/android-arm@0.27.0":
|
|
16
|
+
version "0.27.0"
|
|
17
|
+
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.0.tgz#69c7b57f02d3b3618a5ba4f82d127b57665dc397"
|
|
18
|
+
integrity sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==
|
|
19
|
+
|
|
20
|
+
"@esbuild/android-x64@0.27.0":
|
|
21
|
+
version "0.27.0"
|
|
22
|
+
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.0.tgz#6ea22b5843acb23243d0126c052d7d3b6a11ca90"
|
|
23
|
+
integrity sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==
|
|
24
|
+
|
|
25
|
+
"@esbuild/darwin-arm64@0.27.0":
|
|
26
|
+
version "0.27.0"
|
|
27
|
+
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz#5ad7c02bc1b1a937a420f919afe40665ba14ad1e"
|
|
28
|
+
integrity sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==
|
|
29
|
+
|
|
30
|
+
"@esbuild/darwin-x64@0.27.0":
|
|
31
|
+
version "0.27.0"
|
|
32
|
+
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz#48470c83c5fd6d1fc7c823c2c603aeee96e101c9"
|
|
33
|
+
integrity sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==
|
|
34
|
+
|
|
35
|
+
"@esbuild/freebsd-arm64@0.27.0":
|
|
36
|
+
version "0.27.0"
|
|
37
|
+
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz#d5a8effd8b0be7be613cd1009da34d629d4c2457"
|
|
38
|
+
integrity sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==
|
|
39
|
+
|
|
40
|
+
"@esbuild/freebsd-x64@0.27.0":
|
|
41
|
+
version "0.27.0"
|
|
42
|
+
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz#9bde638bda31aa244d6d64dbafafb41e6e799bcc"
|
|
43
|
+
integrity sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==
|
|
44
|
+
|
|
45
|
+
"@esbuild/linux-arm64@0.27.0":
|
|
46
|
+
version "0.27.0"
|
|
47
|
+
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz#96008c3a207d8ca495708db714c475ea5bf7e2af"
|
|
48
|
+
integrity sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==
|
|
49
|
+
|
|
50
|
+
"@esbuild/linux-arm@0.27.0":
|
|
51
|
+
version "0.27.0"
|
|
52
|
+
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz#9b47cb0f222e567af316e978c7f35307db97bc0e"
|
|
53
|
+
integrity sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==
|
|
54
|
+
|
|
55
|
+
"@esbuild/linux-ia32@0.27.0":
|
|
56
|
+
version "0.27.0"
|
|
57
|
+
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz#d1e1e38d406cbdfb8a49f4eca0c25bbc344e18cc"
|
|
58
|
+
integrity sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==
|
|
59
|
+
|
|
60
|
+
"@esbuild/linux-loong64@0.27.0":
|
|
61
|
+
version "0.27.0"
|
|
62
|
+
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz#c13bc6a53e3b69b76f248065bebee8415b44dfce"
|
|
63
|
+
integrity sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==
|
|
64
|
+
|
|
65
|
+
"@esbuild/linux-mips64el@0.27.0":
|
|
66
|
+
version "0.27.0"
|
|
67
|
+
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz#05f8322eb0a96ce1bfbc59691abe788f71e2d217"
|
|
68
|
+
integrity sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==
|
|
69
|
+
|
|
70
|
+
"@esbuild/linux-ppc64@0.27.0":
|
|
71
|
+
version "0.27.0"
|
|
72
|
+
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz#6fc5e7af98b4fb0c6a7f0b73ba837ce44dc54980"
|
|
73
|
+
integrity sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==
|
|
74
|
+
|
|
75
|
+
"@esbuild/linux-riscv64@0.27.0":
|
|
76
|
+
version "0.27.0"
|
|
77
|
+
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz#508afa9f69a3f97368c0bf07dd894a04af39d86e"
|
|
78
|
+
integrity sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==
|
|
79
|
+
|
|
80
|
+
"@esbuild/linux-s390x@0.27.0":
|
|
81
|
+
version "0.27.0"
|
|
82
|
+
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz#21fda656110ee242fc64f87a9e0b0276d4e4ec5b"
|
|
83
|
+
integrity sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==
|
|
84
|
+
|
|
85
|
+
"@esbuild/linux-x64@0.27.0":
|
|
86
|
+
version "0.27.0"
|
|
87
|
+
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz#1758a85dcc09b387fd57621643e77b25e0ccba59"
|
|
88
|
+
integrity sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==
|
|
89
|
+
|
|
90
|
+
"@esbuild/netbsd-arm64@0.27.0":
|
|
91
|
+
version "0.27.0"
|
|
92
|
+
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz#a0131159f4db6e490da35cc4bb51ef0d03b7848a"
|
|
93
|
+
integrity sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==
|
|
94
|
+
|
|
95
|
+
"@esbuild/netbsd-x64@0.27.0":
|
|
96
|
+
version "0.27.0"
|
|
97
|
+
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz#6f4877d7c2ba425a2b80e4330594e0b43caa2d7d"
|
|
98
|
+
integrity sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==
|
|
99
|
+
|
|
100
|
+
"@esbuild/openbsd-arm64@0.27.0":
|
|
101
|
+
version "0.27.0"
|
|
102
|
+
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz#cbefbd4c2f375cebeb4f965945be6cf81331bd01"
|
|
103
|
+
integrity sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==
|
|
104
|
+
|
|
105
|
+
"@esbuild/openbsd-x64@0.27.0":
|
|
106
|
+
version "0.27.0"
|
|
107
|
+
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz#31fa9e8649fc750d7c2302c8b9d0e1547f57bc84"
|
|
108
|
+
integrity sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==
|
|
109
|
+
|
|
110
|
+
"@esbuild/openharmony-arm64@0.27.0":
|
|
111
|
+
version "0.27.0"
|
|
112
|
+
resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz#03727780f1fdf606e7b56193693a715d9f1ee001"
|
|
113
|
+
integrity sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==
|
|
114
|
+
|
|
115
|
+
"@esbuild/sunos-x64@0.27.0":
|
|
116
|
+
version "0.27.0"
|
|
117
|
+
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz#866a35f387234a867ced35af8906dfffb073b9ff"
|
|
118
|
+
integrity sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==
|
|
119
|
+
|
|
120
|
+
"@esbuild/win32-arm64@0.27.0":
|
|
121
|
+
version "0.27.0"
|
|
122
|
+
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz#53de43a9629b8a34678f28cd56cc104db1b67abb"
|
|
123
|
+
integrity sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==
|
|
124
|
+
|
|
125
|
+
"@esbuild/win32-ia32@0.27.0":
|
|
126
|
+
version "0.27.0"
|
|
127
|
+
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz#924d2aed8692fea5d27bfb6500f9b8b9c1a34af4"
|
|
128
|
+
integrity sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==
|
|
129
|
+
|
|
130
|
+
"@esbuild/win32-x64@0.27.0":
|
|
131
|
+
version "0.27.0"
|
|
132
|
+
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz#64995295227e001f2940258617c6674efb3ac48d"
|
|
133
|
+
integrity sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==
|
|
134
|
+
|
|
135
|
+
"@hotwired/stimulus@^3.2.2":
|
|
136
|
+
version "3.2.2"
|
|
137
|
+
resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.2.2.tgz#071aab59c600fed95b97939e605ff261a4251608"
|
|
138
|
+
integrity sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A==
|
|
139
|
+
|
|
140
|
+
"@hotwired/turbo-rails@^8.0.20":
|
|
141
|
+
version "8.0.20"
|
|
142
|
+
resolved "https://registry.yarnpkg.com/@hotwired/turbo-rails/-/turbo-rails-8.0.20.tgz#a6f6f78591e9868ca1e5e67f4c7d453dbd49a475"
|
|
143
|
+
integrity sha512-4aYkYF9XMKL7ZZPfgElq15+60osZOwMwhztE4myKQYEzCPvaPUxwZH301tOrBNtWUwOD+TNOm1Hrpeaq22RX9A==
|
|
144
|
+
dependencies:
|
|
145
|
+
"@hotwired/turbo" "^8.0.20"
|
|
146
|
+
"@rails/actioncable" ">=7.0"
|
|
147
|
+
|
|
148
|
+
"@hotwired/turbo@^8.0.20":
|
|
149
|
+
version "8.0.20"
|
|
150
|
+
resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.20.tgz#068ede648c4db09fed4cf0ac0266788056673f2f"
|
|
151
|
+
integrity sha512-IilkH/+h92BRLeY/rMMR3MUh1gshIfdra/qZzp/Bl5FmiALD/6sQZK/ecxSbumeyOYiWr/JRI+Au1YQmkJGnoA==
|
|
152
|
+
|
|
153
|
+
"@rails/actioncable@>=7.0":
|
|
154
|
+
version "8.1.100"
|
|
155
|
+
resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-8.1.100.tgz#b1f85f3482425fb91e5eba1deb55152ee0bb2f85"
|
|
156
|
+
integrity sha512-j4vJQqz51CDVYv2UafKRu4jiZi5/gTnm7NkyL+VMIgEw3s8jtVtmzu9uItUaZccUg9NJ6o05yVyBAHxNfTuCRA==
|
|
157
|
+
|
|
158
|
+
esbuild@^0.27.0:
|
|
159
|
+
version "0.27.0"
|
|
160
|
+
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.0.tgz#db983bed6f76981361c92f50cf6a04c66f7b3e1d"
|
|
161
|
+
integrity sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==
|
|
162
|
+
optionalDependencies:
|
|
163
|
+
"@esbuild/aix-ppc64" "0.27.0"
|
|
164
|
+
"@esbuild/android-arm" "0.27.0"
|
|
165
|
+
"@esbuild/android-arm64" "0.27.0"
|
|
166
|
+
"@esbuild/android-x64" "0.27.0"
|
|
167
|
+
"@esbuild/darwin-arm64" "0.27.0"
|
|
168
|
+
"@esbuild/darwin-x64" "0.27.0"
|
|
169
|
+
"@esbuild/freebsd-arm64" "0.27.0"
|
|
170
|
+
"@esbuild/freebsd-x64" "0.27.0"
|
|
171
|
+
"@esbuild/linux-arm" "0.27.0"
|
|
172
|
+
"@esbuild/linux-arm64" "0.27.0"
|
|
173
|
+
"@esbuild/linux-ia32" "0.27.0"
|
|
174
|
+
"@esbuild/linux-loong64" "0.27.0"
|
|
175
|
+
"@esbuild/linux-mips64el" "0.27.0"
|
|
176
|
+
"@esbuild/linux-ppc64" "0.27.0"
|
|
177
|
+
"@esbuild/linux-riscv64" "0.27.0"
|
|
178
|
+
"@esbuild/linux-s390x" "0.27.0"
|
|
179
|
+
"@esbuild/linux-x64" "0.27.0"
|
|
180
|
+
"@esbuild/netbsd-arm64" "0.27.0"
|
|
181
|
+
"@esbuild/netbsd-x64" "0.27.0"
|
|
182
|
+
"@esbuild/openbsd-arm64" "0.27.0"
|
|
183
|
+
"@esbuild/openbsd-x64" "0.27.0"
|
|
184
|
+
"@esbuild/openharmony-arm64" "0.27.0"
|
|
185
|
+
"@esbuild/sunos-x64" "0.27.0"
|
|
186
|
+
"@esbuild/win32-arm64" "0.27.0"
|
|
187
|
+
"@esbuild/win32-ia32" "0.27.0"
|
|
188
|
+
"@esbuild/win32-x64" "0.27.0"
|
data/exe/nvoi
ADDED
data/lib/nvoi/cli.rb
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "thor"
|
|
4
|
+
|
|
5
|
+
module Nvoi
|
|
6
|
+
# CredentialsCLI handles encrypted credential management
|
|
7
|
+
class CredentialsCLI < Thor
|
|
8
|
+
class_option :credentials, desc: "Path to encrypted credentials file (default: deploy.enc)"
|
|
9
|
+
class_option :master_key, desc: "Path to master key file (default: deploy.key or $NVOI_MASTER_KEY)"
|
|
10
|
+
class_option :dir, aliases: "-d", default: ".", desc: "Working directory"
|
|
11
|
+
|
|
12
|
+
def self.exit_on_failure?
|
|
13
|
+
true
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
desc "edit", "Edit encrypted credentials"
|
|
17
|
+
long_desc <<~DESC
|
|
18
|
+
Decrypt credentials, open in $EDITOR, validate, and re-encrypt.
|
|
19
|
+
|
|
20
|
+
On first run, generates a new master key and creates deploy.key (git-ignored).
|
|
21
|
+
The master key can also be provided via $NVOI_MASTER_KEY environment variable.
|
|
22
|
+
DESC
|
|
23
|
+
def edit
|
|
24
|
+
log = Nvoi.logger
|
|
25
|
+
log.info "Credentials Editor"
|
|
26
|
+
|
|
27
|
+
working_dir = resolve_working_dir
|
|
28
|
+
|
|
29
|
+
enc_path = options[:credentials]
|
|
30
|
+
enc_path = File.join(working_dir, Credentials::DEFAULT_ENCRYPTED_FILE) if enc_path.nil? || enc_path.empty?
|
|
31
|
+
|
|
32
|
+
if File.exist?(enc_path)
|
|
33
|
+
# Existing file: load manager
|
|
34
|
+
manager = Credentials::Manager.new(working_dir, options[:credentials], options[:master_key])
|
|
35
|
+
else
|
|
36
|
+
# First time: initialize
|
|
37
|
+
log.info "Creating new encrypted credentials file"
|
|
38
|
+
manager = Credentials::Manager.for_init(working_dir)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
editor = Credentials::Editor.new(manager)
|
|
42
|
+
editor.edit
|
|
43
|
+
|
|
44
|
+
# Update .gitignore on first run
|
|
45
|
+
if manager.key_path
|
|
46
|
+
begin
|
|
47
|
+
manager.update_gitignore
|
|
48
|
+
log.info "Added %s to .gitignore", Credentials::DEFAULT_KEY_FILE
|
|
49
|
+
rescue StandardError => e
|
|
50
|
+
log.warning "Failed to update .gitignore: %s", e.message
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
log.success "Master key saved to: %s", manager.key_path
|
|
54
|
+
log.warning "Keep this key safe! You cannot decrypt credentials without it."
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
desc "show", "Display decrypted credentials"
|
|
59
|
+
long_desc "Decrypt and print credentials to stdout. Useful for debugging or piping to other tools."
|
|
60
|
+
def show
|
|
61
|
+
working_dir = resolve_working_dir
|
|
62
|
+
manager = Credentials::Manager.new(working_dir, options[:credentials], options[:master_key])
|
|
63
|
+
editor = Credentials::Editor.new(manager)
|
|
64
|
+
editor.show
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
private
|
|
68
|
+
|
|
69
|
+
def resolve_working_dir
|
|
70
|
+
wd = options[:dir]
|
|
71
|
+
if wd.nil? || wd.empty? || wd == "."
|
|
72
|
+
Dir.pwd
|
|
73
|
+
else
|
|
74
|
+
File.expand_path(wd)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Main CLI for nvoi commands
|
|
80
|
+
class CLI < Thor
|
|
81
|
+
class_option :config, aliases: "-c", default: Constants::DEFAULT_CONFIG_FILE,
|
|
82
|
+
desc: "Path to deployment configuration file"
|
|
83
|
+
class_option :dir, aliases: "-d", default: ".",
|
|
84
|
+
desc: "Working directory containing the application code"
|
|
85
|
+
|
|
86
|
+
def self.exit_on_failure?
|
|
87
|
+
true
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
desc "version", "Print version"
|
|
91
|
+
def version
|
|
92
|
+
puts "nvoi #{VERSION}"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
desc "deploy", "Deploy application"
|
|
96
|
+
option :dockerfile_path, desc: "Path to Dockerfile (optional, defaults to ./Dockerfile)"
|
|
97
|
+
option :config_dir, desc: "Directory containing SSH keys (optional, defaults to ~/.ssh)"
|
|
98
|
+
def deploy
|
|
99
|
+
log = Nvoi.logger
|
|
100
|
+
log.info "Deploy CLI %s", VERSION
|
|
101
|
+
|
|
102
|
+
config_path = resolve_config_path
|
|
103
|
+
working_dir = options[:dir]
|
|
104
|
+
dockerfile_path = options[:dockerfile_path] || File.join(working_dir, "Dockerfile")
|
|
105
|
+
|
|
106
|
+
begin
|
|
107
|
+
svc = Service::DeployService.new(config_path, working_dir, log)
|
|
108
|
+
svc.config_dir = options[:config_dir] if options[:config_dir]
|
|
109
|
+
svc.dockerfile_path = dockerfile_path
|
|
110
|
+
svc.run
|
|
111
|
+
rescue StandardError => e
|
|
112
|
+
log.error "Deployment failed: %s", e.message
|
|
113
|
+
raise
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
desc "delete", "Delete server, firewall, and network"
|
|
118
|
+
option :config_dir, desc: "Directory containing SSH keys (optional, defaults to ~/.ssh)"
|
|
119
|
+
def delete
|
|
120
|
+
log = Nvoi.logger
|
|
121
|
+
log.info "Delete CLI %s", VERSION
|
|
122
|
+
|
|
123
|
+
config_path = resolve_config_path
|
|
124
|
+
|
|
125
|
+
begin
|
|
126
|
+
svc = Service::DeleteService.new(config_path, log)
|
|
127
|
+
svc.config_dir = options[:config_dir] if options[:config_dir]
|
|
128
|
+
svc.run
|
|
129
|
+
rescue StandardError => e
|
|
130
|
+
log.error "Delete failed: %s", e.message
|
|
131
|
+
raise
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
desc "exec [COMMAND...]", "Execute command on remote server or open interactive shell"
|
|
136
|
+
long_desc <<~DESC
|
|
137
|
+
Execute arbitrary bash commands on remote servers using existing configuration,
|
|
138
|
+
or open an interactive SSH shell with --interactive flag.
|
|
139
|
+
DESC
|
|
140
|
+
option :server, default: "main", desc: "Server to execute on (main, worker-1, worker-2, etc.)"
|
|
141
|
+
option :all, type: :boolean, default: false, desc: "Execute on all servers"
|
|
142
|
+
option :interactive, aliases: "-i", type: :boolean, default: false,
|
|
143
|
+
desc: "Open interactive SSH shell instead of executing command"
|
|
144
|
+
def exec(*args)
|
|
145
|
+
log = Nvoi.logger
|
|
146
|
+
log.info "Exec CLI %s", VERSION
|
|
147
|
+
|
|
148
|
+
config_path = resolve_config_path
|
|
149
|
+
|
|
150
|
+
begin
|
|
151
|
+
svc = Service::ExecService.new(config_path, log)
|
|
152
|
+
|
|
153
|
+
if options[:interactive]
|
|
154
|
+
log.warning "Ignoring command arguments in interactive mode" unless args.empty?
|
|
155
|
+
log.warning "Ignoring --all flag in interactive mode" if options[:all]
|
|
156
|
+
svc.open_shell(options[:server])
|
|
157
|
+
else
|
|
158
|
+
raise ArgumentError, "command required (use --interactive/-i for shell)" if args.empty?
|
|
159
|
+
|
|
160
|
+
command = args.join(" ")
|
|
161
|
+
|
|
162
|
+
if options[:all]
|
|
163
|
+
svc.run_all(command)
|
|
164
|
+
else
|
|
165
|
+
svc.run(command, options[:server])
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
rescue StandardError => e
|
|
169
|
+
log.error "Exec failed: %s", e.message
|
|
170
|
+
raise
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
desc "credentials SUBCOMMAND", "Manage encrypted deployment credentials"
|
|
175
|
+
subcommand "credentials", CredentialsCLI
|
|
176
|
+
|
|
177
|
+
private
|
|
178
|
+
|
|
179
|
+
def resolve_config_path
|
|
180
|
+
config_path = options[:config]
|
|
181
|
+
working_dir = options[:dir]
|
|
182
|
+
|
|
183
|
+
if config_path == Constants::DEFAULT_CONFIG_FILE && working_dir && working_dir != "."
|
|
184
|
+
File.join(working_dir, Constants::DEFAULT_CONFIG_FILE)
|
|
185
|
+
else
|
|
186
|
+
config_path
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|