kameleon-builder 2.10.2 → 2.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.bumpversion.cfg +1 -1
- data/CHANGES +10 -0
- data/completion/kameleon.bash +15 -4
- data/erb/extend.yaml.erb +24 -0
- data/erb/{userconf.erb → userconf.yaml.erb} +0 -0
- data/kameleon-builder.gemspec +2 -1
- data/lib/kameleon.rb +1 -1
- data/lib/kameleon/cli.rb +63 -21
- data/lib/kameleon/recipe.rb +2 -2
- data/lib/kameleon/utils.rb +40 -8
- data/version.txt +1 -1
- metadata +19 -5
- data/erb/extend.erb +0 -33
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c3e726c2e8f9ca4aa09d3e5c6ef46ddc96f76f815ed8d740c431deb7e46f9433
         | 
| 4 | 
            +
              data.tar.gz: 2fc324e1b1f507886d628ff27c6daa94ec50ef7e04f57f30af6614f8db7d3f1d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 83abce13fbf9368ed09392794a572065fc6959ff3071a61d2a4f1231288f2d4ad176d1003d57027320728042de7b8c5a5abf0e068c52c7b203faaae4d29faff7
         | 
| 7 | 
            +
              data.tar.gz: c6f6f3bb93d99b960fd1650fb1247d21a5e306c5f334e19bc969a6d2195d3c93fe931de68640c84d87f2e6afc75c36b938c3b490a0aef482e5d66af31ce8cb0e
         | 
    
        data/.bumpversion.cfg
    CHANGED
    
    
    
        data/CHANGES
    CHANGED
    
    | @@ -1,6 +1,16 @@ | |
| 1 1 | 
             
            Kameleon CHANGELOG
         | 
| 2 2 | 
             
            ==================
         | 
| 3 3 |  | 
| 4 | 
            +
            Version 2.10.3
         | 
| 5 | 
            +
            --------------
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Released on April 10th 2020
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            - Rework kameleon template list: add color add progress bar
         | 
| 10 | 
            +
            - Make bash completion understand the subcommands
         | 
| 11 | 
            +
            - Fix the command help ->  `kameleon <command> -h`
         | 
| 12 | 
            +
            - Add support for custom extend erb templates
         | 
| 13 | 
            +
             | 
| 4 14 | 
             
            Version 2.10.2
         | 
| 5 15 | 
             
            --------------
         | 
| 6 16 |  | 
    
        data/completion/kameleon.bash
    CHANGED
    
    | @@ -2,12 +2,23 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            _kameleon() {
         | 
| 4 4 | 
             
                COMPREPLY=()
         | 
| 5 | 
            -
                local  | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 5 | 
            +
                local i=1
         | 
| 6 | 
            +
                while [ $i -le "$COMP_CWORD" -a  "${COMP_WORDS[$i]:0:1}" == "-" ]; do
         | 
| 7 | 
            +
                    ((i++))
         | 
| 8 | 
            +
                done
         | 
| 9 | 
            +
                if [ "$COMP_CWORD" -eq $i ]; then
         | 
| 10 | 
            +
                    local commands="$(compgen -W "$(kameleon commands)" -- "${COMP_WORDS[$i]}")"
         | 
| 9 11 | 
             
                    COMPREPLY=( $commands $projects )
         | 
| 10 12 | 
             
                fi
         | 
| 13 | 
            +
                while [ $i -le "$COMP_CWORD" -a  "${COMP_WORDS[$i]:0:1}" == "-" ]; do
         | 
| 14 | 
            +
                    ((i++))
         | 
| 15 | 
            +
                done
         | 
| 16 | 
            +
                if [ "$COMP_CWORD" -eq $((i+1)) ] && kameleon commands | grep -q "${COMP_WORDS[$i]}" ; then
         | 
| 17 | 
            +
                    if wordlist=$(kameleon ${COMP_WORDS[$i]} commands); then
         | 
| 18 | 
            +
                        local commands="$(compgen -W "$wordlist" -- "${COMP_WORDS[$((i+1))]}")"
         | 
| 19 | 
            +
                        COMPREPLY=( $commands $projects )
         | 
| 20 | 
            +
                    fi
         | 
| 21 | 
            +
                fi
         | 
| 11 22 | 
             
            }
         | 
