Skip to content

Commit

Permalink
Improve error handling for missing dependency versions for github act…
Browse files Browse the repository at this point in the history
…ions (#11144)
  • Loading branch information
robaiken authored Dec 19, 2024
1 parent 5fabd3d commit 6c7a3b7
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 0 deletions.
22 changes: 22 additions & 0 deletions common/lib/dependabot/errors.rb
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,11 @@ def self.parser_error_details(error)
"error-type": "git_dependencies_not_reachable",
"error-detail": { "dependency-urls": error.dependency_urls }
}
when Dependabot::UnresolvableVersionError
{
"error-type": "unresolvable_version",
"error-detail": { dependencies: error.dependencies }
}
when Dependabot::NotImplemented
{
"error-type": "not_implemented",
Expand Down Expand Up @@ -661,6 +666,23 @@ def initialize(dependencies)
end
end

class UnresolvableVersionError < DependabotError
extend T::Sig

sig { returns(T::Array[String]) }
attr_reader :dependencies

sig { params(dependencies: T::Array[String]).void }
def initialize(dependencies)
@dependencies = dependencies

msg = "Unable to determine semantic version from tags or commits for dependencies. " \
"Dependencies must have a tag or commit that references a semantic version. " \
"Affected dependencies: #{@dependencies.join(', ')}"
super(msg)
end
end

class GitDependenciesNotReachable < DependabotError
extend T::Sig

Expand Down
6 changes: 6 additions & 0 deletions github_actions/lib/dependabot/github_actions/file_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ def parse
dependency_set += workfile_file_dependencies(file)
end

dependencies_without_version = dependency_set.dependencies.select { |dep| dep.version.nil? }
unless dependencies_without_version.empty?
raise UnresolvableVersionError,
dependencies_without_version.map(&:name)
end

dependency_set.dependencies
end

Expand Down
21 changes: 21 additions & 0 deletions github_actions/spec/dependabot/github_actions/file_parser_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -560,5 +560,26 @@ def mock_service_pack_request(nwo)
end
end
end

context "with an unresolvable version" do
let(:workflow_file_fixture_name) { "unresolved_version.yml" }
let(:service_pack_url) do
"https://github.com/taiki-e/install-action.git/info/refs" \
"?service=git-upload-pack"
end

before do
mock_service_pack_request("taiki-e/install-action")
end

it "raises an UnresolvableVersionError error" do
expect { parser.parse }.to raise_error(
Dependabot::UnresolvableVersionError,
"Unable to determine semantic version from tags or commits for dependencies. " \
"Dependencies must have a tag or commit that references a semantic version. " \
"Affected dependencies: taiki-e/install-action"
)
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
on: [push]

name: Integration
jobs:
chore:
steps:
- uses: taiki-e/install-action@nextest

0 comments on commit 6c7a3b7

Please sign in to comment.