captive-stack-detector 0.3.3 → 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: f08d442c931ad8580e07e66dcc9eecf1874efc3bb0efc5a83ca12168316eaccc
4
- data.tar.gz: caebf39fbe99eb829c53d42c2d54c73358a382f80e69eba3c44e01794b014ae0
3
+ metadata.gz: ece3c2210380284f962da264f7e16f96a649ddfdb55c110baf0f1065a6c0d5b9
4
+ data.tar.gz: 29e1ffa94c58e29b44a2e868195e76593592204cb2449e1e46b19c6fc6069b03
5
5
  SHA512:
6
- metadata.gz: 6bf999ee430b24a763c7f41e7123c0ff47867cbac8686e4767c009f9be1aae58d42222bafc279987cada27bc905ea42117a0a81a36bd1c1dff3b2df643e4ec67
7
- data.tar.gz: 5edc3341ac4071a03ad9d6e1d7e65fcc5f029a10da04f26b1d344833d07b971e5d2920ea60fd26e7f2b23cf5e15eb5aa3a8b5b1bb50d3da817233a2d71acb274
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,15 +1,10 @@
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
@@ -24,18 +19,16 @@ module CaptiveStackDetector
24
19
  private
25
20
 
26
21
  def from_gemfile
27
- GEM_TO_PACKAGES.each_with_object([]) do |(gem, pkgs), result|
28
- next unless @gemfile.match?(/gem ['"]#{Regexp.escape(gem)}['"]/)
29
-
22
+ GemPackageMap.matches(@gemfile).each_with_object([]) do |(gem, pkgs), result|
30
23
  $stderr.puts "[captive-stack-detector] gem '#{gem}' détecté → #{pkgs.any? ? pkgs.join(", ") : "aucun paquet"}"
31
24
  result.concat(pkgs)
32
25
  end
33
26
  end
34
27
 
35
28
  def from_aptfile
36
- packages = @aptfile.lines.map { |line| line.split("#", 2).first.to_s.strip }.reject(&:empty?)
37
- packages.each { |pkg| $stderr.puts "[captive-stack-detector] Aptfile → paquet '#{pkg}'" }
38
- packages
29
+ AptfileParser.parse(@aptfile).each do |pkg|
30
+ $stderr.puts "[captive-stack-detector] Aptfile → paquet '#{pkg}'"
31
+ end
39
32
  end
40
33
  end
41
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.3"
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.3
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