Skip to content

Commit 4626a53

Browse files
author
vitalie
committed
RakeTasks: refactor latest_release_for
1 parent 834c3ae commit 4626a53

File tree

2 files changed

+32
-67
lines changed

2 files changed

+32
-67
lines changed

lib/travis/build/rake_tasks.rb

+3-26
Original file line numberDiff line numberDiff line change
@@ -58,32 +58,9 @@ def fetch_githubusercontent_file(from, host: 'raw.githubusercontent.com',
5858
end
5959

6060
def latest_release_for(repo)
61-
conn = build_faraday_conn(host: 'api.github.com')
62-
63-
response = conn.get do |req|
64-
releases_url = "repos/#{repo}/releases"
65-
logger.info "Fetching releases from #{conn.url_prefix}#{releases_url}"
66-
req.url releases_url
67-
oauth_token = ENV.fetch(
68-
'GITHUB_OAUTH_TOKEN', ENV.fetch('no_scope_token', 'notset')
69-
)
70-
if oauth_token && !oauth_token.empty? && oauth_token != 'notset'
71-
logger.info(
72-
"Adding 'Authorization' header for api.github.com request"
73-
)
74-
req.headers['Authorization'] = "token #{oauth_token}"
75-
end
76-
end
77-
78-
raise "Could not find releases for #{repo}" unless response.success?
79-
80-
json_data = JSON.parse(response.body)
81-
raise "No releases found for #{repo}" if json_data.empty?
82-
83-
json_data.sort! do |a, b|
84-
semver_cmp(a['tag_name'].sub(/^v/, ''), b['tag_name'].sub(/^v/, ''))
85-
end
86-
json_data.last['tag_name']
61+
octokit.latest_release(repo)['tag_name']
62+
rescue
63+
raise "Could not get latest release for #{repo}"
8764
end
8865

8966
def file_update_sc_data

spec/build/rake_tasks_spec.rb

+29-41
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,8 @@ def tmp_top
1111
describe Travis::Build::RakeTasks do
1212
subject { described_class }
1313

14-
def releases_response(*versions)
15-
[
16-
200,
17-
{ 'Content-Type' => 'application/json' },
18-
JSON.dump(
19-
versions.map { |v| { 'tag_name' => v } }
20-
)
21-
]
22-
end
23-
2414
let :request_stubs do
2515
Faraday::Adapter::Test::Stubs.new do |stub|
26-
%w[
27-
creationix/nvm
28-
tmate-io/tmate
29-
tools/godep
30-
travis-ci/gimme
31-
].each do |repo_slug|
32-
stub.get("/repos/#{repo_slug}/releases") do |*|
33-
releases_response('v1.2.3', 'v1.2.5')
34-
end
35-
end
36-
3716
[
3817
['tmate-io/tmate', 'tmate-v1.2.5-static-linux-amd64.tar.xz'],
3918
['tools/godep', 'godep_darwin_amd64'],
@@ -168,27 +147,36 @@ def releases_response(*versions)
168147
expect(ghc_versions).to_not be_exist
169148
end
170149

171-
%w[
172-
public/files/casher
173-
public/files/gimme
174-
public/files/godep_darwin_amd64
175-
public/files/godep_linux_amd64
176-
public/files/nvm.sh
177-
public/files/rustup-init.sh
178-
public/files/sbt
179-
public/files/sc-linux.tar.gz
180-
public/files/sc-osx.zip
181-
public/files/tmate-static-linux-amd64.tar.xz
182-
public/version-aliases/ghc.json
183-
].each do |filename|
184-
it "can fetch #{filename}" do
185-
%w[
186-
tmp/ghc-versions.html
187-
].each { |t| Rake::Task[t].reenable }
150+
context 'fetch files' do
151+
let(:uri_template) { Addressable::Template.new 'https://api.github.com/repos/{owner}/{repo}/releases/latest' }
152+
153+
%w[
154+
public/files/casher
155+
public/files/gimme
156+
public/files/godep_darwin_amd64
157+
public/files/godep_linux_amd64
158+
public/files/nvm.sh
159+
public/files/rustup-init.sh
160+
public/files/sbt
161+
public/files/sc-linux.tar.gz
162+
public/files/sc-osx.zip
163+
public/files/tmate-static-linux-amd64.tar.xz
164+
public/version-aliases/ghc.json
165+
].each do |filename|
166+
before do
167+
stub_request(:get, uri_template)
168+
.to_return(headers: { content_type: 'application/json' }, body: '{"tag_name": "v1.2.5"}')
169+
end
188170

189-
Rake::Task[filename].reenable
190-
Rake::Task[filename].invoke
191-
expect(tmp_top + filename).to be_exist
171+
it "can fetch #{filename}" do
172+
%w[
173+
tmp/ghc-versions.html
174+
].each { |t| Rake::Task[t].reenable }
175+
176+
Rake::Task[filename].reenable
177+
Rake::Task[filename].invoke
178+
expect(tmp_top + filename).to be_exist
179+
end
192180
end
193181
end
194182

0 commit comments

Comments
 (0)