Class: DocktorRails::Checks::ComposePlatformRisk

Inherits:
BaseCheck
  • Object
show all
Defined in:
lib/docktor_rails/checks/compose_platform_risk.rb

Instance Method Summary collapse

Methods inherited from BaseCheck

#name

Instance Method Details

#idObject



9
10
11
# File 'lib/docktor_rails/checks/compose_platform_risk.rb', line 9

def id
  "compose.platform_risk"
end

#run(ctx) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/docktor_rails/checks/compose_platform_risk.rb', line 13

def run(ctx)
  root = ctx.fetch(:root)
  platform = ctx[:platform]
  compose_path = Compose.find_file(root)
  return pass("No compose file found (skipping platform check)") unless compose_path

  return pass("Unknown host architecture (skipping platform risk)") if platform.nil? || platform.arch == :unknown

  doc = Compose.load_file(compose_path)
  services = Compose.services(doc)

  pins = services.filter_map do |name, svc|
    next unless svc.is_a?(Hash)
    p = svc["platform"]
    next unless p.is_a?(String)
    [name, p]
  end

  return pass("No compose platform pins") if pins.empty?

  risky = pins.select { |_name, p| mismatch?(platform, p) }

  if risky.empty?
    pass("Compose platform pins match host")
  else
    warn("Compose platform pins may not match this host", files: risky.map { |n, p| "#{n}: #{p}" })
  end
end