miriamtech-gocd 0.2.8 → 0.3.0

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: 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