miriamtech-gocd 0.1.0 → 0.2.4

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: 90f71635373adde9608df1adc1c8f6d9049ba4cb4b8d0701685b6d9765149f60
4
- data.tar.gz: b1a5730065101e6c5a878ffc0ada32e63d38bac6e0b3e51af3273e155abb176b
3
+ metadata.gz: 7af105d0fe88fb0fbcb692f0544c4d8e0dc13ba2215aacc966fe301f1b561702
4
+ data.tar.gz: da1f9a676b5d24d63f3cd4301a042a1077894e63d71415d348b7ba3ad6f68b0a
5
5
  SHA512:
6
- metadata.gz: a8599fd38d61b862666129dbb371ba6a1c3dc875c9e1df30a864b96e2b516c8b3f076839f24bef74b1c1fd9eb6edba8261c6e9e65ee0e7bdf0b2fe066c15660b
7
- data.tar.gz: e8cc17e24f9d678a82dc2909385401af2b8f5c64ae1a990b0a7092656f4ddc1bd9106884f633678f64016697ed791ccaef4786a10f5cd7ad257a1134d23ce4fd
6
+ metadata.gz: b66b0848bd393d63fb6983d5d2f14e1ad636b55b4877cde6749abe0788299624eb8738191387ba216506820e1598ca3f84a8c5e86e73b79c6b62db2c4b959627
7
+ data.tar.gz: 60515e501ddbdecc09810703a91721cf0d1f094df762549847f625db7fc62028b0465540a391e5d1e6563b663295f71b4ada532606b23345bd32b3d1c9b12b8b
@@ -20,6 +20,8 @@ if [ ! -z "${TEST_NAME}" ]; then
20
20
  fi
21
21
  echo "Running: ${METHOD_NAME}"
22
22
  ${COMMAND} ${FILENAME} --name "${METHOD_NAME}"
23
- else
23
+ elif [ ! -z "${FILENAME}" ]; then
24
24
  ${COMMAND} ${FILENAME}
25
+ else
26
+ rake
25
27
  fi
@@ -0,0 +1,41 @@
1
+ module MiriamTech
2
+ module GoCD
3
+ module DSL
4
+ def capture_artifacts(prefix = project_name, workdir:, path:, &block)
5
+ with_artifacts_volume(prefix) do |volume_name|
6
+ begin
7
+ yield "-v #{volume_name}:#{workdir}/#{path}"
8
+ ensure
9
+ copy_artifacts_from_volume(volume_name, local_path: path)
10
+ end
11
+ end
12
+ end
13
+
14
+ def with_artifacts_volume(prefix = project_name, &block)
15
+ artifacts_volume = sanitized_volume_name("#{prefix}#{build_tag}")
16
+ docker "volume create #{artifacts_volume}"
17
+ yield artifacts_volume
18
+ ensure
19
+ docker "volume rm #{artifacts_volume}"
20
+ end
21
+
22
+ 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
24
+ begin
25
+ docker "start -i #{container_id}"
26
+ cd root_path do
27
+ sh "docker cp #{container_id}:/artifacts_tmp/. #{local_path}"
28
+ end
29
+ ensure
30
+ docker "rm -v #{container_id}"
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def sanitized_volume_name(name)
37
+ name.gsub(/[^-_\.A-Za-z0-9]/, '_')
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,35 @@
1
+ module MiriamTech
2
+ module GoCD
3
+ module DSL
4
+ def project_name(env = ENV)
5
+ (env['GO_PIPELINE_NAME'] || File.basename(File.expand_path('.'))).downcase
6
+ end
7
+
8
+ def build_tag(env = ENV)
9
+ @build_tag ||= generate_build_tag(env)
10
+ end
11
+
12
+ def docker(string)
13
+ sh "docker #{string}"
14
+ end
15
+
16
+ def docker_compose(string)
17
+ # PIPELINE_NAME = (ENV['GO_PIPELINE_NAME'] || 'ilien').downcase
18
+ cd root_path do
19
+ sh "docker-compose -p #{project_name} -f docker-compose.yml #{string}"
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def generate_build_tag(env)
26
+ if revision = env['GO_PIPELINE_COUNTER']
27
+ @build_tag =":#{revision}"
28
+ else
29
+ @build_tag = ""
30
+ end
31
+ env['BUILD_TAG'] = @build_tag
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,4 +1,8 @@
1
+ require_relative 'artifacts'
2
+ require_relative 'docker'
1
3
  require_relative 'images'
2
4
  require_relative 'lambda'
5
+ require_relative 'paths'
6
+ require_relative 'tasks'
3
7
 
4
8
  self.extend MiriamTech::GoCD::DSL
@@ -1,20 +1,18 @@
1
1
  module MiriamTech
2
2
  module GoCD
3
3
  module DSL
