miriamtech-gocd 0.2.7 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1d722ba99c05bc4ee1fa260006ece0b86f16293ae46962e65032b38c4af3e5f
4
- data.tar.gz: 3aceb0eac5244fa478caaa7893677e33bc8368c72f690127034c14b5a82ccb5d
3
+ metadata.gz: 82b62a9341f4185b558cd884679d276a927590e9bf21441d5d48ba3a76008263
4
+ data.tar.gz: c65cf31ead5aeb01ac0203e9868e6567df69b276ebab508ecd4cf22cb510f5be
5
5
  SHA512:
6
- metadata.gz: df45c585d2e5629dfd6c6d6c0a0aa60fc89f3a7be0d358fd8e1cbdb20a28615824c46b831aec4ac9a2566b75f20b1c3f2ef84541455b02ba4255f9a361880e2f
7
- data.tar.gz: 194f1632e39f2b5a463b48aad89f1150c7dce5b534dbf0152b2e6ed8c02d7a19e572056cf514a6d00474c1185a2a2ab6126542c497927dc5c09b4bcb01e67cf2
6
+ metadata.gz: 29cd1f5d5eb989ab00257bbd0723c1467ac37e4bede60cf6d5f44b4333dd993f1cc0aa03ec5db834729426c890cb694065d91abf1c7ec7ad6ce740ed5ff49f0a
7
+ data.tar.gz: b3f67cbbf2ccafab37e63315bf5d589b55a8d9df92ead65cc53cfb87a4e1ab9028067f61d40fe288ad222ef0a45d849ad2feb1a258307c968a999be22da98dcb
data/.gitignore CHANGED
@@ -6,4 +6,4 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
- Gemfile.lock
9
+ /vendor/bundle
data/.rubocop.yml ADDED
@@ -0,0 +1,70 @@
1
+ require:
2
+ - rubocop-minitest
3
+
4
+ AllCops:
5
+ Exclude:
6
+ - '**/bin/*'
7
+ - '**/schema.rb'
8
+ - 'node_modules/**/*'
9
+ - 'vendor/bundle/**/*'
10
+
11
+ Layout/EmptyLineAfterGuardClause:
12
+ Enabled: false
13
+
14
+ Layout/MultilineArrayLineBreaks:
15
+ Enabled: true
16
+
17
+ Layout/MultilineHashKeyLineBreaks:
18
+ Enabled: true
19
+
20
+ Layout/MultilineMethodArgumentLineBreaks:
21
+ Enabled: true
22
+
23
+ Lint/AssignmentInCondition:
24
+ Enabled: false
25
+
26
+ Lint/UnusedBlockArgument:
27
+ AutoCorrect: false
28
+
29
+ Lint/UnusedMethodArgument:
30
+ AutoCorrect: false
31
+
32
+ Metrics/AbcSize:
33
+ Enabled: false
34
+
35
+ Metrics/CyclomaticComplexity:
36
+ Enabled: false
37
+
38
+ Metrics/ClassLength:
39
+ Exclude:
40
+ - test/**/*
41
+
42
+ Metrics/MethodLength:
43
+ Exclude:
44
+ - test/**/*
45
+
46
+ Naming/HeredocDelimiterNaming:
47
+ Enabled: false
48
+
49
+ Style/Documentation:
50
+ Enabled: false
51
+
52
+ Style/FrozenStringLiteralComment:
53
+ Enabled: false
54
+
55
+ Style/HashSyntax:
56
+ Exclude:
57
+ - Rakefile
58
+
59
+ Style/SymbolArray:
60
+ Exclude:
61
+ - Rakefile
62
+
63
+ Style/TrailingCommaInArguments:
64
+ EnforcedStyleForMultiline: comma
65
+
66
+ Style/TrailingCommaInArrayLiteral:
67
+ EnforcedStyleForMultiline: comma
68
+
69
+ Style/TrailingCommaInHashLiteral:
70
+ EnforcedStyleForMultiline: comma
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in miriamtech-gocd.gemspec
4
4
  gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,56 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ miriamtech-gocd (0.2.8)
