captive-stack-detector 0.3.2 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c6b6cdeba5e63ce6cca82c9c240670d6d040905a66f343d5fcb5abdb81d88b8
4
- data.tar.gz: ba53db264bc6c26ce3120ac5a19b7806e8885c824110b69afd1074cb25c20c93
3
+ metadata.gz: ece3c2210380284f962da264f7e16f96a649ddfdb55c110baf0f1065a6c0d5b9
4
+ data.tar.gz: 29e1ffa94c58e29b44a2e868195e76593592204cb2449e1e46b19c6fc6069b03
5
5
  SHA512:
6
- metadata.gz: 3affec638bda9a252c098909038c389f23975c3972e8b481a5aaf9d4a8c8941d31adc1e8e92ebd31f36df7d2d619eb4af4f4b8314758b1ae5c30daeb9851db06
7
- data.tar.gz: 52baeec23b6699fbb93e09dbc5cc14eb865a64b6153209367acae747e42bfe6063a9793284a58a9aca94647d6920546788cf795f0d61cd8a9eda9112b9075882
6
+ metadata.gz: 976889c3c993bc6548ecdf0bf61074ca7113fa3457243d0c06e75bf74172d136a0b5f6f6d62377cb3a438f50ca9a0bcc14febc79f892c47ec1439a832fffef99
7
+ data.tar.gz: 214e33cbfeff3724630a54868902d4e10cc9681ec3a8454c89eb15386ad359757a33ef2d505d8e749610e90854bd737406e02be4166ef2346e4d15370d9d0d4e
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CaptiveStackDetector
4
+ # Extrait les paquets système déclarés dans un Aptfile : un paquet par ligne,
5
+ # commentaires (`#`) et lignes vides ignorés.
6
+ module AptfileParser
7
+ def self.parse(content)
8
+ content.to_s.lines
9
+ .map { |line| line.split("#", 2).first.to_s.strip }
10
+ .reject(&:empty?)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CaptiveStackDetector
4
+ # Connaissance « quel gem exige quels paquets système ». Rend les paires gem → paquets
5
+ # pour les gems effectivement déclarés dans le Gemfile passé.
6
+ module GemPackageMap
7
+ MAP = {
8
+ "ruby-vips" => %w[libvips42 libvips-dev],
9
+ "mini_magick" => %w[imagemagick],
10
+ "rmagick" => %w[imagemagick],
11
+ "wkhtmltopdf-binary" => %w[], # retiré de Debian Trixie, projet upstream abandonné
12
+ "sqlite3" => %w[libsqlite3-dev],
13
+ }.freeze
14
+
15
+ def self.matches(gemfile)
16
+ content = gemfile.to_s
17
+ MAP.select { |gem, _| content.match?(/gem ['"]#{Regexp.escape(gem)}['"]/) }
18
+ end
19
+ end
20
+ end
@@ -17,7 +17,7 @@ module CaptiveStackDetector
17
17
  Result.new(
18
18
  type: type,
19
19
  subtype: @analyzer.subtype,
20
- services: Services.new(database: @analyzer.database, queue: @analyzer.queue),
20
+ services: Services.new(database: @analyzer.database, queue: @analyzer.queue, backend: @analyzer.backend),
21
21
  worker: build_worker,
22
22
  runtime: Runtime.new(ruby: nil, node: @reader.node_version),
23
23
  env_vars: {},
@@ -21,13 +21,19 @@ module CaptiveStackDetector
21
21
  end
22
22
 
23
23
  def database
24
- deps.key?("pg") ? "postgres" : nil
24
+ return "postgres" if deps.key?("pg") || backend
25
+
26
+ nil
25
27
  end
26
28
 
27
29
  def queue
28
30
  (deps.key?("redis") || deps.key?("ioredis")) ? "redis" : nil
29
31
  end
30
32
 
33
+ def backend
34
+ (deps.key?("@supabase/supabase-js") || deps.key?("@supabase/ssr")) ? "supabase" : nil
35
+ end
36
+
31
37
  private
32
38
 
33
39
  def deps
@@ -16,7 +16,7 @@ module CaptiveStackDetector
16
16
  Result.new(
17
17
  type: "rails",
18
18
  subtype: @analyzer.subtype,
19
- services: Services.new(database: @analyzer.database, queue: @analyzer.queue),
19
+ services: Services.new(database: @analyzer.database, queue: @analyzer.queue, backend: nil),
20
20
  worker: build_worker,
21
21
  runtime: Runtime.new(ruby: @reader.ruby_version, node: nil),
22
22
  env_vars: @reader.env_vars,
@@ -1,34 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "aptfile_parser"
4
+ require_relative "gem_package_map"
5
+
3
6
  module CaptiveStackDetector
4
7
  class SystemPackageDetector
5
- GEM_TO_PACKAGES = {
6
- "ruby-vips" => %w[libvips42 libvips-dev],
7
- "mini_magick" => %w[imagemagick],
8
- "rmagick" => %w[imagemagick],
9
- "wkhtmltopdf-binary" => %w[], # retiré de Debian Trixie, projet upstream abandonné
10
- "sqlite3" => %w[libsqlite3-dev],
11
- }.freeze
12
-
13
8
  def initialize(gemfile:, aptfile:)
14
9
  @gemfile = gemfile.to_s
15
10
  @aptfile = aptfile.to_s
16
11
  end
17
12
 
18
13
  def packages
19
- (from_gemfile + from_aptfile).uniq
14
+ result = (from_gemfile + from_aptfile).uniq
15
+ $stderr.puts "[captive-stack-detector] paquets système détectés : #{result.any? ? result.join(", ") : "aucun"}"
16
+ result
20
17
  end
21
18
 
22
19
  private
23
20
 
24
21
  def from_gemfile
25
- GEM_TO_PACKAGES.each_with_object([]) do |(gem, pkgs), result|
26
- result.concat(pkgs) if @gemfile.match?(/gem ['"]#{Regexp.escape(gem)}['"]/)
22
+ GemPackageMap.matches(@gemfile).each_with_object([]) do |(gem, pkgs), result|
23
+ $stderr.puts "[captive-stack-detector] gem '#{gem}' détecté → #{pkgs.any? ? pkgs.join(", ") : "aucun paquet"}"
24
+ result.concat(pkgs)
27
25
  end
28
26
  end
29
27
 
30
28
  def from_aptfile
31
- @aptfile.lines.map { |line| line.split("#", 2).first.to_s.strip }.reject(&:empty?)
29
+ AptfileParser.parse(@aptfile).each do |pkg|
30
+ $stderr.puts "[captive-stack-detector] Aptfile → paquet '#{pkg}'"
31
+ end
32
32
  end
33
33
  end
34
34
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CaptiveStackDetector
4
- Services = Data.define(:database, :queue)
4
+ Services = Data.define(:database, :queue, :backend)
5
5
  Worker = Data.define(:command)
6
6
  Runtime = Data.define(:ruby, :node)
7
7
  Result = Data.define(:type, :subtype, :services, :worker, :runtime, :env_vars, :system_packages)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CaptiveStackDetector
4
- VERSION = "0.3.2"
4
+ VERSION = "0.4.0"
5
5
  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.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Captive Studio
@@ -19,9 +19,11 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - lib/captive/stack/detector.rb
21
21
  - lib/captive_stack_detector.rb
22
+ - lib/captive_stack_detector/aptfile_parser.rb
22
23
  - lib/captive_stack_detector/env_vars_scanner.rb
23
24
  - lib/captive_stack_detector/file_content_parser.rb
24
25
  - lib/captive_stack_detector/file_reader.rb
26
+ - lib/captive_stack_detector/gem_package_map.rb
25
27
  - lib/captive_stack_detector/gemfile_analyzer.rb
26
28
  - lib/captive_stack_detector/github_api_client.rb
27
29
  - lib/captive_stack_detector/js_stack_detector.rb