Skip to content

Commit bdce0a3

Browse files
kbukum1Copilot
andcommitted
Align dry-run.rb blocked_versions with version-requirement rename
Update bin/dry-run.rb (from merged PR #14916) to use 'version-requirement' instead of 'version' in the blocked_versions data structure, matching the rename done in job.rb and the API contract. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent cf7d562 commit bdce0a3

4 files changed

Lines changed: 29 additions & 12 deletions

File tree

bin/dry-run.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@
228228

229229
unless ENV["BLOCKED_VERSIONS"].to_s.strip.empty?
230230
# For example:
231-
# [{"dependency-name":"event-stream","version":"= 3.3.6","reason":"malware"}]
231+
# [{"dependency-name":"event-stream","version-requirement":"= 3.3.6","reason":"malware"}]
232232
$options[:blocked_versions] = JSON.parse(ENV.fetch("BLOCKED_VERSIONS", nil))
233233
end
234234

@@ -730,9 +730,9 @@ def ignored_versions_for(dep)
730730

731731
def blocked_versions_for(dep)
732732
$options[:blocked_versions]
733-
.select { |bv| bv["dependency-name"] && bv["version"] }
733+
.select { |bv| bv["dependency-name"] && bv["version-requirement"] }
734734
.select { |bv| bv["dependency-name"].casecmp(dep.name).zero? }
735-
.map { |bv| bv["version"] }
735+
.map { |bv| bv["version-requirement"] }
736736
end
737737

738738
def security_advisories
@@ -794,7 +794,7 @@ def security_fix?(dependency)
794794
if $options[:blocked_versions].any?
795795
puts "=> blocked versions active:"
796796
$options[:blocked_versions].each do |bv|
797-
msg = " #{bv['dependency-name']} #{bv['version']}"
797+
msg = " #{bv['dependency-name']} #{bv['version-requirement']}"
798798
msg += " (#{bv['reason']})" if bv["reason"]
799799
puts msg
800800
end

updater/lib/dependabot/api_client.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ def fetch_blocked_versions(package_manager)
408408
return []
409409
end
410410
data = parsed.fetch("data", [])
411-
unless data.is_a?(Array)
411+
unless data.is_a?(Array) && data.all?(Hash)
412412
Dependabot.logger.warn("Unexpected blocked versions format, continuing without them")
413413
return []
414414
end

updater/lib/dependabot/update_files_command.rb

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,14 @@ def job
7373
definition = JSON.parse(JSON.generate(Environment.job_definition))
7474
job_hash = definition["job"]
7575

76-
# Register experiments from the job definition early so experiment
77-
# gates below can read flags that arrive via the job payload.
78-
(job_hash["experiments"] || {}).each do |name, value|
79-
Experiments.register(name.to_s.tr("-", "_"), value)
80-
end
81-
8276
# Fetch blocked versions from the API if the experiment is enabled.
77+
# Check both the Experiments registry and the raw job definition since
78+
# job-scoped experiments are not registered until Job construction.
8379
# Inject them into the job definition so they're available at construction time.
84-
if Experiments.enabled?(:dependabot_blocked_versions)
80+
experiments = job_hash["experiments"] || {}
81+
if Experiments.enabled?(:dependabot_blocked_versions) ||
82+
experiments["dependabot_blocked_versions"] ||
83+
experiments["dependabot-blocked-versions"]
8584
package_manager = job_hash["package-manager"] || job_hash["package_manager"] || ""
8685
blocked = service.fetch_blocked_versions(package_manager)
8786
job_hash["blocked-versions"] = blocked

updater/spec/dependabot/api_client_spec.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,5 +921,23 @@
921921
expect(result).to eq([])
922922
end
923923
end
924+
925+
context "when the API returns data entries that are not hashes" do
926+
before do
927+
stub_request(:get, blocked_versions_url)
928+
.with(query: { "package-manager": "npm_and_yarn" })
929+
.to_return(
930+
status: 200,
931+
body: { data: [1, "not-a-hash"] }.to_json,
932+
headers: headers
933+
)
934+
end
935+
936+
it "returns an empty array and logs a warning" do
937+
expect(Dependabot.logger).to receive(:warn).with(/Unexpected blocked versions format/)
938+
result = client.fetch_blocked_versions("npm_and_yarn")
939+
expect(result).to eq([])
940+
end
941+
end
924942
end
925943
end

0 commit comments

Comments
 (0)