class Mamiya::Steps::Build

Public Instance Methods

package() click to toggle source
# File lib/mamiya/steps/build.rb, line 55
def package
  @package ||= Mamiya::Package.new(package_path)
end
run!() click to toggle source
# File lib/mamiya/steps/build.rb, line 13
def run!
  @exception = nil

  unless script_file
    raise ScriptFileNotSpecified, "Set script files to :script_file"
  end

  unless script.application
    raise ApplicationNotSpecified, ":application should be specified in your script file"
  end

  run_before_build
  run_prepare_build
  run_build

  # XXX: Is this really suitable here? Package class should do?
  copy_deploy_scripts

  set_metadata

  build_package

  logger.info "Packed."

rescue Exception => e
  @exception = e
  raise
ensure
  logger.warn "Exception occured, cleaning up..." if @exception

  if script_dest.exist?
    FileUtils.remove_entry_secure script_dest
  end

  logger.info "Running script.after_build"
  script.after_build[@exception]

  unless @exception
    logger.info "DONE: #{package_name} built at #{package.path}"
  end
end

Private Instance Methods

build_package() click to toggle source
# File lib/mamiya/steps/build.rb, line 118
def build_package
  logger.debug "Packaging to: #{package.path}"
  logger.debug "meta=#{package.meta.inspect}"
  package.build!(script.build_from,
     exclude_from_package: script.exclude_from_package || [],
     dereference_symlinks: script.dereference_symlinks || false,
     package_under: script.package_under || nil,
     logger: logger)
end
copy_deploy_scripts() click to toggle source
# File lib/mamiya/steps/build.rb, line 85
def copy_deploy_scripts
  # XXX: TODO: move to another class?
  logger.info "Copying script files"

  if script_dest.exist?
    logger.warn "Removing existing .mamiya.script"
    FileUtils.remove_entry_secure script_dest
  end
  script_dest.mkdir

  logger.debug "- #{script_file} -> #{script_dest}"
  FileUtils.cp script_file, script_dest

  if script.script_additionals
    script_dir = Pathname.new(File.dirname(script_file))
    script.script_additionals.each do |additional|
      src = script_dir.join(additional)
      dst = script_dest.join(additional)
      logger.debug "- #{src} -> #{dst}"
      FileUtils.mkdir_p dst.dirname
      FileUtils.cp_r src, dst
    end
  end
end
package_name() click to toggle source
# File lib/mamiya/steps/build.rb, line 128
def package_name
  @package_name ||= begin
    logger.debug "Determining package name..."
    name = Mamiya.chdir(script.build_from) {
      script.package_name[
        [Time.now.strftime("%Y%m%d%H%M%S"), script.application]
      ].join('-')
    }
    logger.debug "Package name determined: #{name}"
    name
  end
end
package_path() click to toggle source
# File lib/mamiya/steps/build.rb, line 141
def package_path
  @package_path ||= File.join(script.build_to, package_name)
end
run_before_build() click to toggle source
# File lib/mamiya/steps/build.rb, line 61
def run_before_build
  logger.info "Running script.before_build"
  script.before_build[]
end
run_build() click to toggle source
# File lib/mamiya/steps/build.rb, line 75
def run_build
  # FIXME: This could show warning saying "conflicting chdir during another chdir block".
  # Do not use `Dir.chdir` without block anyware.
  Mamiya.chdir(script.build_from) do
    logger.info "Running script.build"
    logger.debug "pwd=#{Dir.pwd}"
    script.build[]
  end
end
run_prepare_build() click to toggle source
# File lib/mamiya/steps/build.rb, line 66
def run_prepare_build
  unless script.skip_prepare_build
    logger.info "Running script.prepare_build"
    script.prepare_build[File.exists?(script.build_from)]
  else
    logger.debug "prepare_build skipped due to script.skip_prepare_build"
  end
end
script_dest() click to toggle source
# File lib/mamiya/steps/build.rb, line 149
def script_dest
  @script_dest ||= if script.package_under
    Pathname.new File.join(script.build_from, script.package_under, '.mamiya.script')
  else
    Pathname.new File.join(script.build_from, '.mamiya.script')
  end
end
script_file() click to toggle source
# File lib/mamiya/steps/build.rb, line 145
def script_file
  @script_file ||= script.script_file || script._file
end
set_metadata() click to toggle source
# File lib/mamiya/steps/build.rb, line 110
def set_metadata
  package.meta[:application] = script.application
  package.meta[:script] = File.basename(script_file)
  Mamiya.chdir(script.build_from) do
    package.meta.replace script.package_meta[package.meta]
  end
end