firespring_dev_commands 2.1.27.pre.alpha.2 → 2.5.0.pre.alpha.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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/lib/firespring_dev_commands/audit/report.rb +2 -9
  3. data/lib/firespring_dev_commands/docker/status.rb +0 -20
  4. data/lib/firespring_dev_commands/docker.rb +0 -45
  5. data/lib/firespring_dev_commands/node.rb +1 -1
  6. data/lib/firespring_dev_commands/php.rb +12 -28
  7. data/lib/firespring_dev_commands/platform.rb +32 -25
  8. data/lib/firespring_dev_commands/target_process/query.rb +4 -30
  9. data/lib/firespring_dev_commands/target_process.rb +1 -3
  10. data/lib/firespring_dev_commands/templates/docker/application.rb +2 -2
  11. data/lib/firespring_dev_commands/templates/docker/node/application.rb +5 -19
  12. data/lib/firespring_dev_commands/templates/docker/php/application.rb +16 -22
  13. data/lib/firespring_dev_commands/templates/docker/ruby/application.rb +5 -18
  14. data/lib/firespring_dev_commands/version.rb +1 -1
  15. data/lib/firespring_dev_commands.rb +1 -1
  16. metadata +35 -47
  17. data/lib/firespring_dev_commands/bloom_growth/rock.rb +0 -34
  18. data/lib/firespring_dev_commands/bloom_growth/seat.rb +0 -16
  19. data/lib/firespring_dev_commands/bloom_growth/user.rb +0 -43
  20. data/lib/firespring_dev_commands/bloom_growth.rb +0 -132
  21. data/lib/firespring_dev_commands/certificate.rb +0 -59
  22. data/lib/firespring_dev_commands/coverage/base.rb +0 -16
  23. data/lib/firespring_dev_commands/coverage/cobertura.rb +0 -86
  24. data/lib/firespring_dev_commands/coverage/none.rb +0 -21
  25. data/lib/firespring_dev_commands/docker/desktop.rb +0 -59
  26. data/lib/firespring_dev_commands/os.rb +0 -35
  27. data/lib/firespring_dev_commands/port.rb +0 -24
  28. data/lib/firespring_dev_commands/templates/certificate.rb +0 -41
