From ce93ffb9b72f70949a3e5e759a77a16a50037daa Mon Sep 17 00:00:00 2001 From: Ankit Honey Date: Fri, 4 Nov 2022 21:19:58 -0700 Subject: [PATCH 1/8] Added useful error message when image not found. Error DockerRegistry2::NotFound --- .../lib/dependabot/docker/update_checker.rb | 6 ++- .../dependabot/docker/update_checker_spec.rb | 52 +++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/docker/lib/dependabot/docker/update_checker.rb b/docker/lib/dependabot/docker/update_checker.rb index d46ec4ecdc9..05f80cc9967 100644 --- a/docker/lib/dependabot/docker/update_checker.rb +++ b/docker/lib/dependabot/docker/update_checker.rb @@ -224,8 +224,8 @@ def tags_from_registry @tags_from_registry ||= begin client = docker_registry_client - - client.tags(docker_repo_name, auto_paginate: true).fetch("tags") + repo = docker_repo_name + client.tags(repo, auto_paginate: true).fetch("tags") rescue *transient_docker_errors attempt ||= 1 attempt += 1 @@ -233,6 +233,8 @@ def tags_from_registry retry end + rescue DockerRegistry2::NotFound + raise DockerRegistry2::NotFound, "404 Not Found. Image https://#{registry_hostname}/#{repo} not found" rescue DockerRegistry2::RegistryAuthenticationException, RestClient::Forbidden raise PrivateSourceAuthenticationFailure, registry_hostname diff --git a/docker/spec/dependabot/docker/update_checker_spec.rb b/docker/spec/dependabot/docker/update_checker_spec.rb index 582efd9997d..d9cf7338a6c 100644 --- a/docker/spec/dependabot/docker/update_checker_spec.rb +++ b/docker/spec/dependabot/docker/update_checker_spec.rb @@ -283,6 +283,58 @@ it { is_expected.to eq("17.04") } end + context "when tag is not found" do + let(:dependency_name) { "ubuntu" } + let(:dependency) do + Dependabot::Dependency.new( + name: dependency_name, + version: version, + requirements: [{ + requirement: nil, + groups: [], + file: "Dockerfile", + source: { tag: "17.10" } + }], + package_manager: "docker" + ) + end + let(:tags_fixture_name) { "ubuntu_no_latest.json" } + + context "with replaces-base set to true" do + let(:credentials) do + [{ + "type" => "git_source", + "host" => "github.com", + "username" => "x-access-token", + "password" => "token" + }, { + "type" => "docker_registry", + "registry" => "registry-host.io:5000", + "username" => "grey", + "password" => "pa55word", + "replaces-base" => true + }] + end + + before do + tags_url = "https://registry-host.io:5000/v2/ubuntu/tags/list" + stub_request(:get, tags_url). + and_return( + status: 404, + body: "" + ) + end + + it "raises a to DockerRegistry2::NotFound error" do + error_class = DockerRegistry2::NotFound + expect { checker.latest_version }. + to raise_error(error_class) do |error| + expect(error.message).to eq("404 Not Found. Image https://registry-host.io:5000/ubuntu not found") + end + end + end + end + context "when the dependency's version has a prefix" do let(:version) { "artful-20170826" } it { is_expected.to eq("artful-20170916") } From 52e3632239599adc59759bef486f337d55e36f3c Mon Sep 17 00:00:00 2001 From: Ankit Honey Date: Fri, 4 Nov 2022 21:31:33 -0700 Subject: [PATCH 2/8] Modified rspec testcase heading --- docker/spec/dependabot/docker/update_checker_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/spec/dependabot/docker/update_checker_spec.rb b/docker/spec/dependabot/docker/update_checker_spec.rb index d9cf7338a6c..d493d9b2b72 100644 --- a/docker/spec/dependabot/docker/update_checker_spec.rb +++ b/docker/spec/dependabot/docker/update_checker_spec.rb @@ -283,7 +283,7 @@ it { is_expected.to eq("17.04") } end - context "when tag is not found" do + context "when image is not found" do let(:dependency_name) { "ubuntu" } let(:dependency) do Dependabot::Dependency.new( From c57c1a5122069a2157df700f0673ba69bc5cf3c1 Mon Sep 17 00:00:00 2001 From: Ankit Honey Date: Fri, 4 Nov 2022 21:34:43 -0700 Subject: [PATCH 3/8] Removed dead code from update_checker_spec.rb --- .../spec/dependabot/docker/update_checker_spec.rb | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/docker/spec/dependabot/docker/update_checker_spec.rb b/docker/spec/dependabot/docker/update_checker_spec.rb index d493d9b2b72..770d4a15b41 100644 --- a/docker/spec/dependabot/docker/update_checker_spec.rb +++ b/docker/spec/dependabot/docker/update_checker_spec.rb @@ -284,20 +284,6 @@ end context "when image is not found" do - let(:dependency_name) { "ubuntu" } - let(:dependency) do - Dependabot::Dependency.new( - name: dependency_name, - version: version, - requirements: [{ - requirement: nil, - groups: [], - file: "Dockerfile", - source: { tag: "17.10" } - }], - package_manager: "docker" - ) - end let(:tags_fixture_name) { "ubuntu_no_latest.json" } context "with replaces-base set to true" do From 578b1ae9521ceec62385a628133d7cea6b5ff54e Mon Sep 17 00:00:00 2001 From: Ankit Honey Date: Mon, 7 Nov 2022 11:53:47 -0800 Subject: [PATCH 4/8] Update docker/lib/dependabot/docker/update_checker.rb Co-authored-by: Mattt --- docker/lib/dependabot/docker/update_checker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/lib/dependabot/docker/update_checker.rb b/docker/lib/dependabot/docker/update_checker.rb index 05f80cc9967..56037b29dd7 100644 --- a/docker/lib/dependabot/docker/update_checker.rb +++ b/docker/lib/dependabot/docker/update_checker.rb @@ -225,7 +225,7 @@ def tags_from_registry begin client = docker_registry_client repo = docker_repo_name - client.tags(repo, auto_paginate: true).fetch("tags") + client.tags(docker_repo_name, auto_paginate: true).fetch("tags") rescue *transient_docker_errors attempt ||= 1 attempt += 1 From a40b79ddfa93e226a5a7449189388780132224f5 Mon Sep 17 00:00:00 2001 From: Ankit Honey Date: Mon, 7 Nov 2022 11:57:19 -0800 Subject: [PATCH 5/8] Update docker/lib/dependabot/docker/update_checker.rb Co-authored-by: Mattt --- docker/lib/dependabot/docker/update_checker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/lib/dependabot/docker/update_checker.rb b/docker/lib/dependabot/docker/update_checker.rb index 56037b29dd7..07dafea0a52 100644 --- a/docker/lib/dependabot/docker/update_checker.rb +++ b/docker/lib/dependabot/docker/update_checker.rb @@ -234,7 +234,7 @@ def tags_from_registry retry end rescue DockerRegistry2::NotFound - raise DockerRegistry2::NotFound, "404 Not Found. Image https://#{registry_hostname}/#{repo} not found" + raise DockerRegistry2::NotFound, "Image not found: https://#{registry_hostname}/#{docker_repo_name}" rescue DockerRegistry2::RegistryAuthenticationException, RestClient::Forbidden raise PrivateSourceAuthenticationFailure, registry_hostname From 291d5b6d7fd8f9d957751056bb4e6fe65cc0fc34 Mon Sep 17 00:00:00 2001 From: Ankit Honey Date: Mon, 7 Nov 2022 12:00:10 -0800 Subject: [PATCH 6/8] Removed unused line of code [repo = docker_repo_name] --- docker/lib/dependabot/docker/update_checker.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/docker/lib/dependabot/docker/update_checker.rb b/docker/lib/dependabot/docker/update_checker.rb index 07dafea0a52..d8f740c1147 100644 --- a/docker/lib/dependabot/docker/update_checker.rb +++ b/docker/lib/dependabot/docker/update_checker.rb @@ -224,7 +224,6 @@ def tags_from_registry @tags_from_registry ||= begin client = docker_registry_client - repo = docker_repo_name client.tags(docker_repo_name, auto_paginate: true).fetch("tags") rescue *transient_docker_errors attempt ||= 1 From c27f837d3df36f669746aae42c4e1cfa93226db1 Mon Sep 17 00:00:00 2001 From: Ankit Honey Date: Mon, 7 Nov 2022 12:02:48 -0800 Subject: [PATCH 7/8] Added correct massage to evaluate testcase for exception DockerRegistry2::NotFound --- docker/spec/dependabot/docker/update_checker_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/spec/dependabot/docker/update_checker_spec.rb b/docker/spec/dependabot/docker/update_checker_spec.rb index 770d4a15b41..adddbf847d5 100644 --- a/docker/spec/dependabot/docker/update_checker_spec.rb +++ b/docker/spec/dependabot/docker/update_checker_spec.rb @@ -315,7 +315,7 @@ error_class = DockerRegistry2::NotFound expect { checker.latest_version }. to raise_error(error_class) do |error| - expect(error.message).to eq("404 Not Found. Image https://registry-host.io:5000/ubuntu not found") + expect(error.message).to eq("Image not found: https://registry-host.io:5000/ubuntu") end end end From 35212d3446497c58e86a3ef3cc1a333d627eabc1 Mon Sep 17 00:00:00 2001 From: Ankit Honey Date: Mon, 7 Nov 2022 12:04:35 -0800 Subject: [PATCH 8/8] Added a removed empty line back in func tags_from_registry --- docker/lib/dependabot/docker/update_checker.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/lib/dependabot/docker/update_checker.rb b/docker/lib/dependabot/docker/update_checker.rb index d8f740c1147..f087d70ef35 100644 --- a/docker/lib/dependabot/docker/update_checker.rb +++ b/docker/lib/dependabot/docker/update_checker.rb @@ -224,6 +224,7 @@ def tags_from_registry @tags_from_registry ||= begin client = docker_registry_client + client.tags(docker_repo_name, auto_paginate: true).fetch("tags") rescue *transient_docker_errors attempt ||= 1