| 12 23 |  | 
| 13 24 | 
             
            complete -o default -F _kameleon kameleon
         | 
    
        data/erb/extend.yaml.erb
    ADDED
    
    | @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            #==============================================================================
         | 
| 2 | 
            +
            # vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
         | 
| 3 | 
            +
            #==============================================================================
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # DESCRIPTION: <MY RECIPE DESCRIPTION>
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            #==============================================================================
         | 
| 8 | 
            +
            # This recipe extends another. To look at the step involed, run:
         | 
| 9 | 
            +
            #   kameleon dryrun <%= recipe_name %>
         | 
| 10 | 
            +
            # To see the variables that you can override, use the following command:
         | 
| 11 | 
            +
            #   kameleon info <%= recipe_name %>
         | 
| 12 | 
            +
            ---
         | 
| 13 | 
            +
            extend: <%= tpl.relative_path_from_recipe(recipe_path) %>
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            global:
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            bootstrap:
         | 
| 18 | 
            +
              - "@base"
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            setup:
         | 
| 21 | 
            +
              - "@base"
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            export:
         | 
| 24 | 
            +
              - "@base"
         | 
| 
            File without changes
         | 
    
        data/kameleon-builder.gemspec
    CHANGED
    
    | @@ -18,7 +18,7 @@ Gem::Specification.new do |s| | |
| 18 18 | 
             
                                 'pierre.neyron@imag.fr',
         | 
| 19 19 | 
             
                                 'bruno.bzeznik@imag.fr']
         | 
| 20 20 | 
             
              s.description   = %q{The mindful appliance builder}
         | 
