minke 1.13.20 → 1.14.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
  SHA1:
3
- metadata.gz: 811e42427f6cae2eeca648798c896f854dd27696
4
- data.tar.gz: e526903241f2dcc47cfba0d034766a6ada9d75eb
3
+ metadata.gz: a75b7d20dfa4be64d0c2624adce3b9f9e25ec3ea
4
+ data.tar.gz: 681b7ff115b1b9c411cae5cd893f1d627f11c531
5
5
  SHA512:
6
- metadata.gz: ac68a11e3ca4f3d397381d507d672c6b95c4ce2a01629be346d83c422647f91dd09e50a06e759428f29df1c496225eafa5bcfc4b573bc168acb2dba8f6ac7c49
7
- data.tar.gz: bbe73b673a52fd539be0d145c08e6e2341fa9101e4f8ac901e7acfc152b1431f0a47865aa36e8a7243a3aa2c2ea899d3ef5b3a5155c66fad1c24c2df250c4f78
6
+ metadata.gz: 40f40d0ad96bb89401230a08b99001e98993accb2cfd72c899ba27bf86f506efedec85d6de500186a52b5994801875df6eb719c2d82e849f72f0a4eb197795f1
7
+ data.tar.gz: ec4dd302f0844486acbc3d816d377bb03e7a2470a5390f03244046ba36c14322d31e65dfd8ac3adc820a63871cf3c7f6e9999c815eb1411cf910e012f4164420
data/.travis.yml CHANGED
@@ -30,7 +30,7 @@ after_deploy:
30
30
  docker build -t nicholasjackson/minke --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` --build-arg VCS_REF=`git rev-parse --short HEAD` .;
31
31
  docker login -e="$DOCKER_EMAIL" -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD";
32
32
  docker push nicholasjackson/minke:latest;
33
- docker tag nicholasjackson/minke nicholasjackson/minke:1.13.20;
34
- docker push nicholasjackson/minke:1.13.20;
33
+ docker tag nicholasjackson/minke nicholasjackson/minke:1.14.0;
34
+ docker push nicholasjackson/minke:1.14.0;
35
35
  curl https://hooks.microbadger.com/images/nicholasjackson/minke/tkpohfdrYPE0B0TL5NzLcOap4k0=;
36
36
  fi
data/bin/minke CHANGED
@@ -39,6 +39,7 @@ Commonly used command are:
39
39
  build_image : build a docker image
40
40
  push : push built image to the registry
41
41
  encrypt : encrypt secrets with a private key
42
+ shell : start a shell session inside the build container
42
43
  See 'minke COMMAND --help' for more information on a specific command.
43
44
  HELP
44
45
 
@@ -155,6 +156,8 @@ when "run"
155
156
  doCommand(:run, options[:verbose], options[:config])
156
157
  when "push"
157
158
  doCommand(:push, options[:verbose], options[:config])
159
+ when "shell"
160
+ doCommand(:shell, options[:verbose], options[:config])
158
161
  when "generate"
159
162
  if options[:generator] == nil || options[:output] == nil || options[:name] == nil || options[:namespace] == nil
160
163
  puts "Please specify options use: minke generate --help for help on command line options"
data/docker/Gemfile CHANGED
@@ -3,7 +3,7 @@ source 'https://rubygems.org'
3
3
  gem "rake"
4
4
  gem "cucumber"
5
5
 
6
- gem 'minke', "= 1.13.20"
6
+ gem 'minke', "= 1.14.0"
7
7
  gem 'minke-generator-swift', "= 0.4"
8
8
  gem 'minke-generator-netmvc'
9
9
  gem 'minke-generator-go', "= 0.8.6"
data/lib/minke/command.rb CHANGED
@@ -18,12 +18,12 @@ module Minke
18
18
  logger = Minke::Logging.create_logger(self.verbose)
19
19
  shell = Minke::Helpers::Shell.new(logger)
20
20
 
21
- variables = Minke::Generators::ConfigVariables.new.tap do |v|
22
- v.application_name = @config.application_name
23
- v.namespace = @config.namespace
24
- v.src_root = File.expand_path('../')
25
- end
26
-
21
+ # variables = Minke::Generators::ConfigVariables.new.tap do |v|
22
+ # v.application_name = @config.application_name
23
+ # v.namespace = @config.namespace
24
+ # v.src_root = File.expand_path('../')
25
+ # end
26
+
27
27
  task_runner = Minke::Tasks::TaskRunner.new ({
28
28
  :ruby_helper => Minke::Helpers::Ruby.new,
29
29
  :copy_helper => Minke::Helpers::Copy.new,
@@ -74,7 +74,8 @@ module Minke
74
74
  :run => Minke::Tasks::Run.new(dependencies),
75
75
  :build_image => Minke::Tasks::BuildImage.new(dependencies),
76
76
  :cucumber => Minke::Tasks::Cucumber.new(dependencies),
77
- :push => Minke::Tasks::Push.new(dependencies)
77
+ :push => Minke::Tasks::Push.new(dependencies),
78
+ :shell => Minke::Tasks::Shell.new(dependencies)
78
79
  }
79
80
  end
80
81
 
@@ -128,5 +129,11 @@ module Minke
128
129
  tasks[:push].run
129
130
  end
130
131
 
132
+ def shell
133
+ if config.shell != nil
134
+ tasks = create_tasks :shell
135
+ tasks[:shell].run
136
+ end
137
+ end
131
138
  end
132
139
  end
@@ -70,6 +70,13 @@ module Minke
70
70
  # [Optional] if not provided the cucumber commands will not be executed
71
71
  attr_accessor :cucumber
72
72
 
73
+ ##
74
+ # Settings for the build shell phase
75
+ # instance of Minke::Config::Task
76
+ #
77
+ # [Optional] if not provided the shell commands will not be executed
78
+ attr_accessor :shell
79
+
73
80
  ##
74
81
  # Returns the docker_compose file for the given section,
75
82
  # if the section overrides application_compose_file then this is returned
@@ -31,6 +31,8 @@ module Minke
31
31
  config.run = read_task_section file['run'], config.docker unless file['run'] == nil
32
32
  config.cucumber = read_task_section file['cucumber'], config.docker unless file['cucumber'] == nil
33
33
 
34
+ config.shell = read_task_section file['shell'], config.docker unless file['shell'] == nil
35
+
34
36
  return config
35
37
  end
36
38
 
@@ -76,7 +76,7 @@ module Minke
76
76
  "Env" => args[:environment],
77
77
  'WorkingDir' => args[:working_directory],
78
78
  'NetworkMode' => @network,
79
- 'name' => args[:name],
79
+ 'name' => args[:name],
80
80
  'PublishAllPorts' => true
81
81
  )
82
82
 
@@ -97,14 +97,48 @@ module Minke
97
97
  end
98
98
  end
99
99
 
100
-
101
-
102
100
  container.start
103
-
104
101
  thread.join unless args[:deamon] == true
105
102
 
106
103
  success = (container.json['State']['ExitCode'] == 0) ? true: false
107
-
104
+ @logger.error(output) unless success
105
+
106
+ return container, success
107
+ end
108
+
109
+ #
110
+ # create_and_run_blocking_container starts a conatainer of the given image name and executes a command, this method blocks until the container exits
111
+ #
112
+ # Returns:
113
+ # - Docker::Container
114
+ # - sucess (true if command succeded without error)
115
+ def create_and_run_blocking_container args
116
+ # update the timeout for the Excon Http Client
117
+ # set the chunk size to enable streaming of log files
118
+ ::Docker.options = {:chunk_size => 1, :read_timeout => 3600}
119
+ container = ::Docker::Container.create(
120
+ 'Image' => args[:image],
121
+ 'Cmd' => args[:command],
122
+ "Binds" => args[:volumes],
123
+ "Env" => args[:environment],
124
+ 'WorkingDir' => args[:working_directory],
125
+ 'name' => args[:name],
126
+ 'NetworkMode' => @network,
127
+ "OpenStdin" => true,
128
+ "StdinOnce" => true,
129
+ "Tty" => true,
130
+ 'PublishAllPorts' => true
131
+ )
132
+
133
+ container.start
134
+
135
+ STDIN.raw do |stdin|
136
+ container.attach(stdin: stdin, tty: true) do |chunk|
137
+ print chunk
138
+ end
139
+ end
140
+
141
+ success = (container.json['State']['ExitCode'] == 0) ? true: false
108
142
  @logger.error(output) unless success
109
143
 
110
144
  return container, success
@@ -0,0 +1,31 @@
1
+ module Minke
2
+ module Tasks
3
+ class Shell < Task
4
+
5
+ def run args = nil
6
+ @logger.info "## Run shell"
7
+ @logger.info "## Run application with docker compose"
8
+
9
+ compose_file = @config.compose_file_for(@task_name)
10
+ compose_file = File.expand_path(compose_file)
11
+ compose = @docker_compose_factory.create compose_file unless compose_file == nil
12
+
13
+ run_with_block do |pre_tasks, post_tasks|
14
+ begin
15
+ compose.up
16
+ pre_tasks.call
17
+ @logger.info "## Shell open to build container"
18
+ run_command_in_container('/bin/sh', true)
19
+ rescue SystemExit, Interrupt
20
+ @logger.info "Stopping...."
21
+ raise SystemExit
22
+ ensure
23
+ compose.down
24
+ post_tasks.call
25
+ end
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -63,7 +63,7 @@ module Minke
63
63
 
64
64
  ##
65
65
  # runs the given command in a docker container
66
- def run_command_in_container command
66
+ def run_command_in_container command, blocking = false
67
67
  begin
68
68
  @logger.info "Running command: #{command}"
69
69
  settings = @generator_config.build_settings.docker_settings
@@ -85,7 +85,12 @@ module Minke
85
85
  :environment => environment,
86
86
  :working_directory => working_directory
87
87
  }
88
- container, success = @docker_runner.create_and_run_container args
88
+
89
+ if blocking == false
90
+ container, success = @docker_runner.create_and_run_container args
91
+ else
92
+ container, success = @docker_runner.create_and_run_blocking_container args
93
+ end
89
94
 
90
95
  # throw exception if failed
91
96
  raise "Unable to run command #{command}" unless success
data/lib/minke/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Minke
2
- VERSION = "1.13.20"
2
+ VERSION = "1.14.0"
3
3
  end
data/lib/minke.rb CHANGED
@@ -16,6 +16,7 @@ require 'securerandom'
16
16
  require 'sshkey'
17
17
  require 'mkmf'
18
18
  require 'open3'
19
+ require "io/console"
19
20
 
20
21
  require 'minke/version'
21
22
  require 'minke/command'
@@ -45,6 +46,7 @@ require 'minke/tasks/push'
45
46
  require 'minke/tasks/run'
46
47
  require 'minke/tasks/test'
47
48
  require 'minke/tasks/build_image'
49
+ require 'minke/tasks/shell'
48
50
 
49
51
  require 'minke/generators/config'
50
52
  require 'minke/generators/config_processor'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minke
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.20
4
+ version: 1.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nic Jackson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-14 00:00:00.000000000 Z
11
+ date: 2017-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -279,6 +279,7 @@ files:
279
279
  - lib/minke/tasks/fetch.rb
280
280
  - lib/minke/tasks/push.rb
281
281
  - lib/minke/tasks/run.rb
282
+ - lib/minke/tasks/shell.rb
282
283
  - lib/minke/tasks/task.rb
283
284
  - lib/minke/tasks/task_runner.rb
284
285
  - lib/minke/tasks/test.rb