class J4zzcat::Utils::Rake::DockerizeTask
Attributes
build_cmd[RW]
build_triggers[RW]
dockerfile[RW]
name[RW]
run_cmd[RW]
tag[RW]
verbose[RW]
Public Class Methods
new( *args, &task_block )
click to toggle source
# File lib/j4zzcat/utils/rake/dockerize_task.rb, line 20 def initialize( *args, &task_block ) gemspec = Dir.glob( '*.gemspec' ).first gemspec ||= 'unknown_gem' # Defaults @name = args.shift || :dockerize @dockerfile = 'Dockerfile' @tag = "#{File.basename( gemspec, '.*' )}:#{@name}" @build_cmd = '' @build_triggers = [ '*.gemspec', @dockerfile ] @run_cmd = '' @verbose = false rake_args = ARGV define_task( args, rake_args, &task_block ) config_task( args, &task_block ) end
Public Instance Methods
config_task( args, &task_block )
click to toggle source
# File lib/j4zzcat/utils/rake/dockerize_task.rb, line 47 def config_task( args, &task_block ) task_block.call( self ) if !task_block.nil? end
define_task( args, rake_args, &task_block )
click to toggle source
# File lib/j4zzcat/utils/rake/dockerize_task.rb, line 39 def define_task( args, rake_args, &task_block ) desc 'Run rake within a docker container' unless ::Rake.application.last_description task @name do run_task rake_args end end
docker_build( image )
click to toggle source
# File lib/j4zzcat/utils/rake/dockerize_task.rb, line 101 def docker_build( image ) system( "docker build --rm -t #{@tag} -f #{@dockerfile} . \ && touch #{docker_last_build_sentinal_file}" ) end
docker_image_info( tag )
click to toggle source
# File lib/j4zzcat/utils/rake/dockerize_task.rb, line 82 def docker_image_info( tag ) image = OpenStruct.new image.tag = tag image.id = %x[ docker images -q #{tag} ].chop if image.id.nil? || image.id.empty? image.last_build = 0 else begin image.last_build = File.stat( docker_last_build_sentinal_file ).mtime.to_i rescue image.last_build = 0 end end image end
docker_last_build_sentinal_file()
click to toggle source
# File lib/j4zzcat/utils/rake/dockerize_task.rb, line 106 def docker_last_build_sentinal_file ".#{@tag.sub ':', '-'}.last_build" end
run_task( rake_args )
click to toggle source
# File lib/j4zzcat/utils/rake/dockerize_task.rb, line 51 def run_task( rake_args ) image = docker_image_info @tag if image.id.nil? docker_build image else @build_triggers.each do | file | Dir.glob( file ).each do | f | modified = File.stat( f ).mtime.to_i if( modified > image.last_build ) docker_build image break end end end end rake_args -= [ @name.to_s ] rake_command = "cd /app; rake #{rake_args.join( ' ' )}" docker_command = "docker run --rm -it -e 'DOCKER=YES' -v $(pwd):/app #{@tag} /bin/bash -c \'#{rake_command}\'" puts docker_command if verbose exec docker_command # return if system(command) # puts failure_message if failure_message # # return unless fail_on_error # $stderr.puts "#{command} failed" if verbose # exit $?.exitstatus || 1 end