5
+ rake (>= 10.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ ast (2.4.2)
11
+ diff-lcs (1.4.4)
12
+ minitest (5.11.3)
13
+ parallel (1.20.1)
14
+ parser (3.0.1.0)
15
+ ast (~> 2.4.1)
16
+ rainbow (3.0.0)
17
+ rake (13.0.3)
18
+ regexp_parser (2.1.1)
19
+ rexml (3.2.5)
20
+ rspec-expectations (3.9.2)
21
+ diff-lcs (>= 1.2.0, < 2.0)
22
+ rspec-support (~> 3.9.0)
23
+ rspec-mocks (3.9.1)
24
+ diff-lcs (>= 1.2.0, < 2.0)
25
+ rspec-support (~> 3.9.0)
26
+ rspec-support (3.9.3)
27
+ rubocop (1.13.0)
28
+ parallel (~> 1.10)
29
+ parser (>= 3.0.0.0)
30
+ rainbow (>= 2.2.2, < 4.0)
31
+ regexp_parser (>= 1.8, < 3.0)
32
+ rexml
33
+ rubocop-ast (>= 1.2.0, < 2.0)
34
+ ruby-progressbar (~> 1.7)
35
+ unicode-display_width (>= 1.4.0, < 3.0)
36
+ rubocop-ast (1.4.1)
37
+ parser (>= 2.7.1.5)
38
+ rubocop-minitest (0.11.1)
39
+ rubocop (>= 0.90, < 2.0)
40
+ ruby-progressbar (1.11.0)
41
+ unicode-display_width (2.0.0)
42
+
43
+ PLATFORMS
44
+ ruby
45
+
46
+ DEPENDENCIES
47
+ bundler (~> 2.0)
48
+ minitest (~> 5.0)
49
+ miriamtech-gocd!
50
+ rspec-expectations
51
+ rspec-mocks
52
+ rubocop
53
+ rubocop-minitest
54
+
55
+ BUNDLED WITH
56
+ 2.0.2
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
3
 
4
4
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
+ t.test_files = FileList['test/**/*_test.rb']
8
8
  end
9
9
 
10
10
  task :default => :test
data/bin/rubocop ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby2.5
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rubocop' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rubocop", "rubocop")
@@ -1,2 +1,2 @@
1
- require "miriamtech/gocd/version"
2
- require "miriamtech/gocd/dsl"
1
+ require 'miriamtech/gocd/version'
2
+ require 'miriamtech/gocd/dsl'
@@ -1,17 +1,15 @@
1
1
  module MiriamTech
2
2
  module GoCD
3
3
  module DSL
4
- def capture_artifacts(prefix = project_name, workdir:, path:, &block)
4
+ def capture_artifacts(prefix = project_name, workdir:, path:)
5
5
  with_artifacts_volume(prefix) do |volume_name|
6
- begin
7
6
  yield "-v #{volume_name}:#{workdir}/#{path}"
8
- ensure
9
- copy_artifacts_from_volume(volume_name, local_path: path)
10
- end
7
+ ensure
8
+ copy_artifacts_from_volume(volume_name, local_path: path)
11
9
  end
12
10
  end
13
11
 
14
- def with_artifacts_volume(prefix = project_name, &block)
12
+ def with_artifacts_volume(prefix = project_name)
15
13
  artifacts_volume = sanitized_volume_name("#{prefix}#{build_tag}")
16
14
  docker "volume create #{artifacts_volume}"
17
15
  yield artifacts_volume
@@ -20,7 +18,7 @@ module MiriamTech
20
18
  end
21
19
 
22
20
  def copy_artifacts_from_volume(volume, local_path:)
23
- container_id = `docker create -v #{volume}:/artifacts_volume #{WORKER_IMAGE} cp -a /artifacts_volume /artifacts_tmp`.chomp
21
+ container_id = `docker create -v #{volume}:/artifacts #{WORKER_IMAGE} cp -a /artifacts /artifacts_tmp`.chomp
24
22
  begin
25
23
  docker "start -i #{container_id}"
26
24
  cd root_path do
@@ -34,7 +32,7 @@ module MiriamTech
34
32
  private
35
33
 
36
34
  def sanitized_volume_name(name)
37
- name.gsub(/[^-_\.A-Za-z0-9]/, '_')
35
+ name.gsub(/[^-_.A-Za-z0-9]/, '_')
38
36
  end
39
37
  end
40
38
  end
@@ -1,5 +1,6 @@
1
1
  module MiriamTech
2
2
  module GoCD
3
+ FALSY_ENV_VALUES = (%w[0 f false n no] + ['']).freeze
3
4
  module DSL
4
5
  def project_name(env = ENV)
5
6
  (env['GO_PIPELINE_NAME'] || root_path.basename.to_s).downcase
@@ -13,6 +14,13 @@ module MiriamTech
13
14
  sh "docker #{string}"
14
15
  end
15
16
 
17
+ def docker_build_arguments(env = ENV)
18
+ args = ['--force-rm']
19
+ no_cache_arg = env['DOCKER_BUILD_NO_CACHE']
20
+ args << '--no-cache' if no_cache_arg && !FALSY_ENV_VALUES.include?(no_cache_arg)
21
+ args
22
+ end
23
+
16
24
  def docker_compose(string)
17
25
  cd root_path do
18
26
  sh "docker-compose -p #{project_name} -f docker-compose.yml #{string}"
@@ -22,10 +30,12 @@ module MiriamTech
22
30
  private
23
31
 
24
32
  def generate_build_tag(env)
25
- if revision = env['GO_PIPELINE_COUNTER']
26
- @build_tag =":#{revision}"
33
+ revision = env['GO_PIPELINE_COUNTER']
34
+ if revision
35
+ @build_tag = revision ? ":#{revision}" : ''
27
36
  else
28
- @build_tag = ""
37
+ @build_tag = ''
38
+ ''
29
39
  end
30
40
  end
31
41
  end
@@ -5,4 +5,10 @@ require_relative 'lambda'
5
5
  require_relative 'paths'
6
6
  require_relative 'tasks'
7
7
 
8
- self.extend MiriamTech::GoCD::DSL
8
+ # Add our DSL methods to the top level namespace without polluting the Object inheritance tree.
9
+ # This technique comes from `rake`, see e.g.
10
+ # https://github.com/ruby/rake/blob/11973e8d31f29aee2e40d874206c9240956f86ed/lib/rake/dsl_definition.rb#L195
11
+ #
12
+ # rubocop:disable Style/MixinUsage
13
+ extend MiriamTech::GoCD::DSL
14
+ # rubocop:enable Style/MixinUsage
@@ -1,7 +1,7 @@
1
1
  module MiriamTech
2
2
  module GoCD
3
3
  module DSL
4
- WORKER_IMAGE = 'debian:buster'
4
+ WORKER_IMAGE = 'debian:buster'.freeze
5
5
 
6
6
  def pull(image_name)
7
7
  docker "pull #{image_name}#{build_tag}"
@@ -17,14 +17,13 @@ module MiriamTech
17
17
  end
18
18
 
19
19
  def cleanup_old_images(image_name, number_to_keep)
20
- revision_number = ENV["GO_PIPELINE_COUNTER"].to_i
20
+ revision_number = ENV['GO_PIPELINE_COUNTER'].to_i
21
21
  return unless revision_number > number_to_keep
22
22
  images = `docker images --format "{{.Repository}}:{{.Tag}}" #{image_name}`.split(/\s+/)
23
23
  images.each do |image|
24
24
  next unless image.match(/:(\d+)\z/)
25
- if $1.to_i < revision_number - number_to_keep
26
- docker "image rm #{image}"
27
- end
25
+ next unless Regexp.last_match(1).to_i < revision_number - number_to_keep
26
+ docker "image rm #{image}"
28
27
  end
29
28
  end
30
29
  end
@@ -6,10 +6,11 @@ module MiriamTech
6
6
  def root_path
7
7
  cwd = Pathname.new(File.expand_path('.'))
8
8
  path = Pathname.new(cwd)
9
- begin
9
+ loop do
10
+ break if path.root?
10
11
  return path if path.join('Dockerfile').exist?
11
12
  path = path.parent
12
- end until path.root?
13
+ end
13
14
  cwd
14
15
  end
15
16
 
@@ -4,9 +4,12 @@ require 'rake/clean'
4
4
  module MiriamTech
5
5
  module GoCD
6
6
  module DSL
7
+ # rubocop:disable Style/HashSyntax, Style/SymbolArray, Metrics/MethodLength
8
+
7
9
  def define_gocd_tasks(
8
10
  image_name,
9
- revisions_to_keep: 10)
11
+ revisions_to_keep: 10
12
+ )
10
13
 
