Skip to content

Commit 68ed65a

Browse files
committed
Skip Gradle cooldown metadata fetch when cooldown is not configured
Avoids unnecessary network requests to fetch release-date metadata on every Gradle job when the user has no cooldown configured (the default). Fixes #14152
1 parent 10db257 commit 68ed65a

3 files changed

Lines changed: 56 additions & 13 deletions

File tree

gradle/lib/dependabot/gradle/package/package_details_fetcher.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
require "dependabot/gradle/metadata_finder"
1616
require "dependabot/gradle/package/release_date_extractor"
1717
require "dependabot/gradle/package/version_release_date_fallback_fetcher"
18+
require "dependabot/package/release_cooldown_options"
1819

1920
module Dependabot
2021
module Gradle
@@ -31,14 +32,16 @@ class PackageDetailsFetcher
3132
dependency: Dependabot::Dependency,
3233
dependency_files: T::Array[Dependabot::DependencyFile],
3334
credentials: T::Array[Dependabot::Credential],
34-
forbidden_urls: T.nilable(T::Array[String])
35+
forbidden_urls: T.nilable(T::Array[String]),
36+
cooldown_options: T.nilable(Dependabot::Package::ReleaseCooldownOptions)
3537
).void
3638
end
37-
def initialize(dependency:, dependency_files:, credentials:, forbidden_urls:)
39+
def initialize(dependency:, dependency_files:, credentials:, forbidden_urls:, cooldown_options: nil)
3840
@dependency = dependency
3941
@dependency_files = dependency_files
4042
@credentials = credentials
4143
@forbidden_urls = forbidden_urls
44+
@cooldown_options = T.let(cooldown_options, T.nilable(Dependabot::Package::ReleaseCooldownOptions))
4245
@repositories = T.let(nil, T.nilable(T::Array[T::Hash[String, T.untyped]]))
4346
@google_version_details = T.let(nil, T.nilable(T::Array[T::Hash[String, T.untyped]]))
4447
@dependency_repository_details = T.let(nil, T.nilable(T::Array[T::Hash[String, T.untyped]]))
@@ -77,7 +80,7 @@ def fetch_available_versions
7780
end.flatten.compact
7881

7982
version_details = version_details.sort_by { |details| details.fetch(:version) }
80-
release_date_info = release_details
83+
release_date_info = @cooldown_options ? release_details : {}
8184
version_details.each do |info|
8285
package_releases << {
8386
version: Gradle::Version.new(info[:version].to_s),

gradle/lib/dependabot/gradle/update_checker/version_finder.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ def versions
124124
dependency: dependency,
125125
dependency_files: dependency_files,
126126
credentials: credentials,
127-
forbidden_urls: forbidden_urls
127+
forbidden_urls: forbidden_urls,
128+
cooldown_options: cooldown_options
128129
).fetch_available_versions
129130
end
130131

@@ -169,7 +170,8 @@ def package_details_fetcher
169170
dependency: dependency,
170171
dependency_files: dependency_files,
171172
credentials: credentials,
172-
forbidden_urls: []
173+
forbidden_urls: [],
174+
cooldown_options: cooldown_options
173175
),
174176
T.nilable(Dependabot::Gradle::Package::PackageDetailsFetcher)
175177
)

gradle/spec/dependabot/gradle/package/package_details_fetcher_spec.rb

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
require "dependabot/gradle/update_checker/version_finder"
88

99
RSpec.describe Dependabot::Gradle::Package::PackageDetailsFetcher do
10+
let(:cooldown_options) { nil }
1011
let(:packagedetailsfetcher) do
1112
described_class.new(
1213
dependency: dependency,
1314
dependency_files: dependency_files,
1415
credentials: credentials,
15-
16-
forbidden_urls: []
16+
forbidden_urls: [],
17+
cooldown_options: cooldown_options
1718
)
1819
end
1920
let(:version_class) { Dependabot::Gradle::Version }
@@ -62,6 +63,27 @@
6263
describe "#versions" do
6364
subject(:versions) { packagedetailsfetcher.fetch_available_versions }
6465

66+
context "when cooldown_options is nil" do
67+
it "does not fetch release metadata" do
68+
expect(packagedetailsfetcher).not_to receive(:release_details)
69+
packagedetailsfetcher.fetch_available_versions
70+
end
71+
end
72+
73+
context "when cooldown_options is configured" do
74+
let(:cooldown_options) { Dependabot::Package::ReleaseCooldownOptions.new(default_days: 7) }
75+
76+
before do
77+
stub_request(:get, "https://repo.maven.apache.org/maven2/com/google/guava/guava/")
78+
.to_return(status: 200, body: "")
79+
end
80+
81+
it "fetches release metadata" do
82+
expect(packagedetailsfetcher).to receive(:release_details).and_call_original
83+
packagedetailsfetcher.fetch_available_versions
84+
end
85+
end
86+
6587
its(:count) { is_expected.to eq(70) }
6688

6789
describe "the first version" do
@@ -310,9 +332,17 @@
310332
is_expected.to eq("https://plugins.gradle.org/m2")
311333
end
312334

313-
its([:released_at]) do
314-
# lastUpdated from fixture: 20190404053033 (2019-04-04 05:30:33 UTC)
315-
is_expected.to eq(Time.utc(2019, 4, 4, 5, 30, 33))
335+
context "without cooldown configured" do
336+
its([:released_at]) { is_expected.to be_nil }
337+
end
338+
339+
context "with cooldown configured" do
340+
let(:cooldown_options) { Dependabot::Package::ReleaseCooldownOptions.new(default_days: 7) }
341+
342+
its([:released_at]) do
343+
# lastUpdated from fixture: 20190404053033 (2019-04-04 05:30:33 UTC)
344+
is_expected.to eq(Time.utc(2019, 4, 4, 5, 30, 33))
345+
end
316346
end
317347
end
318348
end
@@ -390,9 +420,17 @@
390420
is_expected.to eq("https://plugins.gradle.org/m2")
391421
end
392422

393-
its([:released_at]) do
394-
# lastUpdated from fixture: 20201222143435 (2020-12-22 14:34:35 UTC)
395-
is_expected.to eq(Time.utc(2020, 12, 22, 14, 34, 35))
423+
context "without cooldown configured" do
424+
its([:released_at]) { is_expected.to be_nil }
425+
end
426+
427+
context "with cooldown configured" do
428+
let(:cooldown_options) { Dependabot::Package::ReleaseCooldownOptions.new(default_days: 7) }
429+
430+
its([:released_at]) do
431+
# lastUpdated from fixture: 20201222143435 (2020-12-22 14:34:35 UTC)
432+
is_expected.to eq(Time.utc(2020, 12, 22, 14, 34, 35))
433+
end
396434
end
397435
end
398436
end

0 commit comments

Comments
 (0)