Class: ReleaseTagger::Repo

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

Constant Summary collapse

PACKAGECLOUD_ACCOUNT =
'lostmyname'
REPO =
'qa'
ITEMS_PER_PAGE =
1000
ARCHS =
%w(noarch x86_64)
VERSIONS_URL =
"https://packagecloud.io/api/v1/repos/#{PACKAGECLOUD_ACCOUNT}/#{REPO}/package/rpm/el/7/%s/%s/versions.json?per_page=#{ITEMS_PER_PAGE}"

Instance Method Summary collapse

Instance Method Details

#get_api_tokenObject



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/release_tagger/repo.rb', line 13

def get_api_token
  home_config_file = Pathname.new(File.join(File.expand_path('~'), '.release_tagger', 'packagecloud_token'))
  etc_config_file = Pathname.new(File.join('/etc', 'release_tagger', 'packagecloud_token'))

  if etc_config_file.exist?
    package_cloud_api_token = etc_config_file.read.strip
  elsif home_config_file.exist?
    package_cloud_api_token = home_config_file.read.strip
  elsif ENV['PACKAGECLOUD_API_TOKEN']
    package_cloud_api_token = ENV['PACKAGECLOUD_API_TOKEN']
  else
    puts %(Config for packagecloud not found!
Consider setting your packagecloud api token in any of:
  - #{home_config_file}
  - #{etc_config_file}
  - env var PACKAGECLOUD_API_TOKEN
)
    exit 1
  end

  package_cloud_api_token
end

#get_json_response(url) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/release_tagger/repo.rb', line 36

def get_json_response(url)
  pc_api_token = get_api_token
  uri = URI.parse(url)
  req = Net::HTTP::Get.new(uri)
  req.basic_auth pc_api_token, ''
  response = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https') {|http| http.request(req)}
  unless response.is_a?(Net::HTTPOK)
    puts "Error trying to get latest version of package #{package_name}"
    puts response.code
    exit 1
  end

  res = JSON.parse(response.body)
  res

end

#get_max_package_version(package_name) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/release_tagger/repo.rb', line 53

def get_max_package_version(package_name)
  release_version = '0.0.0'
  ARCHS.each do |arch|
    res = get_json_response(VERSIONS_URL % [package_name, arch])
    unless res == []
      latest_package = res.select { |package| package['name'] == package_name}.max_by{ |package| Gem::Version.new(package['version'])}
      if Gem::Version.new(latest_package['version']) > Gem::Version.new(release_version)
        release_version = latest_package['version']
      end
    end
  end
  release_version
end