def execute_build(build_wrappers)
      fetcher.clean

      build_wrappers.each { |wrapper| wrapper.execute_pre_build(self) }
      builder.build
      build_wrappers.each { |wrapper| wrapper.execute_post_build(self) }

      if Config.use_git_caching
        git_cache.incremental
        log.info(log_key) { "Dirtied the cache" }
      end
    end
def execute_build(build_wrappers)
      fetcher.clean

      build_wrappers.each { |wrapper| wrapper.execute_pre_build(self) }
      builder.build
      build_wrappers.each { |wrapper| wrapper.execute_post_build(self) }

      if Config.use_git_caching
        git_cache.incremental
        log.info(log_key) { "Dirtied the cache" }
      end
    end
Actually build this software, executing the steps provided in the
 {#build} block and dirtying the cache.

 @param [Array<#execute_pre_build, #execute_post_build>] build_wrappers
   Build wrappers inject behavior before or after the software is built.
   They can be any object that implements `#execute_pre_build` and
   `#execute_post_build`

 @return [void]