Class: CircleciArtifact::Fetcher

Inherits:
Object
  • Object
show all
Defined in:
lib/circleci_artifact.rb

Overview

This is the main interface, handles fetching and parsing

Instance Method Summary collapse

Constructor Details

#initialize(token:, username:, reponame:, build:) ⇒ Fetcher

Returns a new instance of Fetcher.

Parameters:

  • token (String)
  • username (String)
  • reponame (String)
  • build (String)

Raises:

  • (ArgumentError)


92
93
94
95
96
97
98
99
100
101
102
103
104
# 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

Instance Method Details

#fetch_queries(queries) ⇒ ResultSet

Give array of Query to find, returns Results

Parameters:

Returns:

Raises:

  • (ArgumentError)


110
111
112
113
114
115
116
117
118
119
120
# 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:) ⇒ ResultSet

Internal method for extracting results

Parameters:

  • artifacts (CircleCi::Artifacts)
  • queries (Array<Query>)

Returns:

Raises:

  • (ArgumentError)


126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# 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