4
- def build_tag
5
- @build_tag || generate_build_tag
6
- end
4
+ WORKER_IMAGE = 'debian:buster'
7
5
 
8
6
  def pull(image_name)
9
- sh "docker pull #{image_name}#{build_tag}"
7
+ docker "pull #{image_name}#{build_tag}"
10
8
  end
11
9
 
12
10
  def push(image_name, tag = nil)
13
11
  if tag
14
- sh "docker tag #{image_name}#{build_tag} #{image_name}:#{tag}"
15
- sh "docker push #{image_name}:#{tag}"
12
+ docker "tag #{image_name}#{build_tag} #{image_name}:#{tag}"
13
+ docker "push #{image_name}:#{tag}"
16
14
  else
17
- sh "docker push #{image_name}#{build_tag}"
15
+ docker "push #{image_name}#{build_tag}"
18
16
  end
19
17
  end
20
18
 
@@ -25,21 +23,10 @@ module MiriamTech
25
23
  images.each do |image|
26
24
  next unless image.match(/:(\d+)\z/)
27
25
  if $1.to_i < revision_number - number_to_keep
28
- sh "docker image rm #{image}"
26
+ docker "image rm #{image}"
29
27
  end
30
28
  end
31
29
  end
32
-
33
- private
34
-
35
- def generate_build_tag
36
- if revision = ENV['GO_PIPELINE_COUNTER']
37
- @build_tag =":#{revision}"
38
- else
39
- @build_tag = ""
40
- end
41
- ENV['BUILD_TAG'] = @build_tag
42
- end
43
30
  end
44
31
  end
45
32
  end
@@ -1,3 +1,5 @@
1
+ require 'tempfile'
2
+
1
3
  module MiriamTech
2
4
  module GoCD
3
5
  module DSL
@@ -0,0 +1,17 @@
1
+ require 'pathname'
2
+
3
+ module MiriamTech
4
+ module GoCD
5
+ module DSL
6
+ def root_path
7
+ cwd = Pathname.new(File.expand_path('.'))
8
+ path = Pathname.new(cwd)
9
+ begin
10
+ return path if path.join('Dockerfile').exist?
11
+ path = path.parent
12
+ end until path.root?
13
+ cwd
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,45 @@
1
+ require 'pathname'
2
+ require 'rake/clean'
3
+
4
+ module MiriamTech
5
+ module GoCD
6
+ module DSL
7
+ def define_gocd_tasks(
8
+ image_name,
9
+ revisions_to_keep: 10)
10
+
11
+ task :default => [:test]
12
+ task :full => [:clobber, :build]
13
+
14
+ CLEAN.add(root_path + '/test/reports')
15
+ task :clean do
16
+ docker_compose "stop"
17
+ end
18
+
19
+ task :clobber => :cleanup_old_images do
20
+ docker_compose "rm -fv"
21
+ end
22
+
23
+ task :cleanup_old_images do
24
+ cleanup_old_images(image_name, revisions_to_keep)
25
+ end
26
+
27
+ task :build do
28
+ docker "build --force-rm -t #{image_name}#{build_tag} #{root_path}"
29
+ end
30
+
31
+ task :test
32
+
33
+ task :push do
34
+ push(image_name)
35
+ push(image_name, 'latest')
36
+ end
37
+
38
+ task :deploy do
39
+ pull(image_name)
40
+ push(image_name, 'deployed')
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,5 +1,5 @@
1
1
  module MiriamTech
2
2
  module GoCD
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.4"
4
4
  end
5
5
  end
@@ -29,4 +29,6 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "bundler", "~> 2.0"
30
30
  spec.add_development_dependency "rake", ">= 10.0"
31
31
  spec.add_development_dependency "minitest", "~> 5.0"
32
+ spec.add_development_dependency 'rspec-expectations'
33
+ spec.add_development_dependency 'rspec-mocks'
32
34
  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.1.0
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Treis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-30 00:00:00.000000000 Z
11
+ date: 2020-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-expectations
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-mocks
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description:
56
84
  email:
57
85
  - ken@miriamtech.com
@@ -69,9 +97,13 @@ files:
69
97
  - bin/run_tests.sh
70
98
  - bin/setup
71
99
  - lib/miriamtech/gocd.rb
100
+ - lib/miriamtech/gocd/artifacts.rb
101
+ - lib/miriamtech/gocd/docker.rb
72
102
  - lib/miriamtech/gocd/dsl.rb
73
103
  - lib/miriamtech/gocd/images.rb
74
104
  - lib/miriamtech/gocd/lambda.rb
105
+ - lib/miriamtech/gocd/paths.rb
106
+ - lib/miriamtech/gocd/tasks.rb
75
107
  - lib/miriamtech/gocd/version.rb
76
108
  - miriamtech-gocd.gemspec
77
109
  homepage: https://www.miriamtech.com