lib/dockly/rake_task.rb in dockly-2.7.2 vs lib/dockly/rake_task.rb in dockly-3.0.0
- old
+ new
@@ -1,173 +1,168 @@
require 'rake'
require 'dockly'
-class Rake::DebTask < Rake::Task
- def needed?
- raise "Package does not exist" if package.nil?
- !!ENV['FORCE'] || !package.exists?
- end
+module Dockly::RakeHelper
+ module_function
- def package
- Dockly::Deb[name.split(':').last.to_sym]
+ def find_deb!(name)
+ deb = Dockly.debs[name]
+ raise "No deb named #{name}" if deb.nil?
+ deb
end
-end
-class Rake::RpmTask < Rake::Task
- def needed?
- raise "Package does not exist" if package.nil?
- !!ENV['FORCE'] || !package.exists?
+ def find_docker!(name)
+ docker = Dockly.dockers[name]
+ raise "No docker named #{name}" if docker.nil?
+ docker
end
- def package
- Dockly::Rpm[name.split(':').last.to_sym]
+ def find_rpm!(name)
+ rpm = Dockly.rpms[name]
+ raise "No rpm named #{name}" if rpm.nil?
+ rpm
end
end
-class Rake::DockerTask < Rake::Task
- def needed?
- raise "Docker does not exist" if docker.nil?
- !docker.exists?
+namespace :dockly do
+ # Dockly needs to be able to perform HTTP requests, and unfortunately for us
+ # WebMock is enabled by default.
+ task :enable_http do
+ if defined?(WebMock::HttpLibAdapters::NetHttpAdapter)
+ WebMock::HttpLibAdapters::NetHttpAdapter.disable!
+ end
end
- def docker
- Dockly::Docker[name.split(':').last.to_sym]
+ task :load do
+ raise "No #{Dockly.load_file} found!" unless File.exist?(Dockly.load_file)
+ Dockly.inst
end
-end
-module Rake::DSL
- def deb(*args, &block)
- Rake::DebTask.define_task(*args, &block)
+ task :assume_role => 'dockly:load' do
+ Dockly.perform_role_assumption
end
- def rpm(*args, &block)
- Rake::RpmTask.define_task(*args, &block)
- end
+ task :init => ['dockly:enable_http', 'dockly:load', 'dockly:assume_role']
- def docker(*args, &block)
- Rake::DockerTask.define_task(*args, &block)
- end
-end
+ namespace :deb do
+ task :prepare, [:name] => 'dockly:init' do |t, args|
+ Dockly::RakeHelper.find_deb!(args[:name]).create_package!
+ end
-namespace :dockly do
- task :load do
- raise "No dockly.rb found!" unless File.exist?('dockly.rb')
- end
+ task :upload, [:name] => 'dockly:init' do |t, args|
+ Dockly::RakeHelper.find_deb!(args[:name]).upload_to_s3
+ end
- prepare_targets = []
- upload_targets = []
- build_targets = []
- copy_targets = []
+ task :copy, [:name] => 'dockly:init' do |t, args|
+ Dockly::RakeHelper
+ .find_deb!(args[:name])
+ .copy_from_s3(Dockly::History.duplicate_build_sha[0..6])
+ end
- namespace :deb do
- Dockly.debs.values.each do |inst|
- namespace :prepare do
- task inst.name => 'dockly:load' do |name|
- inst.create_package!
- end
- end
+ task :build, [:name] => 'dockly:init' do |t, args|
+ deb = Dockly::RakeHelper.find_deb!(args[:name])
+ deb.build unless deb.exists?
+ end
+ end
- namespace :upload do
- deb inst.name => 'dockly:load' do |name|
- inst.upload_to_s3
- end
- end
+ namespace :rpm do
+ task :prepare, [:name] => 'dockly:init' do |t, args|
+ Dockly::RakeHelper.find_rpm!(args[:name]).create_package!
+ end
- namespace :copy do
- task inst.name => 'dockly:load' do |name|
- inst.copy_from_s3(Dockly::History.duplicate_build_sha[0..6])
- end
- end
+ task :upload, [:name] => 'dockly:init' do |t, args|
+ Dockly::RakeHelper.find_rpm!(args[:name]).upload_to_s3
+ end
- deb inst.name => 'dockly:load' do |name|
- inst.build
- end
+ task :copy, [:name] => 'dockly:init' do |t, args|
+ Dockly::RakeHelper
+ .find_rpm!(args[:name])
+ .copy_from_s3(Dockly::History.duplicate_build_sha[0..6])
+ end
- prepare_targets << "dockly:deb:prepare:#{inst.name}"
- upload_targets << "dockly:deb:upload:#{inst.name}"
- copy_targets << "dockly:deb:copy:#{inst.name}"
- build_targets << "dockly:deb:#{inst.name}"
+ task :build, [:name] => 'dockly:init' do |t, args|
+ rpm = Dockly::RakeHelper.find_rpm!(args[:name])
+ rpm.build unless rpm.exists?
end
end
- namespace :rpm do
- Dockly.rpms.values.each do |inst|
- namespace :prepare do
- task inst.name => 'dockly:load' do |name|
- inst.create_package!
- end
- end
+ namespace :docker do
+ task :prepare, [:name] => 'dockly:init' do |t, args|
+ Dockly::RakeHelper.find_docker!(args[:name]).generate_build
+ end
- namespace :upload do
- rpm inst.name => 'dockly:load' do |name|
- inst.upload_to_s3
- end
- end
+ task :upload, [:name] => 'dockly:init' do |t, args|
+ docker = Dockly::RakeHelper.find_docker!(args[:name])
+ docker.export_only unless docker.exists?
+ end
- namespace :copy do
- task inst.name => 'dockly:load' do |name|
- inst.copy_from_s3(Dockly::History.duplicate_build_sha[0..6])
- end
- end
+ task :copy, [:name] => 'dockly:init' do |t, args|
+ Dockly::RakeHelper
+ .find_docker!(args[:name])
+ .copy_from_s3(Dockly::History.duplicate_build_sha[0..6])
+ end
- rpm inst.name => 'dockly:load' do |name|
- inst.build
- end
+ task :build, [:name] => 'dockly:init' do |t, args|
+ docker = Dockly::RakeHelper.find_docker!(args[:name])
+ docker.generate! unless docker.exists?
+ end
+ end
- prepare_targets << "dockly:rpm:prepare:#{inst.name}"
- upload_targets << "dockly:rpm:upload:#{inst.name}"
- copy_targets << "dockly:rpm:copy:#{inst.name}"
- build_targets << "dockly:rpm:#{inst.name}"
+ task :prepare_all => 'dockly:init' do
+ Dockly.debs.keys.each do |deb|
+ Rake::Task['dockly:deb:prepare'].tap(&:reenable).invoke(deb)
end
+
+ Dockly.rpms.values.each do |rpm|
+ Rake::Task['dockly:rpm:prepare'].tap(&:reenable).invoke(rpm)
+ end
+
+ Dockly.dockers.values.each do |docker|
+ Rake::Task['dockly:docker:prepare'].tap(&:reenable).invoke(docker)
+ end
end
- namespace :docker do
- Dockly.dockers.values.each do |inst|
- # For backwards compatibility
- namespace :noexport do
- task inst.name => "dockly:docker:prepare:#{inst.name}"
- end
+ task :upload_all => 'dockly:init' do
+ Dockly.debs.keys.each do |deb|
+ Rake::Task['dockly:deb:upload'].tap(&:reenable).invoke(deb)
+ end
- namespace :prepare do
- task inst.name => 'dockly:load' do
- Thread.current[:rake_task] = inst.name
- inst.generate_build
- end
- end
+ Dockly.rpms.keys.each do |rpm|
+ Rake::Task['dockly:rpm:upload'].tap(&:reenable).invoke(rpm)
+ end
- namespace :upload do
- docker inst.name => 'dockly:load' do
- Thread.current[:rake_task] = inst.name
- inst.export_only
- end
- end
+ Dockly.dockers.keys.each do |docker|
+ Rake::Task['dockly:docker:upload'].tap(&:reenable).invoke(docker)
+ end
+ end
- namespace :copy do
- task inst.name => 'dockly:load' do
- Thread.current[:rake_task] = inst.name
- inst.copy_from_s3(Dockly::History.duplicate_build_sha[0..6])
- end
- end
+ task :build_all => 'dockly:init' do
+ Dockly.debs.keys.each do |deb|
+ Rake::Task['dockly:deb:build'].tap(&:reenable).invoke(deb)
+ end
- docker inst.name => 'dockly:load' do
- Thread.current[:rake_task] = inst.name
- inst.generate!
- end
+ Dockly.rpms.keys.each do |rpm|
+ Rake::Task['dockly:rpm:build'].tap(&:reenable).invoke(rpm)
+ end
- # Docker image will be generated by 'dockly:deb:package'
- unless inst.s3_bucket.nil?
- prepare_targets << "dockly:docker:prepare:#{inst.name}"
- upload_targets << "dockly:docker:upload:#{inst.name}"
- copy_targets << "dockly:docker:copy:#{inst.name}"
- build_targets << "dockly:docker:#{inst.name}"
- end
+ Dockly.dockers.keys.each do |docker|
+ Rake::Task['dockly:docker:build'].tap(&:reenable).invoke(docker)
end
end
- multitask :prepare_all => prepare_targets
- multitask :upload_all => upload_targets
- multitask :build_all => build_targets
- multitask :copy_all => copy_targets
+ task :copy_all => 'dockly:init' do
+ Dockly.debs.keys.each do |deb|
+ Rake::Task['dockly:deb:copy'].tap(&:reenable).invoke(deb)
+ end
+
+ Dockly.rpms.keys.each do |rpm|
+ Rake::Task['dockly:rpm:copy'].tap(&:reenable).invoke(rpm)
+ end
+
+ Dockly.dockers.keys.each do |docker|
+ Rake::Task['dockly:docker:copy'].tap(&:reenable).invoke(docker)
+ end
+ end
task :build_or_copy_all do
if Dockly::History.duplicate_build?
Rake::Task['dockly:copy_all'].invoke
else