Sha256: 3c3485712b09a65158d73b92786399ee8bfdeff96ca63cde56497632ad74b19f

Contents?: true

Size: 1.98 KB

Versions: 3

Compression:

Stored size: 1.98 KB

Contents

# coding: utf-8

module Status
  class Jenkins

    def initialize(branch, sha=nil)
      @branch = branch.gsub(/\//, "_")
      @sha = sha
    end

    def target_url
      build_url || "#{Status.ci_url}/job/#{@branch}"
    end

    def state
      status
    end

    def pass?
      status == "success"
    end

    private

    def path
      "/job/#{@branch}/#{build}/api/json"
    end

    def status
      @status ||= ci_status
    end

    def ci_status
      return "pending" if any_pending_reasons?
      return "failure" if result_is_failure?
      "success"
    end

    def build
      return last_build["number"] if last_build
      "lastBuild"
    end

    def result_is_failure?
      response["result"].downcase != "success"
    end

    def build_url
      if last_build.nil?
        return
      end
      last_build["url"]
    end

    def last_build
      @last_build ||= get_build_for_sha
    end

    def get_build_for_sha
      return unless @sha
      ci_response["builds"].each do |build|
        return build if last_build_contails_sha?(build)
        return build if build_is_in_change_set?(build)
      end
      nil
    end

    def any_pending_reasons?
      response == "not found" || queued? || response["building"] == true
    end

    def response
      @response ||= Request.new(:ci).get(path)
    end

    def ci_response
      @ci_response ||= Request.new(:ci).get("/job/#{@branch}/api/json?depth=1")
    end

    def queued?
      (!!ci_response["queueItem"]).tap do |queued|
        if queued
          Status.system_warn "Your build (#{@branch}) is in a queue."
        end
      end
    end

    def last_build_contails_sha?(build)
      return false if build["actions"].nil? || build["actions"][1].nil?
      build["actions"][1]["lastBuiltRevision"]["SHA1"] =~ /^#{@sha}/
    end

    def build_is_in_change_set?(build)
      return false if build["changeSet"].nil?
      build["changeSet"]["items"].any? do |item|
        item["commitId"] =~ /^#{@sha}/
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
update_status-0.3.2 lib/status/jenkins.rb
update_status-0.3.1 lib/status/jenkins.rb
update_status-0.3.0 lib/status/jenkins.rb