class Samus::Rake::DockerReleaseTask
Constants
- DEFAULT_DOCKERFILE
- PREP_DIR
Attributes
delete_image_after_publish[RW]
dockerfile[RW]
extra_config[RW]
git_pull_after_publish[RW]
git_pull_before_build[RW]
mount_samus_config[RW]
Public Class Methods
new(namespace = :samus) { |self| ... }
click to toggle source
# File lib/samus/rake/tasks.rb, line 41 def initialize(namespace = :samus) @namespace = namespace @dockerfile = DEFAULT_DOCKERFILE @delete_image_after_publish = true @git_pull_before_build = true @git_pull_after_publish = true @mount_samus_config = false @extra_config = {} yield self if block_given? build_config_files define end
Private Instance Methods
build_config_files()
click to toggle source
# File lib/samus/rake/tasks.rb, line 58 def build_config_files @config_files = { Samus::CONFIG_PATH => '.samus', File.expand_path('~/.gitconfig') => '.gitconfig' }.merge(extra_config) @config_files.select! {|src, _dst| File.exist?(src) } end
build_or_get_dockerfile()
click to toggle source
# File lib/samus/rake/tasks.rb, line 74 def build_or_get_dockerfile return dockerfile if File.exist?(dockerfile) fname = File.join(PREP_DIR, 'Dockerfile') config_copies = @config_files.values.map {|f| "COPY ./#{PREP_DIR}/#{f} /root/#{f}" } File.open(fname, 'w') do |f| f.puts([ "FROM lsegal/samus:build", "ARG VERSION", "ENV VERSION=${VERSION}", "COPY . /build", config_copies.join("\n"), "RUN rm -rf /build/.samusprep", "RUN samus build --skip-restore ${VERSION}" ].join("\n")) end fname end
copy_prep()
click to toggle source
# File lib/samus/rake/tasks.rb, line 66 def copy_prep FileUtils.rm_rf(PREP_DIR) FileUtils.mkdir_p(PREP_DIR) @config_files.each do |src, dst| FileUtils.cp_r(src, File.join(PREP_DIR, dst)) end end
define()
click to toggle source
# File lib/samus/rake/tasks.rb, line 92 def define namespace(@namespace) do desc '[VERSION=X.Y.Z] Builds a Samus release using Docker' task :build do img = release_image ver = release_version sh "git pull" if git_pull_before_build begin copy_prep sh "docker build . --rm -t #{img} -f #{build_or_get_dockerfile} --build-arg VERSION=#{ver}" ensure FileUtils.rm_rf(PREP_DIR) end end desc '[VERSION=X.Y.Z] Publishes a built release using Docker' task :publish do img = release_image mount = mount_samus_config ? "-v #{Samus::CONFIG_PATH}:/root/.samus:ro" : '' sh "docker run #{mount} --rm #{release_image}" ::Rake::Task["#{@namespace}:clean"].execute if delete_image_after_publish sh "git pull" if git_pull_after_publish end desc '[VERSION=X.Y.Z] Inspects a built release using Docker shell' task :inspect do sh "docker run -it --entrypoint sh #{release_image}" end desc '[VERSION=X.Y.Z] Removes a built release using Docker' task :clean do sh "docker rmi -f #{release_image}" end end end