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.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/Dockerfile +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +24 -0
- data/example/Rakefile +16 -0
- data/j4zzcat-utils-rake.gemspec +26 -0
- data/lib/j4zzcat/utils/rake.rb +1 -0
- data/lib/j4zzcat/utils/rake/dockerize_task.rb +114 -0
- data/lib/j4zzcat/utils/rake/version.rb +7 -0
- metadata +96 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
data/Dockerfile
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -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
|
data/example/Rakefile
ADDED
@@ -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
|
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: []
|