captive-stack-detector 0.8.4 → 0.9.1
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
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4db20c393b2e76e3a4f80f2a8919ce8d1213270a092d5548645e526b00ec8b92
|
|
4
|
+
data.tar.gz: 7e3cd75908ef3bd96b0bc8ce7d5907d0826ffb75a43dc6ff27a05bd1896d61b8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 875c9629aef59227685231cb08a2bcf074dd478e3cd1a1aa5b36c245209e03c462ec8d5bf9fb1bd2ad2bdf95667e38aeee2a3d1ef8b96365f281d14dbbeda8a8
|
|
7
|
+
data.tar.gz: d41f464ed90e3ae49dcc9edf78c5ca33b6464ae0abf46f708781c7b4e41552526db7664133590375d695b6da7c8c0e787be38d9c8ea38acabefa5ac2fa3d0dc9
|
data/docs/stacks.md
CHANGED
|
@@ -110,6 +110,15 @@ Avec un backend Supabase, Captive pose l'URL et la clé publique sous ce préfix
|
|
|
110
110
|
|
|
111
111
|
Ces variables sont lues **au build** : après en avoir changé une, redéployez.
|
|
112
112
|
|
|
113
|
+
### Site statique sans build
|
|
114
|
+
|
|
115
|
+
Condition : ni `Gemfile` ni `package.json` à la racine, mais un `public/index.html` ou un `index.html` à la racine. Rien n'est installé ni buildé : vos fichiers sont servis tels quels.
|
|
116
|
+
|
|
117
|
+
- Si `public/` existe, seul ce dossier est servi.
|
|
118
|
+
- Sinon la racine est servie, limitée aux fichiers web (HTML, JavaScript, CSS, JSON, images, polices, manifeste, texte). Les dossiers cachés (`.git/`, `.github/`), `supabase/`, vos scripts SQL ou votre documentation ne sont jamais publiés.
|
|
119
|
+
- Un dossier `supabase/` avec son `config.toml` provisionne un backend Supabase.
|
|
120
|
+
- Faute de build, aucune variable n'est injectée : votre code lit directement l'adresse de l'API, par exemple `location.origin`.
|
|
121
|
+
|
|
113
122
|
## Expo
|
|
114
123
|
|
|
115
124
|
Condition : un `package.json` à la racine avec la dépendance `expo` (dans `dependencies` ou `devDependencies`). Aucun script n'est exigé.
|
|
@@ -126,7 +135,7 @@ Condition : un `package.json` à la racine avec la dépendance `expo` (dans `dep
|
|
|
126
135
|
|
|
127
136
|
| Message | Cause | Que faire |
|
|
128
137
|
| --- | --- | --- |
|
|
129
|
-
| Aucun Gemfile ni package.json à la racine du dépôt. | Pas de fichier de dépendances à la racine. | Vérifiez que l'application est bien à la racine du dépôt, pas dans un sous-dossier (`app/`, `frontend/`…). Les monorepos ne sont pas pris en charge. |
|
|
138
|
+
| Aucun Gemfile ni package.json à la racine du dépôt. | Pas de fichier de dépendances ni d'`index.html` à la racine. | Vérifiez que l'application est bien à la racine du dépôt, pas dans un sous-dossier (`app/`, `frontend/`…). Les monorepos ne sont pas pris en charge. |
|
|
130
139
|
| Gemfile trouvé, mais sans la gem rails. | Application Ruby non Rails (Sinatra, Hanami…), ou `Gemfile` d'outillage dans un projet JavaScript. | Seul Rails est pris en charge côté Ruby. Si le `Gemfile` ne sert qu'à de l'outillage, retirez-le du dépôt. |
|
|
131
140
|
| package.json trouvé, mais sans dépendance expo ni script start ou build. | Captive ne sait pas comment construire l'application. | Ajoutez un script `build` (application web) ou `start` (serveur), comme dans les exemples ci-dessus. |
|
|
132
141
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "types"
|
|
4
|
+
|
|
5
|
+
module CaptiveStackDetector
|
|
6
|
+
# Un site statique sans manifeste ni build (index.html qui charge ses scripts) : stack node
|
|
7
|
+
# sans subtype, servie telle quelle. Supabase se reconnaît à son dossier, faute de package.json.
|
|
8
|
+
class StaticSiteDetector
|
|
9
|
+
ENTRIES = %w[public/index.html index.html].freeze
|
|
10
|
+
NO_RUNTIME = Runtime.new(ruby: nil, node: nil)
|
|
11
|
+
|
|
12
|
+
def initialize(reader)
|
|
13
|
+
@reader = reader
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def site?
|
|
17
|
+
ENTRIES.any? { |entry| @reader.read(entry) }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def detect
|
|
21
|
+
Result.new(
|
|
22
|
+
type: "node", subtype: nil, worker: nil, env_vars: {}, system_packages: [],
|
|
23
|
+
services: Services.new(database: nil, queue: nil, backend: backend),
|
|
24
|
+
runtime: NO_RUNTIME,
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def backend = ("supabase" if @reader.read("supabase/config.toml"))
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -8,7 +8,11 @@ module CaptiveStackDetector
|
|
|
8
8
|
# (VITE_, NEXT_PUBLIC_, EXPO_PUBLIC_), nil sans bundler front (PackageJsonAnalyzer).
|
|
9
9
|
Result = Data.define(:type, :subtype, :services, :worker, :runtime, :env_vars, :system_packages,
|
|
10
10
|
:public_env_prefix) do
|
|
11
|
-
|
|
11
|
+
# env_vars : { "NOM" => valeur }, fusionné par captive-admin au provisionnement.
|
|
12
|
+
def initialize(env_vars:, public_env_prefix: nil, **)
|
|
13
|
+
Hash.try_convert(env_vars) or raise ArgumentError, "env_vars doit être un Hash"
|
|
14
|
+
super
|
|
15
|
+
end
|
|
12
16
|
end
|
|
13
17
|
|
|
14
18
|
# reason : :no_manifest, :no_rails ou :no_node_entry, pour que l'appelant explique le refus.
|
|
@@ -6,6 +6,7 @@ require_relative "captive_stack_detector/file_reader"
|
|
|
6
6
|
require_relative "captive_stack_detector/gemfile_analyzer"
|
|
7
7
|
require_relative "captive_stack_detector/rails_stack_detector"
|
|
8
8
|
require_relative "captive_stack_detector/js_stack_detector"
|
|
9
|
+
require_relative "captive_stack_detector/static_site_detector"
|
|
9
10
|
|
|
10
11
|
module CaptiveStackDetector
|
|
11
12
|
# Doc publique des stacks supportées, livrée dans la gem et affichée par le dashboard (ADR 0003).
|
|
@@ -23,7 +24,10 @@ module CaptiveStackDetector
|
|
|
23
24
|
return RailsStackDetector.new(reader, GemfileAnalyzer.new(gemfile)).detect if gemfile
|
|
24
25
|
return JsStackDetector.new(reader, package_json).detect if package_json
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
static_site = StaticSiteDetector.new(reader)
|
|
28
|
+
raise UnsupportedStack, :no_manifest unless static_site.site?
|
|
29
|
+
|
|
30
|
+
static_site.detect
|
|
27
31
|
end
|
|
28
32
|
private_class_method :detect_from
|
|
29
33
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: captive-stack-detector
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.9.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Captive Studio
|
|
@@ -43,6 +43,7 @@ files:
|
|
|
43
43
|
- lib/captive_stack_detector/solid_queue_usage.rb
|
|
44
44
|
- lib/captive_stack_detector/solid_queue_worker.rb
|
|
45
45
|
- lib/captive_stack_detector/ssr_framework_detector.rb
|
|
46
|
+
- lib/captive_stack_detector/static_site_detector.rb
|
|
46
47
|
- lib/captive_stack_detector/system_package_detector.rb
|
|
47
48
|
- lib/captive_stack_detector/types.rb
|
|
48
49
|
- lib/captive_stack_detector/version.rb
|