miriamtech-gocd 0.2.8 → 0.5.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: 82b62a9341f4185b558cd884679d276a927590e9bf21441d5d48ba3a76008263
4
- data.tar.gz: c65cf31ead5aeb01ac0203e9868e6567df69b276ebab508ecd4cf22cb510f5be
3
+ metadata.gz: 7af70e5661f15646ef7e1a0ac50f4c00f34993858532ce46e4262ff3105630a6
4
+ data.tar.gz: 578521f3e2c1447f495ad1e492c20c77513808edbb12330380e442605e6db561
5
5
  SHA512:
6
- metadata.gz: 29cd1f5d5eb989ab00257bbd0723c1467ac37e4bede60cf6d5f44b4333dd993f1cc0aa03ec5db834729426c890cb694065d91abf1c7ec7ad6ce740ed5ff49f0a
7
- data.tar.gz: b3f67cbbf2ccafab37e63315bf5d589b55a8d9df92ead65cc53cfb87a4e1ab9028067f61d40fe288ad222ef0a45d849ad2feb1a258307c968a999be22da98dcb
6
+ metadata.gz: 5004e2f94cce153b400e3cc925063563d3b5aa0d3ea0946adb38016fa4f836b8018aa5dc354b036d76b14d66afe490d62a3226d095f87d5cbd107c7b79401afe
7
+ data.tar.gz: 1da4ae9b2a174746079bce2327d9d6d5f1d92e34dc4343ce931e2c9c42253f8b219772e5753e1b2e468c2da99652773f04302a62d17585636722c1c6b850aa73
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- miriamtech-gocd (0.2.8)
4
+ miriamtech-gocd (0.4.0)
5
5
  rake (>= 10.0)
6
6
 
7
7
  GEM
@@ -14,7 +14,7 @@ GEM
14
14
  parser (3.0.1.0)
15
15
  ast (~> 2.4.1)
16
16
  rainbow (3.0.0)
17
- rake (13.0.3)
17
+ rake (13.0.6)
18
18
  regexp_parser (2.1.1)
19
19
  rexml (3.2.5)
20
20
  rspec-expectations (3.9.2)
@@ -53,4 +53,4 @@ DEPENDENCIES
53
53
  rubocop-minitest
54
54
 
55
55
  BUNDLED WITH
56
- 2.0.2
56
+ 2.2.31
@@ -1,3 +1,5 @@
1
+ require 'securerandom'
2
+
1
3
  module MiriamTech
2
4
  module GoCD
3
5
  module DSL
@@ -10,7 +12,7 @@ module MiriamTech
10
12
  end
11
13
 
12
14
  def with_artifacts_volume(prefix = project_name)
13
- artifacts_volume = sanitized_volume_name("#{prefix}#{build_tag}")
15
+ artifacts_volume = sanitized_volume_name("#{prefix}_#{random_hex}")
14
16
  docker "volume create #{artifacts_volume}"
15
17
  yield artifacts_volume
16
18
  ensure
@@ -34,6 +36,10 @@ module MiriamTech
34
36
  def sanitized_volume_name(name)
35
37
  name.gsub(/[^-_.A-Za-z0-9]/, '_')
36
38
  end
39
+
40
+ def random_hex
41
+ SecureRandom.hex
42
+ end
37
43
  end
38
44
  end
39
45
  end
@@ -3,21 +3,39 @@ module MiriamTech
3
3
  FALSY_ENV_VALUES = (%w[0 f false n no] + ['']).freeze
4
4
  module DSL
5
5
  def project_name(env = ENV)
6
- (env['GO_PIPELINE_NAME'] || root_path.basename.to_s).downcase
6
+ pipeline_name = env['GO_PIPELINE_NAME']
7
+ stage_name = env['GO_STAGE_NAME']
8
+ job_name = env['GO_JOB_NAME']
9
+ name = root_path.basename.to_s
10
+
11
+ if pipeline_name
12
+ name = pipeline_name
13
+ name += "-#{stage_name}" if stage_name
14
+ name += "-#{job_name}" if job_name
15
+ end
16
+
17
+ name.downcase
7
18
  end
8
19
 
9
20
  def build_tag(env = ENV)
10
21
  @build_tag ||= generate_build_tag(env)
11
22
  end
12
23
 
24
+ def build_counter(env = ENV)
25
+ @build_counter ||= generate_build_counter(env)
26
+ end
27
+
13
28
  def docker(string)
14
29
  sh "docker #{string}"
15
30
  end
16
31
 
17
- def docker_build_arguments(env = ENV)
32
+ def docker_build_arguments(env = ENV, build_args: {})
18
33
  args = ['--force-rm']
19
34
  no_cache_arg = env['DOCKER_BUILD_NO_CACHE']
20
35
  args << '--no-cache' if no_cache_arg && !FALSY_ENV_VALUES.include?(no_cache_arg)