| 21 | 
            -
              s.summary       = %q{Kameleon is a tool to build  | 
| 21 | 
            +
              s.summary       = %q{Kameleon is a tool to build system appliances from scratch}
         | 
| 22 22 | 
             
              s.homepage      = 'http://kameleon.imag.fr/'
         | 
| 23 23 | 
             
              s.license       = 'GPL-2.0'
         | 
| 24 24 |  | 
| @@ -33,6 +33,7 @@ Gem::Specification.new do |s| | |
| 33 33 | 
             
              s.add_dependency 'table_print', '~> 1.5'
         | 
| 34 34 | 
             
              s.add_dependency 'psych', '~> 2.0'
         | 
| 35 35 | 
             
              s.add_dependency 'ruby-graphviz', '~> 1.2'
         | 
| 36 | 
            +
              s.add_dependency 'progressbar', '~> 1'
         | 
| 36 37 |  | 
| 37 38 | 
             
              s.requirements = ['polipo 1.0.3, or greater', 'graphviz 2.38.0 or greater']
         | 
| 38 39 | 
             
            end
         | 
    
        data/lib/kameleon.rb
    CHANGED
    
    | @@ -46,7 +46,7 @@ module Kameleon | |
| 46 46 | 
             
                def init_userconf()
         | 
| 47 47 | 
             
                  if not File.exists?(Kameleon.userconf_path) or File.zero?(Kameleon.userconf_path)
         | 
| 48 48 | 
             
                    File.open(Kameleon.userconf_path, 'w+') do |file|
         | 
| 49 | 
            -
                      userconf_erb = File.join(Kameleon.erb_dirpath, "userconf.erb")
         | 
| 49 | 
            +
                      userconf_erb = File.join(Kameleon.erb_dirpath, "userconf.yaml.erb")
         | 
| 50 50 | 
             
                      erb = ERB.new(File.open(userconf_erb, 'rb') { |f| f.read })
         | 
| 51 51 | 
             
                      result = erb.result(binding)
         | 
| 52 52 | 
             
                      file.write(result)
         | 
    
        data/lib/kameleon/cli.rb
    CHANGED
    
    | @@ -11,7 +11,7 @@ module Kameleon | |
| 11 11 | 
             
                class Repository < Thor
         | 
| 12 12 | 
             
                  include Thor::Actions
         | 
| 13 13 |  | 
| 14 | 
            -
                  desc "add <NAME> <GIT_URL>", "Adds a new repository named <NAME> cloned from  | 
| 14 | 
            +
                  desc "add <NAME> <GIT_URL>", "Adds a new repository named <NAME> cloned from <GIT_URL>."
         | 
| 15 15 | 
             
                  method_option :branch, :type => :string ,
         | 
| 16 16 | 
             
                                :default => nil,
         | 
| 17 17 | 
             
                                :desc => "checkout <BRANCH>",
         | 
| @@ -32,33 +32,38 @@ module Kameleon | |
| 32 32 | 
             
                  def update(name)
         | 
| 33 33 | 
             
                    Kameleon::Repository.update(name)
         | 
| 34 34 | 
             
                  end
         | 
| 35 | 
            -
                  map %w(-h --help) => :help
         | 
| 36 | 
            -
                  map %w(ls) => :list
         | 
| 37 35 |  | 
| 38 36 | 
             
                  desc "remove <NAME>", "Remove repository named <NAME>"
         | 
| 39 37 | 
             
                  def remove(name)
         | 
| 40 38 | 
             
                    Kameleon::Repository.remove(name)
         | 
| 41 39 | 
             
                  end
         | 
| 42 | 
            -
             | 
| 40 | 
            +
             | 
| 41 | 
            +
                  desc "commands", "Lists all available commands", :hide => true
         | 
| 42 | 
            +
                  def commands
         | 
| 43 | 
            +
                    puts Repository.all_commands.keys - ["commands"]
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 43 46 | 
             
                  map %w(ls) => :list
         | 
| 44 47 | 
             
                  map %w(rm) => :remove
         | 
| 48 | 
            +
                  map %w(completions) => :commands
         | 
| 45 49 | 
             
                end
         | 
| 46 50 |  | 
| 47 51 |  | 
| 48 52 | 
             
                class Template < Thor
         | 
| 49 53 | 
             
                  include Thor::Actions
         | 
| 50 54 |  | 
| 51 | 
            -
            #      register CLI::Repository, 'repository', 'repository', 'Manages set of remote git repositories'
         | 
| 52 | 
            -
             | 
| 53 55 | 
             
                  def self.source_root
         | 
| 54 56 | 
             
                    Kameleon.env.repositories_path
         | 
| 55 57 | 
             
                  end
         | 
| 56 58 |  | 
| 57 59 | 
             
                  desc "list", "Lists all available templates"
         | 
| 60 | 
            +
                  method_option :progress, :type => :boolean, :default => true,
         | 
| 61 | 
            +
                                :desc => "Show progress bar while resolving templates",
         | 
| 62 | 
            +
                                :aliases => "-p"
         | 
| 58 63 | 
             
                  def list
         | 
| 59 | 
            -
                    Kameleon.ui. | 
| 60 | 
            -
             | 
| 61 | 
            -
                    Utils.list_recipes(Kameleon.env.repositories_path)
         | 
| 64 | 
            +
                    Kameleon.ui.shell.say "Recipe templates available in: ", :red, false
         | 
| 65 | 
            +
                    Kameleon.ui.shell.say Kameleon.env.repositories_path.to_s, :yellow
         | 
| 66 | 
            +
                    Utils.list_recipes(Kameleon.env.repositories_path, options[:progress], true)
         | 
| 62 67 | 
             
                  end
         | 
| 63 68 |  | 
| 64 69 | 
             
                  desc "import <TEMPLATE_NAME>", "Imports the given template"
         | 
| @@ -110,8 +115,14 @@ module Kameleon | |
| 110 115 | 
             
                    tpl.resolve! :strict => false
         | 
| 111 116 | 
             
                    tpl.display_info(false)
         | 
| 112 117 | 
             
                  end
         | 
| 113 | 
            -
             | 
| 118 | 
            +
             | 
| 119 | 
            +
                  desc "commands", "Lists all available commands", :hide => true
         | 
| 120 | 
            +
                  def commands
         | 
| 121 | 
            +
                    puts Template.all_commands.keys - ["commands"]
         | 
| 122 | 
            +
                  end
         | 
| 123 | 
            +
             | 
| 114 124 | 
             
                  map %w(ls) => :list
         | 
| 125 | 
            +
                  map %w(completions) => :commands
         | 
| 115 126 | 
             
                end
         | 
| 116 127 | 
             
              end
         | 
| 117 128 |  | 
| @@ -133,23 +144,24 @@ module Kameleon | |
| 133 144 | 
             
                class_option :script, :type => :boolean, :default => Kameleon.default_values[:script],
         | 
| 134 145 | 
             
                             :desc => "Never prompts for user intervention",
         | 
| 135 146 | 
             
                             :aliases => "-s"
         | 
| 136 | 
            -
                map %w(-h --help) => :help
         | 
| 137 147 |  | 
| 138 148 | 
             
                desc "version", "Prints the Kameleon's version information"
         | 
| 139 149 | 
             
                def version
         | 
| 140 150 | 
             
                  puts "Kameleon version #{Kameleon::VERSION}"
         | 
| 141 151 | 
             
                end
         | 
| 142 | 
            -
                map %w(-v --version) => :version
         | 
| 143 152 |  | 
| 144 153 | 
             
                def self.source_root
         | 
| 145 154 | 
             
                  Kameleon.env.repositories_path
         | 
| 146 155 | 
             
                end
         | 
| 147 156 |  | 
| 148 157 | 
             
                desc "list", "Lists all defined recipes in the current directory"
         | 
| 158 | 
            +
                method_option :progress, :type => :boolean, :default => false,
         | 
| 159 | 
            +
                              :desc => "Show progress bar while resolving templates",
         | 
| 160 | 
            +
                              :aliases => "-p"
         | 
| 149 161 | 
             
                def list
         | 
| 150 | 
            -
                   | 
| 162 | 
            +
                  Kameleon.ui.shell.say "Workspace recipes:", :red
         | 
| 163 | 
            +
                  Utils.list_recipes(Kameleon.env.workspace, options[:progress])
         | 
| 151 164 | 
             
                end
         | 
| 152 | 
            -
                map %w(ls) => :list
         | 
| 153 165 |  | 
| 154 166 | 
             
                desc "new <RECIPE_PATH> <TEMPLATE_NAME>", "Creates a new recipe from template <TEMPLATE_NAME>"
         | 
| 155 167 | 
             
                method_option :global, :type => :hash ,
         | 
| @@ -192,7 +204,18 @@ module Kameleon | |
| 192 204 | 
             
                      recipe_temp = File.join(tmp_dir, File.basename(recipe_path))
         | 
| 193 205 | 
             
                      ## copying recipe
         | 
| 194 206 | 
             
                      File.open(recipe_temp, 'w+') do |file|
         | 
| 195 | 
            -
                         | 
| 207 | 
            +
                        message="Use extend ERB template: "
         | 
| 208 | 
            +
                        extend_erb_tpl = [
         | 
| 209 | 
            +
                          Kameleon.env.repositories_path.join(template_name + ".erb"),
         | 
| 210 | 
            +
                          Pathname.new(template_name).dirname.ascend.to_a.push(Pathname.new("")).map do |p|
         | 
| 211 | 
            +
                            Kameleon.env.repositories_path.join(p, ".kameleon-extend.yaml.erb")
         | 
| 212 | 
            +
                          end,
         | 
| 213 | 
            +
                          Pathname.new(Kameleon.erb_dirpath).join("extend.yaml.erb")
         | 
| 214 | 
            +
                        ].flatten.find do |f|
         | 
| 215 | 
            +
                          Kameleon.ui.verbose(message + f.to_s)
         | 
| 216 | 
            +
                          message = "-> Not found, fallback: "
         | 
| 217 | 
            +
                          File.readable?(f)
         | 
| 218 | 
            +
                        end 
         | 
| 196 219 | 
             
                        erb = ERB.new(File.open(extend_erb_tpl, 'rb') { |f| f.read })
         | 
| 197 220 | 
             
                        result = erb.result(binding)
         | 
| 198 221 | 
             
                        file.write(result)
         | 
| @@ -209,9 +232,6 @@ module Kameleon | |
| 209 232 | 
             
                method_option :from_cache, :type => :string ,
         | 
| 210 233 | 
             
                              :default => nil,
         | 
| 211 234 | 
             
                              :desc => "Get info from a persistent cache tar file (ignore recipe path)"
         | 
| 212 | 
            -
                method_option :dryrun, :type => :boolean ,
         | 
| 213 | 
            -
                              :default => false,
         | 
| 214 | 
            -
                              :desc => "Show the build sequence but do not actually build"
         | 
| 215 235 | 
             
                method_option :relative, :type => :boolean ,
         | 
| 216 236 | 
             
                              :default => false,
         | 
| 217 237 | 
             
                              :desc => "Make pathnames relative to the current working directory"
         | 
| @@ -419,8 +439,16 @@ module Kameleon | |
| 419 439 | 
             
                end
         | 
| 420 440 |  | 
| 421 441 | 
             
                desc "commands", "Lists all available commands", :hide => true
         | 
| 422 | 
            -
                def commands
         | 
| 423 | 
            -
                   | 
| 442 | 
            +
                def commands(context="main")
         | 
| 443 | 
            +
                  Kameleon.ui.debug("Commands for '#{context}':")
         | 
| 444 | 
            +
                  case context
         | 
| 445 | 
            +
                  when "main"
         | 
| 446 | 
            +
                    puts Main.all_commands.keys - ["commands"]
         | 
| 447 | 
            +
                  when "repository"
         | 
| 448 | 
            +
                    invoke CLI::Repository, "commands", [], []
         | 
| 449 | 
            +
                  when "template"
         | 
| 450 | 
            +
                    invoke CLI::Template, "commands", [], []
         | 
| 451 | 
            +
                  end
         | 
| 424 452 | 
             
                end
         | 
| 425 453 |  | 
| 426 454 | 
             
                desc "source_root", "Prints the kameleon directory path", :hide => true
         | 
| @@ -428,6 +456,10 @@ module Kameleon | |
| 428 456 | 
             
                  puts Kameleon.source_root
         | 
| 429 457 | 
             
                end
         | 
| 430 458 |  | 
| 459 | 
            +
                map %w(-v --version) => :version
         | 
| 460 | 
            +
                map %w(ls) => :list
         | 
| 461 | 
            +
                map %w(completions) => :commands
         | 
| 462 | 
            +
             | 
| 431 463 | 
             
                def initialize(*args)
         | 
| 432 464 | 
             
                  super
         | 
| 433 465 | 
             
                  self.options ||= {}
         | 
| @@ -445,7 +477,17 @@ module Kameleon | |
| 445 477 | 
             
                  Kameleon.ui.verbose("The level of output is set to #{Kameleon.ui.level}")
         | 
| 446 478 | 
             
                end
         | 
| 447 479 |  | 
| 448 | 
            -
                def self.start(*)
         | 
| 480 | 
            +
                def self.start(*args)
         | 
| 481 | 
            +
                  # `kameleon build -h` does not work without the following, except for subcommands...
         | 
| 482 | 
            +
                  # Ref: https://stackoverflow.com/a/49044225/6431461
         | 
| 483 | 
            +
                  if (Thor::HELP_MAPPINGS & ARGV).any? and subcommands.grep(/^#{ARGV[0]}/).empty?
         | 
| 484 | 
            +
                    Kameleon.ui.debug("Apply workaround to handle the help command in #{ARGV}")
         | 
| 485 | 
            +
                    Thor::HELP_MAPPINGS.each do |cmd|
         | 
| 486 | 
            +
                      if match = ARGV.delete(cmd)
         | 
| 487 | 
            +
                        ARGV.unshift match
         | 
| 488 | 
            +
                      end
         | 
| 489 | 
            +
                    end
         | 
| 490 | 
            +
                  end
         | 
| 449 491 | 
             
                  super
         | 
| 450 492 | 
             
                rescue Exception => e
         | 
| 451 493 | 
             
                  Kameleon.ui = Kameleon::UI::Shell.new
         | 
    
        data/lib/kameleon/recipe.rb
    CHANGED
    
    | @@ -93,7 +93,7 @@ module Kameleon | |
| 93 93 | 
             
                     unless File.file? @path
         | 
| 94 94 | 
             
                  yaml_recipe = YAML.load_file @path
         | 
| 95 95 | 
             
                  unless yaml_recipe.kind_of? Hash
         | 
| 96 | 
            -
                    fail RecipeError, "Invalid yaml | 
| 96 | 
            +
                    fail RecipeError, "Invalid yaml: #{@path}"
         | 
| 97 97 | 
             
                  end
         | 
| 98 98 |  | 
| 99 99 | 
             
                  update_steps_dirs()
         | 
| @@ -242,7 +242,7 @@ module Kameleon | |
| 242 242 | 
             
                     unless File.file? path
         | 
| 243 243 | 
             
                  base_yaml_recipe = YAML.load_file base_recipe_path
         | 
| 244 244 | 
             
                  unless yaml_recipe.kind_of? Hash
         | 
| 245 | 
            -
                    fail RecipeError, "Invalid yaml | 
| 245 | 
            +
                    fail RecipeError, "Invalid yaml: #{base_yaml_recipe}"
         | 
| 246 246 | 
             
                  end
         | 
| 247 247 | 
             
                  base_yaml_recipe.keys.each do |key|
         | 
| 248 248 | 
             
                    if ["export", "bootstrap", "setup"].include? key
         | 
    
        data/lib/kameleon/utils.rb
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            require 'progressbar'
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module Kameleon
         | 
| 2 4 | 
             
              module Utils
         | 
| 3 5 |  | 
| @@ -123,33 +125,63 @@ module Kameleon | |
| 123 125 | 
             
                  end
         | 
| 124 126 | 
             
                end
         | 
| 125 127 |  | 
| 126 | 
            -
                def self.list_recipes( | 
| 127 | 
            -
                  Kameleon.env.root_dir =  | 
| 128 | 
            +
                def self.list_recipes(recipes_path, do_progressbar = false, is_repository = false, kwargs = {})
         | 
| 129 | 
            +
                  Kameleon.env.root_dir = recipes_path
         | 
| 128 130 | 
             
                  catch_exception = kwargs.fetch(:catch_exception, true)
         | 
| 129 131 | 
             
                  recipes_hash = []
         | 
| 130 | 
            -
                  recipes_files = get_recipes( | 
| 132 | 
            +
                  recipes_files = get_recipes(recipes_path)
         | 
| 133 | 
            +
                  if recipes_files.empty?
         | 
| 134 | 
            +
                    Kameleon.ui.shell.say "  <None>", :cyan
         | 
| 135 | 
            +
                    return
         | 
| 136 | 
            +
                  end
         | 
| 137 | 
            +
                  if do_progressbar
         | 
| 138 | 
            +
                    progressbar = ProgressBar.create(:format         => '%t (%p%%) %bᗧ%i',
         | 
| 139 | 
            +
                                                     :title          => 'Resolving ' + if is_repository; 'templates' else  'recipes' end,
         | 
| 140 | 
            +
                                                     :progress_mark  => '.',
         | 
| 141 | 
            +
                                                     :remainder_mark => '・',
         | 
| 142 | 
            +
                                                     :total          => recipes_files.size + 10,
         | 
| 143 | 
            +
                                                     :starting_at    => 10)
         | 
| 144 | 
            +
                  end
         | 
| 131 145 | 
             
                  recipes_files.each do |f|
         | 
| 132 146 | 
             
                    path = f.to_s
         | 
| 133 147 | 
             
                    begin
         | 
| 134 148 | 
             
                    recipe = RecipeTemplate.new(path)
         | 
| 135 | 
            -
                    name = path.gsub( | 
| 149 | 
            +
                    name = path.gsub(recipes_path.to_s + '/', '').chomp('.yaml')
         | 
| 136 150 | 
             
                    recipes_hash.push({
         | 
| 137 151 | 
             
                      "name" => name,
         | 
| 138 152 | 
             
                      "description" => recipe.metainfo['description'],
         | 
| 139 153 | 
             
                    })
         | 
| 154 | 
            +
                    progressbar.increment if do_progressbar
         | 
| 140 155 | 
             
                    rescue => e
         | 
| 141 156 | 
             
                      raise e if Kameleon.env.debug or not catch_exception
         | 
| 142 157 | 
             
                    end
         | 
| 143 158 | 
             
                  end
         | 
| 144 159 | 
             
                  unless recipes_hash.empty?
         | 
| 145 | 
            -
                    recipes_hash = recipes_hash.sort_by{ |k| k["name"] }
         | 
| 146 160 | 
             
                    name_width = recipes_hash.map { |k| k['name'].size }.max
         | 
| 147 161 | 
             
                    desc_width = Kameleon.ui.shell.terminal_width - name_width - 3
         | 
| 148 162 | 
             
                    desc_width = (80 - name_width - 3) if desc_width < 0
         | 
| 149 163 | 
             
                  end
         | 
| 150 | 
            -
                   | 
| 151 | 
            -
             | 
| 152 | 
            -
                     | 
| 164 | 
            +
                  repo_str_old = nil
         | 
| 165 | 
            +
                  recipes_hash.sort_by{ |k| k["name"] }.each do |r|
         | 
| 166 | 
            +
                    if is_repository
         | 
| 167 | 
            +
                      repo_str,recipe_dir_str,recipe_str = r["name"].match(%r{^([^/]+/)(.+/)?([^/]+)$}).to_a[1..3].map{|m| m.to_s}
         | 
| 168 | 
            +
                    else
         | 
| 169 | 
            +
                      repo_str,recipe_dir_str,recipe_str = r["name"].match(%r{^()(.+/)?([^/]+)$}).to_a[1..3].map{|m| m.to_s}
         | 
| 170 | 
            +
                    end
         | 
| 171 | 
            +
                    if not repo_str_old.nil? and repo_str_old != repo_str
         | 
| 172 | 
            +
                      Kameleon.ui.shell.say "#{'-' * name_width} | #{'-' * desc_width}"
         | 
| 173 | 
            +
                    end
         | 
| 174 | 
            +
                    repo_str_old = repo_str
         | 
| 175 | 
            +
                    Kameleon.ui.debug("#{r["name"]} -> repo=#{repo_str}, recipe_dir=#{recipe_dir_str}, recipee=#{recipe_str}")
         | 
| 176 | 
            +
                    Kameleon.ui.shell.say "#{repo_str}", :yellow, false
         | 
| 177 | 
            +
                    Kameleon.ui.shell.say "#{recipe_dir_str}", :cyan, false
         | 
| 178 | 
            +
                    Kameleon.ui.shell.say sprintf("%-#{name_width - repo_str.length - recipe_dir_str.length}s", recipe_str), :magenta, false
         | 
| 179 | 
            +
                    Kameleon.ui.shell.say " | ", nil, false
         | 
| 180 | 
            +
                    if r["description"].to_s.length > desc_width - 4
         | 
| 181 | 
            +
                      r["description"] = r["description"][0..(desc_width - 4)] + "..."
         | 
| 182 | 
            +
                    end
         | 
| 183 | 
            +
                    Kameleon.ui.shell.say sprintf("%-#{desc_width}s", r["description"]), :blue
         | 
| 184 | 
            +
                  end
         | 
| 153 185 | 
             
                end
         | 
| 154 186 |  | 
| 155 187 | 
             
                def self.get_recipes(path)
         | 
    
        data/version.txt
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            2.10. | 
| 1 | 
            +
            2.10.3
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: kameleon-builder
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2.10. | 
| 4 | 
            +
              version: 2.10.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Salem Harrache
         | 
| @@ -12,7 +12,7 @@ authors: | |
| 12 12 | 
             
            autorequire: 
         | 
| 13 13 | 
             
            bindir: bin
         | 
| 14 14 | 
             
            cert_chain: []
         | 
| 15 | 
            -
            date: 2020-04- | 
| 15 | 
            +
            date: 2020-04-11 00:00:00.000000000 Z
         | 
| 16 16 | 
             
            dependencies:
         | 
| 17 17 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 18 18 | 
             
              name: childprocess
         | 
| @@ -96,6 +96,20 @@ dependencies: | |
| 96 96 | 
             
                - - "~>"
         | 
| 97 97 | 
             
                  - !ruby/object:Gem::Version
         | 
| 98 98 | 
             
                    version: '1.2'
         | 
| 99 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 100 | 
            +
              name: progressbar
         | 
| 101 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 102 | 
            +
                requirements:
         | 
| 103 | 
            +
                - - "~>"
         | 
| 104 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 105 | 
            +
                    version: '1'
         | 
| 106 | 
            +
              type: :runtime
         | 
| 107 | 
            +
              prerelease: false
         | 
| 108 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 109 | 
            +
                requirements:
         | 
| 110 | 
            +
                - - "~>"
         | 
| 111 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 112 | 
            +
                    version: '1'
         | 
| 99 113 | 
             
            description: The mindful appliance builder
         | 
| 100 114 | 
             
            email:
         | 
| 101 115 | 
             
            - salem.harrache@inria.fr
         | 
| @@ -157,8 +171,8 @@ files: | |
| 157 171 | 
             
            - contrib/steps/setup/root_ssh_config.yaml
         | 
| 158 172 | 
             
            - contrib/steps/setup/set_user_password.yaml
         | 
| 159 173 | 
             
            - contrib/steps/setup/system_optimization.yaml
         | 
| 160 | 
            -
            - erb/extend.erb
         | 
| 161 | 
            -
            - erb/userconf.erb
         | 
| 174 | 
            +
            - erb/extend.yaml.erb
         | 
| 175 | 
            +
            - erb/userconf.yaml.erb
         | 
| 162 176 | 
             
            - kameleon-builder.gemspec
         | 
| 163 177 | 
             
            - lib/kameleon.rb
         | 
| 164 178 | 
             
            - lib/kameleon/cli.rb
         | 
| @@ -226,7 +240,7 @@ rubyforge_project: | |
| 226 240 | 
             
            rubygems_version: 2.7.6.2
         | 
| 227 241 | 
             
            signing_key: 
         | 
| 228 242 | 
             
            specification_version: 4
         | 
| 229 | 
            -
            summary: Kameleon is a tool to build  | 
| 243 | 
            +
            summary: Kameleon is a tool to build system appliances from scratch
         | 
| 230 244 | 
             
            test_files:
         | 
| 231 245 | 
             
            - tests/helper.rb
         | 
| 232 246 | 
             
            - tests/issue76/fail.stdout
         | 
    
        data/erb/extend.erb
    DELETED
    
    | @@ -1,33 +0,0 @@ | |
| 1 | 
            -
            #==============================================================================
         | 
| 2 | 
            -
            # vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
         | 
| 3 | 
            -
            #==============================================================================
         | 
| 4 | 
            -
            #
         | 
| 5 | 
            -
            # DESCRIPTION: <MY RECIPE DESCRIPTION>
         | 
| 6 | 
            -
            #
         | 
| 7 | 
            -
            #==============================================================================
         | 
| 8 | 
            -
            ---
         | 
| 9 | 
            -
            extend: <%= tpl.relative_path_from_recipe(recipe_path) %>
         | 
| 10 | 
            -
             | 
| 11 | 
            -
            global:
         | 
| 12 | 
            -
              # This is the backend you have imported to switch to an other backend BCKD do:
         | 
| 13 | 
            -
              #
         | 
| 14 | 
            -
              #   kameleon template import <%= tpl.relative_path_from_recipe(recipe_path) %> --global backend:BCKB
         | 
| 15 | 
            -
              #
         | 
| 16 | 
            -
              # Then, uncomment and update the following variable.
         | 
| 17 | 
            -
            <% if Kameleon.env.global["backend"] %>
         | 
| 18 | 
            -
              backend: <%= Kameleon.env.global["backend"] %>
         | 
| 19 | 
            -
            <% else %>
         | 
| 20 | 
            -
              # backend: qemu
         | 
| 21 | 
            -
            <% end %>
         | 
| 22 | 
            -
              # To see the variables that you can override, use the following command:
         | 
| 23 | 
            -
              #
         | 
| 24 | 
            -
              #   kameleon info <%= recipe_name %>
         | 
| 25 | 
            -
             | 
| 26 | 
            -
            bootstrap:
         | 
| 27 | 
            -
              - "@base"
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            setup:
         | 
| 30 | 
            -
              - "@base"
         | 
| 31 | 
            -
             | 
| 32 | 
            -
            export:
         | 
| 33 | 
            -
              - "@base"
         |