11
14
  task :default => [:test]
12
15
  task :full => [:clobber, :build]
@@ -15,17 +18,17 @@ module MiriamTech
15
18
  ENV['BUILD_TAG'] = build_tag
16
19
  end
17
20
 
18
- CLEAN.add(root_path + 'test/reports')
21
+ CLEAN.add("#{root_path}/test/reports")
19
22
  task :clean => [:environment]
20
23
  task :clobber => [:environment, :cleanup_old_images]
21
24
 
22
25
  if compose_file.exist?
23
26
  task :clean do
24
- docker_compose "stop"
27
+ docker_compose 'stop'
25
28
  end
26
29
 
27
30
  task :clobber do
28
- docker_compose "rm -fv"
31
+ docker_compose 'rm -fv'
29
32
  end
30
33
  end
31
34
 
@@ -34,7 +37,7 @@ module MiriamTech
34
37
  end
35
38
 
36
39
  task :build => :environment do
37
- docker "build --force-rm -t #{image_name}#{build_tag} #{root_path}"
40
+ docker "build #{docker_build_arguments.join(' ')} -t #{image_name}#{build_tag} #{root_path}"
38
41
  end
39
42
 
40
43
  task :test => :environment
@@ -53,6 +56,8 @@ module MiriamTech
53
56
  docker("run -it --rm #{image_name} bash")
