j4zzcat-utils-rake 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 992bfef6571eae3ccd056e6477c523f8848c98b5
4
+ data.tar.gz: 47bf4a82ff81e9bfbb4667d3e684f7ab25340b54
5
+ SHA512:
6
+ metadata.gz: e9a199491d31e86a109bb8c5508097721f64a6ab8c3827e1aaf46dc5852b655c30fb4912769c652c2544bdc2c89831ea5d537bcfd6118d4a4ea0ce89ee8ef7c4
7
+ data.tar.gz: 0e68792031574fcb6da8ecf2b207566863b9378133c91889e97f9588677f9b17cb41615ec77605aacab6ee5a48eecf03ce05548e214a4caec390f98fb348d067
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ *.swp
3
+ *.gem
4
+ *.last_build
@@ -0,0 +1,2 @@
1
+ FROM ruby:2.4
2
+ CMD [ "/bin/bash" ]
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,24 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ j4zzcat-utils-rake (0.0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ bond (0.5.1)
10
+ rake (10.5.0)
11
+ ripl (0.7.1)
12
+ bond (~> 0.5.1)
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ bundler (~> 1.14)
19
+ j4zzcat-utils-rake!
20
+ rake (~> 10.5)
21
+ ripl (~> 0.7)
22
+
23
+ BUNDLED WITH
24
+ 1.14.3
@@ -0,0 +1,16 @@
1
+ if ENV[ 'DOCKER' ].nil?
2
+ require 'j4zzcat/utils/rake'
3
+
4
+ J4zzcat::Utils::Rake::DockerizeTask.new( :dex ) do | config |
5
+ # config.dockerfile = 'Dockerfile' # The dockerfile
6
+ # config.tag = 'example:dex' # The image tag
7
+ # config.build_cmd = 'docker build ...' # The docker build command
8
+ # config.build_triggers = [ '*.gemspec' ] # List of files that will trigger a build
9
+ # config.run_cmd = 'docker run ...' # The docker run command
10
+ config.verbose = true
11
+ end
12
+ end
13
+
14
+ task :whoami do
15
+ system( 'whoami' )
16
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'j4zzcat/utils/rake/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'j4zzcat-utils-rake'
8
+ spec.version = J4zzcat::Utils::Rake::VERSION
9
+ spec.authors = [ 'Sharon Dagan' ]
10
+ spec.email = [ 'sharon.dagan@gmail.com' ]
11
+ spec.license = 'GPL-3.0'
12
+ spec.summary = 'Runs rake tasks within docker'
13
+ spec.homepage = 'https://github.com/j4zzcat/dockerized-rake'
14
+
15
+ spec.metadata[ 'allowed_push_host' ] = 'https://rubygems.org'
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match( %r{^(test|spec|features)/} )
18
+ end
19
+ spec.require_paths = [ 'lib' ]
20
+
21
+ # spec.add_dependency
22
+ spec.add_development_dependency 'bundler', '~> 1.14'
23
+ spec.add_development_dependency 'rake', '~> 10.5'
24
+ spec.add_development_dependency 'ripl', '~> 0.7'
25
+
26
+ end
@@ -0,0 +1 @@
1
+ require 'j4zzcat/utils/rake/dockerize_task.rb'
@@ -0,0 +1,114 @@
1
+ require 'rake'
2
+ require 'rake/tasklib'
3
+ require 'ostruct'
4
+
5
+ module J4zzcat
6
+ module Utils
7
+ module Rake
8
+
9
+ class DockerizeTask < ::Rake::TaskLib
10
+ include ::Rake::DSL if defined?( ::Rake::DSL )
11
+
12
+ attr_accessor :name
13
+ attr_accessor :dockerfile
14
+ attr_accessor :tag
15
+ attr_accessor :build_cmd
16
+ attr_accessor :build_triggers
17
+ attr_accessor :run_cmd
18
+ attr_accessor :verbose
19
+
20
+ def initialize( *args, &task_block )
21
+ gemspec = Dir.glob( '*.gemspec' ).first
22
+ gemspec ||= 'unknown_gem'
23
+
24
+ # Defaults
25
+ @name = args.shift || :dockerize
26
+ @dockerfile = 'Dockerfile'
27
+ @tag = "#{File.basename( gemspec, '.*' )}:#{@name}"
28
+ @build_cmd = ''
29
+ @build_triggers = [ '*.gemspec', @dockerfile ]
30
+ @run_cmd = ''
31
+ @verbose = false
32
+
33
+ rake_args = ARGV
34
+
35
+ define_task( args, rake_args, &task_block )
36
+ config_task( args, &task_block )
37
+ end
38
+
39
+ def define_task( args, rake_args, &task_block )
40
+ desc 'Run rake within a docker container' unless ::Rake.application.last_description
41
+
42
+ task @name do
43
+ run_task rake_args
44
+ end
45
+ end
46
+
47
+ def config_task( args, &task_block )
48
+ task_block.call( self ) if !task_block.nil?
49
+ end
50
+
51
+ def run_task( rake_args )
52
+ image = docker_image_info @tag
53
+ if image.id.nil?
54
+ docker_build image
55
+ else
56
+ @build_triggers.each do | file |
57
+ Dir.glob( file ).each do | f |
58
+ modified = File.stat( f ).mtime.to_i
59
+ if( modified > image.last_build )
60
+ docker_build image
61
+ break
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ rake_args -= [ @name.to_s ]
68
+ rake_command = "cd /app; rake #{rake_args.join( ' ' )}"
69
+ docker_command = "docker run --rm -it -e 'DOCKER=YES' -v $(pwd):/app #{@tag} /bin/bash -c \'#{rake_command}\'"
70
+
71
+ puts docker_command if verbose
72
+ exec docker_command
73
+
74
+ # return if system(command)
75
+ # puts failure_message if failure_message
76
+ #
77
+ # return unless fail_on_error
78
+ # $stderr.puts "#{command} failed" if verbose
79
+ # exit $?.exitstatus || 1
80
+ end
81
+
82
+ def docker_image_info( tag )
83
+ image = OpenStruct.new
84
+
85
+ image.tag = tag
86
+ image.id = %x[ docker images -q #{tag} ].chop
87
+
88
+ if image.id.nil? || image.id.empty?
89
+ image.last_build = 0
90
+ else
91
+ begin
92
+ image.last_build = File.stat( docker_last_build_sentinal_file ).mtime.to_i
93
+ rescue
94
+ image.last_build = 0
95
+ end
96
+ end
97
+
98
+ image
99
+ end
100
+
101
+ def docker_build( image )
102
+ system( "docker build --rm -t #{@tag} -f #{@dockerfile} . \
103
+ && touch #{docker_last_build_sentinal_file}" )
104
+ end
105
+
106
+ def docker_last_build_sentinal_file
107
+ ".#{@tag.sub ':', '-'}.last_build"
108
+ end
109
+
110
+ end # class
111
+
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,7 @@
1
+ module J4zzcat
2
+ module Utils
3
+ module Rake
4
+ VERSION = '0.0.1'
5
+ end
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: j4zzcat-utils-rake
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sharon Dagan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-02-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.14'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: ripl
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.7'
55
+ description:
56
+ email:
57
+ - sharon.dagan@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Dockerfile
64
+ - Gemfile
65
+ - Gemfile.lock
66
+ - example/Rakefile
67
+ - j4zzcat-utils-rake.gemspec
68
+ - lib/j4zzcat/utils/rake.rb
69
+ - lib/j4zzcat/utils/rake/dockerize_task.rb
70
+ - lib/j4zzcat/utils/rake/version.rb
71
+ homepage: https://github.com/j4zzcat/dockerized-rake
72
+ licenses:
73
+ - GPL-3.0
74
+ metadata:
75
+ allowed_push_host: https://rubygems.org
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 2.5.2
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Runs rake tasks within docker
96
+ test_files: []