@@ -1,86 +0,0 @@
1
- module Dev
2
- # Module containing different classes for interfacing with coverage files
3
- module Coverage
4
- # Class for checking code coverage using cobertura
5
- class Cobertura < Base
6
- attr_reader :local_filename, :container_filename, :filename, :threshold, :exclude
7
-
8
- def initialize(filename: File.join('coverage', 'cobertura.xml'), threshold: nil, container_path: nil, local_path: nil, exclude: nil)
9
- super()
10
-
11
- @filename = filename
12
- @local_filename = File.join(local_path || '.', @filename)
13
- @container_filename = File.join(container_path || '.', @filename)
14
- @threshold = threshold
15
- @exclude = (exclude || []).map do |it|
16
- next it if it.is_a?(Regex)
17
-
18
- Regex.new(it)
19
- end
20
- end
21
-
22
- # Remove any previous versions of the local file that will be output
23
- # return the phpunit options needed to regenerate the cobertura xml file
24
- def php_options
25
- # Remove any previous coverage info
26
- FileUtils.rm_f(local_filename, verbose: true)
27
-
28
- # Return the needed php commands to generate the cobertura report
29
- %W(--coverage-cobertura #{container_filename})
30
- end
31
-
32
- # Parse the cobertura file and check the lines missed against the desired threshold
33
- def check(application: nil)
34
- # If an application has been specified and the file does not exist locally, attempt to copy it back from the docker container
35
- if application && !File.exist?(local_filename)
36
- container = Dev::Docker::Compose.new.container_by_name(application)
37
- Dev::Docker.new.copy_from_container(container, container_filename, local_filename, required: true)
38
- end
39
-
40
- report = Ox.load(File.read(local_filename))
41
- total_missed = report.coverage.locate('packages/package').sum { |package| parse_package_missed(package) }
42
- puts "Lines missing coverage was #{total_missed}"
43
- puts "Configured threshold was #{threshold}" if threshold
44
- raise 'Code coverage not met' if threshold && total_missed > threshold
45
- end
46
-
47
- # Go through the package and add up all of the lines that were missed
48
- # Ignore if the file was in the exlude list
49
- private def parse_package_missed(package)
50
- filename = package.attributes[:name]
51
- return if exclude.any? { |it| it.match(filename) }
52
-
53
- missed = 0
54
- lines_processed = Set.new
55
- package.locate('classes/class/lines/line').each do |line|
56
- # Don't count lines multiple times
57
- line_number = line.attributes[:number]
58
- next if lines_processed.include?(line_number)
59
-
60
- lines_processed << line_number
61
- missed += 1 unless line.attributes[:hits].to_i.positive?
62
- end
63
- total = lines_processed.length
64
-
65
- sanity_check_coverage_against_cobertura_values(package, missed, total)
66
- missed
67
- end
68
-
69
- # Calculate the coverage percent based off the numbers we got and compare to the
70
- # value cobertura reported. This is meant as a sanity check that we are reading the data correctly
71
- # TODO: This should be removed after the above logic has been vetted
72
- private def sanity_check_coverage_against_cobertura_values(package, missed, total)
73
- line_rate = package.attributes[:'line-rate']
74
- cobertura_reported_coverage = line_rate.to_f
75
- cobertura_reported_precision = line_rate.split('.').last.length
76
-
77
- file_coverage = 0.0
78
- file_coverage = ((total - missed).to_f / total).round(cobertura_reported_precision) if total.positive?
79
- return if file_coverage == cobertura_reported_coverage
80
-
81
- filename = package.attributes[:name]
82
- puts "WARNINNG: #{filename} coverage (#{file_coverage}) differed from what cobertura reported (#{cobertura_reported_coverage})"
83
- end
84
- end
85
- end
86
- end
@@ -1,21 +0,0 @@
1
- module Dev
2
- # Module with a variety of coverage methods for different languages
3
- module Coverage
4
- # Class which provides methods to effectvely skip coverage
5
- class None < Base
6
- def initialize(*)
7
- super()
8
- end
9
-
10
- # Returns the php options for generating code coverage file
11
- def php_options
12
- []
13
- end
14
-
15
- # Checks the code coverage against the defined threshold
16
- def check(*)
17
- puts 'Coverage not configured'
18
- end
19
- end
20
- end
21
- end
@@ -1,59 +0,0 @@
1
- module Dev
2
- class Docker
3
- # Class for configuring docker desktop
4
- # This is mostly around configuring the docker URL correctly
5
- class Desktop
6
- # A snippet of a docker compose file which forwards a socket to a local port so that we can read it in the docker library
7
- WIN_TCP_COMPOSE_CONTENT = "
8
- ---
9
- version: '3.8'
10
- services:
11
- windows_tcp:
12
- image: alpine/socat
13
- network_mode: bridge
14
- ports:
15
- - 127.0.0.1:23750:2375
16
- volumes:
17
- - /var/run/docker.sock:/var/run/docker.sock
18
- command: tcp-listen:2375,reuseaddr,fork unix-connect:/var/run/docker.sock
19
- restart: always".freeze
20
-
21
- # Set up the local ports/sockets correctly based off of the os type
22
- def configure
23
- if Dev::Os.new.windows?
24
- # Start up a small proxy container if running Docker Desktop on windows
25
- # This is needed because the docker api library cannot connect to the windows socket
26
- unless Dev::Port.new('127.0.0.1', 23_750).open?
27
- LOG.info('Starting local proxy port for docker')
28
-
29
- # Write the compose data to a tmp file
30
- tmp_compose_file = Tempfile.new('windows_tcp')
31
- tmp_compose_file.write(WIN_TCP_COMPOSE_CONTENT)
32
- tmp_compose_file.close
33
-
34
- # Start up the container
35
- Dev::Docker::Compose.new(
36
- compose_files: tmp_compose_file.path,
37
- options: ['--detach'],
38
- project_name: 'proxy'
39
- ).up
40
-
41
- # Wait 1 second before we continue
42
- sleep 1
43
- end
44
-
45
- # Configure the docker url to use 23750 on windows
46
- ::Docker.url = 'tcp://127.0.0.1:23750'
47
-
48
- else
49
- # If a user based socket has been defined, default to that
50
- ::Docker.url = if File.exist?("/#{Dir.home}/.docker/run/docker.sock")
51
- "unix://#{Dir.home}/.docker/run/docker.sock"
52
- elsif File.exist?("/#{Dir.home}/.docker/desktop/docker.sock")
53
- "unix://#{Dir.home}/.docker/desktop/docker.sock"
54
- end
55
- end
56
- end
57
- end
58
- end
59
- end
@@ -1,35 +0,0 @@
1
- module Dev
2
- # Class containing methods for determining operating system information
3
- class Os
4
- attr_accessor :os
5
-
6
- def initialize
7
- @os = ::RbConfig::CONFIG['host_os']
8
- end
9
-
10
- # Returns true if the host_os contains windowsy text
11
- def windows?
12
- os.match?(/(mingw|mswin|windows)/i)
13
- end
14
-
15
- # Returns true if the host_os contains darwinsy text
16
- def darwin?
17
- os.match?(/(darwin|mac os)/i)
18
- end
19
-
20
- # Returns true if the host_os contains macsy text
21
- def mac?
22
- darwin?
23
- end
24
-
25
- # Returns true if the host_os contains nixy text
26
- def nix?
27
- os.match?(/(linux|bsd|aix|solaris)/i)
28
- end
29
-
30
- # Returns true if the host_os contains cygwiny text
31
- def cygwin?
32
- os.match?(/(cygwin)/i)
33
- end
34
- end
35
- end
@@ -1,24 +0,0 @@
1
- module Dev
2
- # Class containing methods for actions to be taken on ports
3
- class Port
4
- attr_accessor :ip_address, :port
5
-
6
- def initialize(ip_address, port)
7
- @ip_address = ip_address
8
- @port = port
9
- end
10
-
11
- # Returns true if the port is open
12
- # Returns false otherwise
13
- def open?(timeout = 1)
14
- Timeout.timeout(timeout) do
15
- TCPSocket.new(ip_address, port).close
16
- return true
17
- end
18
-
19
- false
20
- rescue Timeout::Error, Errno::ECONNREFUSED, Errno::EHOSTUNREACH
21
- false
22
- end
23
- end
24
- end
@@ -1,41 +0,0 @@
1
- require_relative 'base_interface'
2
-
3
- module Dev
4
- module Template
5
- # Class contains rake templates for managing configured certificates
6
- class Certificate < Dev::Template::BaseInterface
7
- attr_reader :domains, :email, :paths
8
-
9
- def initialize(domains, email:, paths:, exclude: [])
10
- @domains = domains
11
- @email = email
12
- @paths = Array(paths)
13
-
14
- super(exclude:)
15
- end
16
-
17
- # Create the rake task for the generate method
18
- def create_generate_task!
19
- # Have to set a local variable to be accessible inside of the instance_eval block
20
- domains = @domains
21
- email = @email
22
- paths = @paths
23
- exclude = @exclude
24
-
25
- DEV_COMMANDS_TOP_LEVEL.instance_eval do
26
- return if exclude.include?(:generate)
27
-
28
- namespace :certificate do
29
- desc 'Requests a new certificate for the configured domain using the route53 validation and deposits it in the configured paths'
30
- task generate: %w(init_docker ensure_aws_credentials) do
31
- Dev::Docker.new.pull_image('certbot/dns-route53', 'latest')
32
- c = Dev::Certificate.new(domains, email)
33
- c.request
34
- paths.each { |path| c.save(path) }
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end