54
57
  end
55
58
  end
59
+
60
+ # rubocop:enable Style/HashSyntax, Style/SymbolArray, Metrics/MethodLength
56
61
  end
57
62
  end
58
63
  end
@@ -1,5 +1,5 @@
1
1
  module MiriamTech
2
2
  module GoCD
3
- VERSION = "0.2.7"
3
+ VERSION = '0.2.8'.freeze
4
4
  end
5
5
  end
@@ -1,35 +1,38 @@
1
- lib = File.expand_path("lib", __dir__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require "miriamtech/gocd/version"
3
+ require 'miriamtech/gocd/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = "miriamtech-gocd"
6
+ spec.name = 'miriamtech-gocd'
7
7
  spec.version = MiriamTech::GoCD::VERSION
8
- spec.authors = ["Ken Treis"]
9
- spec.email = ["ken@miriamtech.com"]
8
+ spec.authors = ['Ken Treis']
9
+ spec.email = ['ken@miriamtech.com']
10
10
 
11
- spec.summary = %q{Utilities for building apps in Docker containers with GoCD}
12
- spec.homepage = "https://www.miriamtech.com"
11
+ spec.summary = 'Utilities for building apps in Docker containers with GoCD'
12
+ spec.homepage = 'https://www.miriamtech.com'
13
13
 
14
- spec.metadata["allowed_push_host"] = "https://rubygems.org"
14
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
15
15
 
16
- spec.metadata["homepage_uri"] = spec.homepage
17
- spec.metadata["source_code_uri"] = "https://github.com/miriamtech/gocd"
18
- spec.metadata["changelog_uri"] = "https://github.com/miriamtech/gocd/blob/master/CHANGELOG.md"
16
+ spec.metadata['homepage_uri'] = spec.homepage
17
+ spec.metadata['source_code_uri'] = 'https://github.com/miriamtech/gocd'
18
+ spec.metadata['changelog_uri'] = 'https://github.com/miriamtech/gocd/blob/master/CHANGELOG.md'
19
19
 
20
20
  # Specify which files should be added to the gem when it is released.
21
21
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
22
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
23
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
24
24
  end
25
- spec.bindir = "exe"
25
+ spec.bindir = 'exe'
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
- spec.require_paths = ["lib"]
27
+ spec.require_paths = ['lib']
28
28
 
29
- spec.add_dependency "rake", ">= 10.0"
29
+ spec.required_ruby_version = '~> 2.5'
30
+ spec.add_dependency 'rake', '>= 10.0'
30
31
 
31
- spec.add_development_dependency "bundler", "~> 2.0"
32
- spec.add_development_dependency "minitest", "~> 5.0"
32
+ spec.add_development_dependency 'bundler', '~> 2.0'
33
+ spec.add_development_dependency 'minitest', '~> 5.0'
33
34
  spec.add_development_dependency 'rspec-expectations'
34
35
  spec.add_development_dependency 'rspec-mocks'
36
+ spec.add_development_dependency 'rubocop'
37
+ spec.add_development_dependency 'rubocop-minitest'
35
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miriamtech-gocd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Treis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-24 00:00:00.000000000 Z
11
+ date: 2021-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-minitest
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
83
111
  description:
84
112
  email:
85
113
  - ken@miriamtech.com
@@ -88,12 +116,15 @@ extensions: []
88
116
  extra_rdoc_files: []
89
117
  files:
90
118
  - ".gitignore"
119
+ - ".rubocop.yml"
91
120
  - ".travis.yml"
92
121
  - CHANGELOG.md
93
122
  - Gemfile
123
+ - Gemfile.lock
94
124
  - README.md
95
125
  - Rakefile
96
126
  - bin/console
127
+ - bin/rubocop
97
128
  - bin/run_tests.sh
98
129
  - bin/setup
99
130
  - lib/miriamtech/gocd.rb
@@ -119,9 +150,9 @@ require_paths:
119
150
  - lib
120
151
  required_ruby_version: !ruby/object:Gem::Requirement
121
152
  requirements:
122
- - - ">="
153
+ - - "~>"
123
154
  - !ruby/object:Gem::Version
124
- version: '0'
155
+ version: '2.5'
125
156
  required_rubygems_version: !ruby/object:Gem::Requirement
126
157
  requirements:
127
158
  - - ">="