build-labels 0.0.81 → 0.0.83

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trivy-runner.rb +14 -15
  3. data/lib/version.rb +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 476e27617813a76b8dc23859333d42a05d7be58b318a565e20d6df009dc41b4d
4
- data.tar.gz: e26ea40307746c5b3201fad92fe47a9ca57c489f9ec3b7dbe0aaa88094baa653
3
+ metadata.gz: adfc440fd1f54d1424774cf6377a3b30707f3abf462685f26fdae9d95741a423
4
+ data.tar.gz: e0a4992ef8ef86adb7c66014fc55a4056a60ca6cc8158dfb3f872a58db4f5cae
5
5
  SHA512:
6
- metadata.gz: 3f3f93bbe70d686fef054fca76c6238d2d2142147d1b0861183a779480fb81971499c177acf7779d03c15909582b98552cf9186e737ae448bf096a76cb64a584
7
- data.tar.gz: a863e23dab5dc2ab15e462943e5cf24b25310f3b096929f02faac1038483e274545a58b49f671d489db896a6d285fb7573950266cb7458db69445cf3a4c45fd4
6
+ metadata.gz: 11de26c783203088ca06003f996122260c816a1a38e67cbe58cde402580a266bd94f1cffbe67d96ca00b2e0e448ebbd68ef7c2184ae8319cf7177985078d9244
7
+ data.tar.gz: fe69374c18692ca262fa1252e626344529a1e75f3e49d126c7768bde01c626e42df46ac581ae19982ad23a598946d843a69d8e1d9f7b4eddaec0d76699f62650
data/lib/trivy-runner.rb CHANGED
@@ -5,28 +5,25 @@ require 'yaml'
5
5
  require_relative 'version'
6
6
 
7
7
  class TrivyRunner
8
- SEVERITIES = %w[UNKNOWN LOW MEDIUM HIGH CRITICAL].freeze
9
8
  IMAGE_ID = /\Asha256:[0-9a-f]{64}\z/
10
9
 
11
10
  def run(args)
12
11
  file = 'bake.yml'
13
12
  metadata_file = nil
14
- severity = %w[HIGH CRITICAL]
13
+ tty = true
15
14
  parser = OptionParser.new do |options|
16
- options.banner = 'Usage: trivy-runner -f BAKE_FILE --metadata-file FILE [TARGET/GROUP ...]'
15
+ options.banner = 'Usage: trivy-runner -f BAKE_FILE --metadata-file FILE [TARGET/GROUP ...] [-- TRIVY_OPTIONS ...]'
16
+ options.separator 'Options after -- are forwarded to trivy image.'
17
17
  options.on('-f', '--file FILE', 'Bake or Compose file (default: bake.yml)') { file = _1 }
18
18
  options.on('--metadata-file FILE', 'Buildx metadata from the local build') { metadata_file = _1 }
19
19
  options.on('--image-src SOURCE', %w[docker], 'Image source (default: docker)')
20
- options.on('--fail-on SEVERITIES', Array, 'Fail on these severities (default: HIGH,CRITICAL)') do |values|
21
- severity = values.map { _1.strip.upcase }.uniq
22
- if severity.empty? || (severity - SEVERITIES).any?
23
- raise OptionParser::InvalidArgument, values.join(',')
24
- end
25
- end
20
+ options.on('--[no-]tty', 'Enable terminal output and Trivy table colors (default: enabled)') { tty = _1 }
26
21
  options.on('-v', '--version', 'Print version') { puts BuildLabels::Builder::VERSION; return 0 }
27
22
  options.on('-h', '--help', 'Print help') { puts options; return 0 }
28
23
  end
29
- targets = parser.parse!(args.dup)
24
+ separator = args.index('--') || args.length
25
+ trivy_args = args.drop(separator + 1)
26
+ targets = parser.parse!(args.take(separator))
30
27
  raise OptionParser::MissingArgument, '--metadata-file' unless metadata_file
31
28
  return 0 if targets.empty? && empty_compose?(file)
32
29
 
@@ -36,10 +33,12 @@ class TrivyRunner
36
33
  return 0 if images.empty?
37
34
 
38
35
  verify_images(images)
39
- images.values.uniq.each do |image_id|
40
- return 1 unless scan(image_id, severity)
36
+ images.group_by { |_, image_id| image_id }.each do |image_id, entries|
37
+ warn "\n\e[36m=== Trivy scan: #{entries.map(&:first).join(', ')} ===\nImage ID: #{image_id}\e[0m"
38
+ return 1 unless scan(image_id, trivy_args, tty)
41
39
  end
42
40
  verify_images(images)
41
+ warn "\e[32mTrivy checks passed.\e[0m"
43
42
  0
44
43
  rescue StandardError => error
45
44
  warn error.message
@@ -48,15 +47,15 @@ class TrivyRunner
48
47
 
49
48
  private
50
49
 
51
- def scan(image_id, severity)
50
+ def scan(image_id, trivy_args, tty)
52
51
  environment = ENV.keys.grep(/\ATRIVY_/) - %w[TRIVY_IMAGE]
53
52
  cache_dir = ENV.fetch('TRIVY_CACHE_DIR', '/root/.cache/trivy')
54
- system('docker', 'run', '--rm', '--pull', 'always',
53
+ system('docker', 'run', '--rm', '--pull', 'always', *(tty ? ['--tty'] : []),
55
54
  '--mount', 'type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock,readonly',
56
55
  '--mount', "type=volume,src=trivy-cache,dst=#{cache_dir}",
57
56
  *environment.flat_map { ['--env', _1] }, ENV.fetch('TRIVY_IMAGE', 'aquasec/trivy'),
58
57
  'image', '--cache-dir', cache_dir, '--image-src', 'docker', '--scanners', 'vuln',
59
- '--severity', severity.join(','), '--exit-code', '1', image_id)
58
+ '--exit-code', '1', *trivy_args, image_id)
60
59
  end
61
60
 
62
61
  def empty_compose?(file)
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module BuildLabels
2
2
  class Builder
3
- VERSION = '0.0.81'
3
+ VERSION = '0.0.83'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: build-labels
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.81
4
+ version: 0.0.83
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artyom B