publish

in lib/omnibus/publishers/artifactory_publisher.rb [21:78]


    def publish(&block)
      log.info(log_key) { "Starting artifactory publisher" }
      safe_require("artifactory")

      packages.each do |package|
        
        log.debug(log_key) { "Validating '#{package.name}'" }
        package.validate!

        retries = Config.publish_retries

        begin
          upload_time = Benchmark.realtime do
            remote_path = remote_path_for(package)
            properties  = default_properties.merge(metadata_properties_for(package))

            
            log.info(log_key) { "Uploading '#{package.name}'" }
            artifact_for(package).upload(
              repository,
              remote_path,
              properties
            )
            
            log.info(log_key) { "Uploading '#{package.name}.metadata.json'" }
            artifact_for(package.metadata).upload(
              repository,
              "#{remote_path}.metadata.json",
              
              
              properties.dup.delete_if { |k, v| k =~ /^omnibus\.(md5|sha)/ }
            )
          end
        rescue Artifactory::Error::HTTPError => e
          if (retries -= 1) != 0
            log.info(log_key) { "Upload failed with exception: #{e}" }
            log.info(log_key) { "Retrying failed publish #{retries} more time(s)..." }
            retry
          else
            raise e
          end
        end

        log.debug(log_key) { "Elapsed time to publish #{package.name}:  #{1000 * upload_time} ms" }

        
        yield(package) if block
      end

      if build_record?
        if packages.empty?
          log.warn(log_key) { "No packages were uploaded, build record will not be created." }
        else
          build_for(packages).save
        end
      end
    end