class Docman::YamlExecuteCmd

Public Instance Methods

execute() click to toggle source
# File lib/docman/commands/yaml_execute_cmd.rb, line 16
def execute
  with_logging('yaml_execute') do
    Dir.chdir @context['full_build_path']
    if self['environments'].nil? || self['environments'] == 'all' || self['environments'].include?(@context.environment_name)
      if self['providers'].nil? || self['providers'] == 'all' || self['providers'].include?(@context['provider'])
        commands = nil
        if self['source_type'] == 'file'
          yaml_file_name = self['yaml_file_name'].nil? ? '{unipipe,.unipipe,drupipe,.drupipe,build,.build}.{yaml,yml}' : self['yaml_file_name']
          search_pathes = []
          if @context['name'] == 'master'
            search_pathes.push File.join(@context['docroot_config'].config_dir, yaml_file_name)
          end
          search_pathes.push File.join(@context['full_build_path'], yaml_file_name)
          build_file = Dir.glob(search_pathes).first
          if not build_file.nil?
            build_file_yaml = YAML::load_file(build_file)
            commands = build_file_yaml[self['stage']]
            source = yaml_file_name
          end
        end
        chdir = ''
        if self['source_type'] == 'inline'
          commands = self['commands']
          source = 'inline'
          if self.has_key?('exec_dir')
            chdir = self['exec_dir']
          end
        end
        chdir_full = File.join(@context['full_build_path'], chdir)
        Dir.chdir chdir_full
        unless commands.nil?
          commands.each do |cmd|
            logger.info "Execute in #{chdir_full} from #{source}: #{cmd}"
            logger.info `#{cmd}`
            if $?.exitstatus > 0
              raise "Command #{cmd} was failed"
            end
          end
        end
        Dir.chdir @context['full_build_path']
      end
    end
  end
end
validate_command() click to toggle source
# File lib/docman/commands/yaml_execute_cmd.rb, line 6
def validate_command
  raise "Please provide 'context'" if @context.nil?
  raise "Context should be of type 'Info'" unless @context.is_a? Docman::Info
  raise "Both file & inline could not be se for this command" if self['yaml_file_name'] && self['inline']
end