miriamtech-gocd 0.2.8 → 0.3.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: 9f793b1d04ccfb06de74c6ce2cb193465fceab73cea6eec430fdba9fdc70914b
4
+ data.tar.gz: d2cbd3b72c3eeef2dd71fa92cf5972cc585e9e68d86d9fd0475678324b500e84
5
5
  SHA512:
6
- metadata.gz: 29cd1f5d5eb989ab00257bbd0723c1467ac37e4bede60cf6d5f44b4333dd993f1cc0aa03ec5db834729426c890cb694065d91abf1c7ec7ad6ce740ed5ff49f0a
7
- data.tar.gz: b3f67cbbf2ccafab37e63315bf5d589b55a8d9df92ead65cc53cfb87a4e1ab9028067f61d40fe288ad222ef0a45d849ad2feb1a258307c968a999be22da98dcb
6
+ metadata.gz: a6c30bad571ed57e23fe61a300c8994d19fa40edd697f33dc449a5669b97a2213f0d14db3cd9896b8bd36cc89728ae02bdfd0f27ab8c4e5d6d45b78bb4427597
7
+ data.tar.gz: ab5fa74f84b309d6f5daabfaf5a157f54f0245c7e62284157a98c40d285bb8b88acab36c796b0d76e66d910307ef781771a834c27657225395cd93186bf6da85
@@ -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
@@ -10,14 +10,21 @@ module MiriamTech
10
10
  @build_tag ||= generate_build_tag(env)
11
11
  end
12
12
 
13
+ def build_counter(env = ENV)
14
+ @build_counter ||= generate_build_counter(env)
15
+ end
16
+
13
17
  def docker(string)
14
18
  sh "docker #{string}"
15
19
  end
16
20
 
17
- def docker_build_arguments(env = ENV)
21
+ def docker_build_arguments(env = ENV, build_args: {})
18
22
  args = ['--force-rm']
19
23
  no_cache_arg = env['DOCKER_BUILD_NO_CACHE']
20
24
  args << '--no-cache' if no_cache_arg && !FALSY_ENV_VALUES.include?(no_cache_arg)
25
+ build_args.each do |key, value|
26
+ args << "--build-arg #{key}=#{value}"
27
+ end
21
28
  args
22
29
  end
23
30
 
@@ -30,13 +37,13 @@ module MiriamTech
30
37
  private
31
38
 
32
39
  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
40
+ revision = env['GO_REVISION_SOURCE']
41
+ revision ? ":#{revision}" : ''
42
+ end
43
+
44
+ def generate_build_counter(env)
45
+ counter = env['GO_PIPELINE_COUNTER']
46
+ counter ? ":#{counter}" : ''
40
47
  end
41
48
  end
42
49
  end
@@ -17,13 +17,12 @@ 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.each_with_index do |image, index|
22
+ next if index >= number_to_keep
23
+ match = image.match(/id:(.*)\z/)
24
+ next unless match
25
+ docker "image rm --force #{match[1]}"
27
26
  end
28
27
  end
29
28
  end
@@ -8,11 +8,12 @@ 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
@@ -20,14 +21,17 @@ module MiriamTech
20
21
 
21
22
  CLEAN.add("#{root_path}/test/reports")
22
23
  task :clean => [:environment]
23
- task :clobber => [:environment, :cleanup_old_images]
24
+ task :destroy_containers => [:environment, :clean, :cleanup_old_images]
25
+
26
+ # This is here for compatibility
27
+ task :clobber => :destroy_containers
24
28
 
25
29
  if compose_file.exist?
26
30
  task :clean do
27
31
  docker_compose 'stop'
28
32
  end
29
33
 
30
- task :clobber do
34
+ task :destroy_containers do
31
35
  docker_compose 'rm -fv'
32
36
  end
33
37
  end
@@ -37,10 +41,23 @@ module MiriamTech
37
41
  end
38
42
 
39
43
  task :build => :environment do
40
- docker "build #{docker_build_arguments.join(' ')} -t #{image_name}#{build_tag} #{root_path}"
44
+ docker "build #{docker_build_arguments(build_args: build_args).join(' ')} -t #{image_name}#{build_tag} -t #{image_name}#{build_counter} #{root_path}"
45
+ end
46
+
47
+ task :test => [:environment, :destroy_containers] do
48
+ at_exit { Rake::Task[:destroy_containers].execute }
41
49
  end
42
50
 
43
- task :test => :environment
51
+ task :save, [:path] => :environment do | t, args |
52
+ args.with_defaults(path: File.join(root_path, '.docker', 'image.tar'))
53
+ FileUtils.mkdir_p File.dirname(args[:path])
54
+ docker "save #{image_name}#{build_tag} -o #{args[:path]}"
55
+ end
56
+
57
+ task :load, :path do | t, args |
58
+ args.with_defaults(path: File.join(root_path, '.docker', 'image.tar'))
59
+ docker "load -i #{args[:path]}"
60
+ end
44
61
 
45
62
  task :push do
46
63
  push(image_name)
@@ -1,5 +1,5 @@
1
1
  module MiriamTech
2
2
  module GoCD
3
- VERSION = '0.2.8'.freeze
3
+ VERSION = '0.3.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.3.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: 2021-10-08 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