class CircleciArtifact::Fetcher

This is the main interface, handles fetching and parsing

Public Class Methods

new(token:, username:, reponame:, build:) click to toggle source

@param token [String] @param username [String] @param reponame [String] @param build [String]

# File lib/circleci_artifact.rb, line 92
def initialize(token:, username:, reponame:, build:)
  raise ArgumentError, 'Error: Missing CIRCLE_API_TOKEN' if token.to_s.empty?
  raise ArgumentError, 'Error: Missing CIRCLE_PROJECT_USERNAME' if username.to_s.empty?
  raise ArgumentError, 'Error: Missing CIRCLE_PROJECT_REPONAME' if reponame.to_s.empty?
  raise ArgumentError, 'Error: Missing CIRCLE_BUILD_NUM' if build.to_s.empty?

  @token = token
  @username = username
  @reponame = reponame
  @build = build

  @config = CircleCi::Config.new token: token
end

Public Instance Methods

fetch_queries(queries) click to toggle source

Give array of Query to find, returns Results

@param queries [Array<Query>] @return [ResultSet]

# File lib/circleci_artifact.rb, line 110
def fetch_queries(queries)
  raise ArgumentError, 'Error: Must have queries' unless queries.is_a?(Array)
  build = CircleCi::Build.new @username, @reponame, nil, @build, @config
  artifacts = build.artifacts

  if artifacts.nil?
    STDERR.puts 'Error: No artifacts'
    return Results.new
  end
  parse(artifacts: artifacts, queries: queries)
end
parse(artifacts:, queries:) click to toggle source

Internal method for extracting results @param artifacts [CircleCi::Artifacts] @param queries [Array<Query>] @return [ResultSet]

# File lib/circleci_artifact.rb, line 126
def parse(artifacts:, queries:)
  raise ArgumentError, 'Error: Must have artifacts' if artifacts.nil?
  raise ArgumentError, 'Error: Must have queries' unless queries.is_a?(Array)

  # Example
  # [
  #   {
  #     node_index: 0,
  #     path: "/tmp/circle-artifacts.NHQxLku/cherry-pie.png",
  #     pretty_path: "$CIRCLE_ARTIFACTS/cherry-pie.png",
  #     url: "https://circleci.com/gh/circleci/mongofinil/22/artifacts/0/tmp/circle-artifacts.NHQxLku/cherry-pie.png"
  #   },
  #   {
  #     node_index: 0,
  #     path: "/tmp/circle-artifacts.NHQxLku/rhubarb-pie.png",
  #     pretty_path: "$CIRCLE_ARTIFACTS/rhubarb-pie.png",
  #     url: "https://circleci.com/gh/circleci/mongofinil/22/artifacts/0/tmp/circle-artifacts.NHQxLku/rhubarb-pie.png"
  #   }
  # ]

  results = ResultSet.new

  artifacts.body.each do |artifact|
    url = artifact['url']
    if url.nil?
      STDERR.puts "Warning: No URL found on #{artifact}"
      next
    end

    query = queries.find { |q| url.include?(q.url_substring) }
    next if query.nil?
    result = Result.new(query: query, url: url)
    results.add_result(result)
  end

  results
end