def run!
      begin
        ensure_path target_path
        setup_log
        
        log_info "Commit: #{@commit}"
        
        log_info "Cleaning..."
        clean
        
        log_info "Exporting..."
        ensure_path export_path
        export
        
        begin
          load_config
        rescue ConfigMissingError => e
          log_error e.message
          log_error 'Removing export...'
          clean
          
          return false
        end
        @builder ||= instantiate_builder
        @tester  ||= instantiate_tester
        @hooker  ||= instantiate_hooker
        
        log_info "Building..."
        run_hook! :before_build
        begin
          @builder.build
        rescue => e
          run_hook! :after_build_failure
          
          raise e if ENV['TINYCI_ENV'] == 'test'
          
          log_error e
          log_debug e.backtrace
          
          return false
        else
          run_hook! :after_build_success
        ensure
          run_hook! :after_build
        end
        
        
        log_info "Testing..."
        run_hook! :before_test
        begin
          @tester.test
        rescue => e
          run_hook! :after_test_failure
          
          raise e if ENV['TINYCI_ENV'] == 'test'
          
          log_error e
          log_debug e.backtrace
          
          return false
        else
          run_hook! :after_test_success
        ensure
          run_hook! :after_test
        end
        
        
        
        log_info "Finished #{@commit}"
      rescue => e
        raise e if ENV['TINYCI_ENV'] == 'test'
        
        log_error e
        log_debug e.backtrace
        return false
      end
      
      true
    end
def run!
      begin
        ensure_path target_path
        setup_log
        
        log_info "Commit: #{@commit}"
        
        log_info "Cleaning..."
        clean
        
        log_info "Exporting..."
        ensure_path export_path
        export
        
        begin
          load_config
        rescue ConfigMissingError => e
          log_error e.message
          log_error 'Removing export...'
          clean
          
          return false
        end
        @builder ||= instantiate_builder
        @tester  ||= instantiate_tester
        @hooker  ||= instantiate_hooker
        
        log_info "Building..."
        run_hook! :before_build
        begin
          @builder.build
        rescue => e
          run_hook! :after_build_failure
          
          raise e if ENV['TINYCI_ENV'] == 'test'
          
          log_error e
          log_debug e.backtrace
          
          return false
        else
          run_hook! :after_build_success
        ensure
          run_hook! :after_build
        end
        
        
        log_info "Testing..."
        run_hook! :before_test
        begin
          @tester.test
        rescue => e
          run_hook! :after_test_failure
          
          raise e if ENV['TINYCI_ENV'] == 'test'
          
          log_error e
          log_debug e.backtrace
          
          return false
        else
          run_hook! :after_test_success
        ensure
          run_hook! :after_test
        end
        
        
        
        log_info "Finished #{@commit}"
      rescue => e
        raise e if ENV['TINYCI_ENV'] == 'test'
        
        log_error e
        log_debug e.backtrace
        return false
      end
      
      true
    end
Constructor, allows injection of generic configuration params.

 @param working_dir [String] The working directory to execute against.
 @param commit [String] SHA1 of git object to run against
 @param logger [Logger] Logger object
 @param time [Time] Override time of object creation. Used solely for testing at this time.
 @param config [Hash] Override TinyCI config object, normally loaded from `.tinyci` file. Used solely for testing at this time.
 Runs the TinyCI system against the single git object referenced in `@commit`.

 @return [Boolean] `true` if the commit was built and tested successfully, `false` otherwise