j4zzcat-utils-rake 0.0.1

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.
@@ -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: []