36
+ build_args.each do |key, value|
37
+ args << "--build-arg #{key}=#{value}"
38
+ end
21
39
  args
22
40
  end
23
41
 
@@ -30,13 +48,13 @@ module MiriamTech
30
48
  private
31
49
 
32
50
  def generate_build_tag(env)
33
- revision = env['GO_PIPELINE_COUNTER']
34
- if revision
35
- @build_tag = revision ? ":#{revision}" : ''
36
- else
37
- @build_tag = ''
38
- ''
39
- end
51
+ revision = env['GO_REVISION_SOURCE']
52
+ revision ? ":#{revision}" : ''
53
+ end
54
+
55
+ def generate_build_counter(env)
56
+ counter = env['GO_PIPELINE_COUNTER']
57
+ counter ? ":#{counter}" : ''
40
58
  end
41
59
  end
42
60
  end
@@ -17,13 +17,10 @@ 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
21
- return unless revision_number > number_to_keep
22
- images = `docker images --format "{{.Repository}}:{{.Tag}}" #{image_name}`.split(/\s+/)
23
- images.each do |image|
24
- next unless image.match(/:(\d+)\z/)
25
- next unless Regexp.last_match(1).to_i < revision_number - number_to_keep
26
- docker "image rm #{image}"
20
+ images = `docker images --format '"{{.CreatedAt}}" id:{{.ID}}' #{image_name} | sort -r`.split("\n")
21
+ images.collect { |each| each.split(':').last }.uniq.each_with_index do |image, index|
22
+ next if index <= number_to_keep
23
+ docker "image rm --force #{image}"
27
24
  end
28
25
  end
29
26
  end
@@ -8,26 +8,31 @@ module MiriamTech
8
8
 
9
9
  def define_gocd_tasks(
10
10
  image_name,
11
- revisions_to_keep: 10
11
+ revisions_to_keep: 10,
12
+ build_args: {}
12
13
  )
13
14
 
14
15
  task :default => [:test]
15
- task :full => [:clobber, :build]
16
+ task :full => [:destroy_containers, :build]
16
17
 
17
18
  task :environment do
18
19
  ENV['BUILD_TAG'] = build_tag
19
20
  end
20
21
 
21
22
  CLEAN.add("#{root_path}/test/reports")
22
- task :clean => [:environment]
23
- task :clobber => [:environment, :cleanup_old_images]
23
+ task :stop_containers => [:environment]
24
+ task :destroy_containers => [:environment, :clean, :cleanup_old_images]
25
+
26
+ # These are here for compatibility
27
+ task :clean => :stop_containers
28
+ task :clobber => :destroy_containers
24
29
 
25
30
  if compose_file.exist?
26
- task :clean do
31
+ task :stop_containers => [:environment] do
27
32
  docker_compose 'stop'
28
33
  end
29
34
 
30
- task :clobber do
35
+ task :destroy_containers => [:stop_containers] do
31
36
  docker_compose 'rm -fv'
32
37
  end
33
38
  end
@@ -37,10 +42,23 @@ module MiriamTech
37
42
  end
38
43
 
39
44
  task :build => :environment do
40
- docker "build #{docker_build_arguments.join(' ')} -t #{image_name}#{build_tag} #{root_path}"
45
+ docker "build #{docker_build_arguments(build_args: build_args).join(' ')} -t #{image_name}#{build_tag} -t #{image_name}#{build_counter} #{root_path}"
46
+ end
47
+
48
+ task :test => [:environment, :destroy_containers] do
49
+ at_exit { Rake::Task[:destroy_containers].execute }
41
50
  end
42
51
 
43
- task :test => :environment
52
+ task :save, [:path] => :environment do | t, args |
53
+ args.with_defaults(path: File.join(root_path, '.docker', 'image.tar'))
54
+ FileUtils.mkdir_p File.dirname(args[:path])
55
+ docker "save #{image_name}#{build_tag} -o #{args[:path]}"
56
+ end
57
+
58
+ task :load, :path do | t, args |
59
+ args.with_defaults(path: File.join(root_path, '.docker', 'image.tar'))
60
+ docker "load -i #{args[:path]}"
61
+ end
44
62
 
45
63
  task :push do
46
64
  push(image_name)
@@ -1,5 +1,5 @@
1
1
  module MiriamTech
2
2
  module GoCD
3
- VERSION = '0.2.8'.freeze
3
+ VERSION = '0.5.0'.freeze
4
4
  end
5
5
  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.8
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Treis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-21 00:00:00.000000000 Z
11
+ date: 2022-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -159,8 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
159
  - !ruby/object:Gem::Version
160
160
  version: '0'
161
161
  requirements: []
162
- rubyforge_project:
163
- rubygems_version: 2.7.6.2
162
+ rubygems_version: 3.2.5
164
163
  signing_key:
165
164
  specification_version: 4
166
165
  summary: Utilities for building apps in Docker containers with GoCD