Skip to content

Commit c3799f6

Browse files
Merge pull request #11977 from jpinz/docker-version-digest-fix
Update docker version to include digest if applicable - Fixed
2 parents 06d39c8 + 497ebf8 commit c3799f6

8 files changed

+71
-63
lines changed

docker/lib/dependabot/docker/file_parser.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ def parse_helm(img_hash)
155155

156156
image = "#{repo}:#{tag}"
157157
image.prepend("#{registry}/") if registry
158-
image << "@sha256:#{digest}/" if digest
158+
image << "@#{digest}/" if digest
159159
[image]
160160
end
161161

docker/lib/dependabot/docker/update_checker.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ def digest_of(tag)
427427

428428
sig { params(tag: String).returns(T.nilable(String)) }
429429
def fetch_digest_of(tag)
430-
docker_registry_client.manifest_digest(docker_repo_name, tag)&.delete_prefix("sha256:")
430+
docker_registry_client.manifest_digest(docker_repo_name, tag)
431431
rescue *transient_docker_errors => e
432432
attempt ||= 1
433433
attempt += 1

docker/lib/dependabot/shared/shared_file_parser.rb

+8-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,13 @@ class SharedFileParser < Dependabot::FileParsers::Base
3333

3434
sig { params(parsed_line: T::Hash[String, T.nilable(String)]).returns(T.nilable(String)) }
3535
def version_from(parsed_line)
36-
parsed_line.fetch("tag") || parsed_line.fetch("digest")
36+
return nil unless parsed_line.fetch("tag") || parsed_line.fetch("digest")
37+
38+
if parsed_line.fetch("tag") && parsed_line.fetch("digest")
39+
"#{parsed_line.fetch('tag')}@sha256:#{parsed_line.fetch('digest')}"
40+
else
41+
parsed_line.fetch("tag") || "sha256:#{parsed_line.fetch('digest')}"
42+
end
3743
end
3844

3945
sig { params(parsed_line: T::Hash[String, T.nilable(String)]).returns(T::Hash[String, T.nilable(String)]) }
@@ -42,7 +48,7 @@ def source_from(parsed_line)
4248

4349
source[:registry] = parsed_line.fetch("registry") if parsed_line.fetch("registry")
4450
source[:tag] = parsed_line.fetch("tag") if parsed_line.fetch("tag")
45-
source[:digest] = parsed_line.fetch("digest") if parsed_line.fetch("digest")
51+
source[:digest] = "sha256:#{parsed_line.fetch('digest')}" if parsed_line.fetch("digest")
4652

4753
source
4854
end

docker/lib/dependabot/shared/shared_file_updater.rb

+6-6
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def update_digest_and_tag(previous_content, old_source, new_source)
9292
end
9393
old_declaration +=
9494
if specified_with_digest?(old_source)
95-
"@sha256:#{old_digest}"
95+
"@#{old_digest}"
9696
else
9797
""
9898
end
@@ -103,7 +103,7 @@ def update_digest_and_tag(previous_content, old_source, new_source)
103103

104104
previous_content.gsub(old_declaration_regex) do |old_dec|
105105
old_dec
106-
.gsub("@sha256:#{old_digest}", "@sha256:#{new_digest}")
106+
.gsub("@#{old_digest}", "@#{new_digest}")
107107
.gsub(":#{old_tag}", ":#{new_tag}")
108108
end
109109
end
@@ -160,7 +160,7 @@ def update_image(file, content)
160160
def new_yaml_image(file)
161161
element = T.must(dependency).requirements.find { |r| r[:file] == file.name }
162162
prefix = element&.dig(:source, :registry) ? "#{element.fetch(:source)[:registry]}/" : ""
163-
digest = element&.dig(:source, :digest) ? "@sha256:#{element.fetch(:source)[:digest]}" : ""
163+
digest = element&.dig(:source, :digest) ? "@#{element.fetch(:source)[:digest]}" : ""
164164
tag = element&.dig(:source, :tag) ? ":#{element.fetch(:source)[:tag]}" : ""
165165
"#{prefix}#{T.must(dependency).name}#{tag}#{digest}"
166166
end
@@ -169,7 +169,7 @@ def new_yaml_image(file)
169169
def old_yaml_images(file)
170170
T.must(previous_requirements(file)).map do |r|
171171
prefix = r.fetch(:source)[:registry] ? "#{r.fetch(:source)[:registry]}/" : ""
172-
digest = r.fetch(:source)[:digest] ? "@sha256:#{r.fetch(:source)[:digest]}" : ""
172+
digest = r.fetch(:source)[:digest] ? "@#{r.fetch(:source)[:digest]}" : ""
173173
tag = r.fetch(:source)[:tag] ? ":#{r.fetch(:source)[:tag]}" : ""
174174
"#{prefix}#{T.must(dependency).name}#{tag}#{digest}"
175175
end
@@ -179,7 +179,7 @@ def old_yaml_images(file)
179179
def old_helm_tags(file)
180180
T.must(previous_requirements(file)).map do |r|
181181
tag = r.fetch(:source)[:tag] || ""
182-
digest = r.fetch(:source)[:digest] ? "@sha256:#{r.fetch(:source)[:digest]}" : ""
182+
digest = r.fetch(:source)[:digest] ? "@#{r.fetch(:source)[:digest]}" : ""
183183
"#{tag}#{digest}"
184184
end
185185
end
@@ -188,7 +188,7 @@ def old_helm_tags(file)
188188
def new_helm_tag(file)
189189
element = T.must(dependency).requirements.find { |r| r[:file] == file.name }
190190
tag = T.must(element).dig(:source, :tag) || ""
191-
digest = T.must(element).dig(:source, :digest) ? "@sha256:#{T.must(element).dig(:source, :digest)}" : ""
191+
digest = T.must(element).dig(:source, :digest) ? "@#{T.must(element).dig(:source, :digest)}" : ""
192192
"#{tag}#{digest}"
193193
end
194194

docker/spec/dependabot/docker/common/shared_examples_for_docker_update_checkers.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
context "when digest is up-to-date" do
113113
let(:source) do
114114
{
115-
digest: "3ea1ca1aa8483a38081750953ad75046e6cc9f6b86ca97" \
115+
digest: "sha256:3ea1ca1aa8483a38081750953ad75046e6cc9f6b86ca97" \
116116
"eba880ebf600d68608"
117117
}
118118
end
@@ -610,7 +610,7 @@
610610
groups: [],
611611
file: file_name,
612612
source: {
613-
digest: "3ea1ca1aa8483a38081750953ad75046e6cc9f6b86" \
613+
digest: "sha256:3ea1ca1aa8483a38081750953ad75046e6cc9f6b86" \
614614
"ca97eba880ebf600d68608"
615615
}
616616
}]
@@ -636,7 +636,7 @@
636636
groups: [],
637637
file: file_name,
638638
source: {
639-
digest: "3ea1ca1aa8483a38081750953ad75046e6cc9f6b86" \
639+
digest: "sha256:3ea1ca1aa8483a38081750953ad75046e6cc9f6b86" \
640640
"ca97eba880ebf600d68608",
641641
tag: "17.10"
642642
}

docker/spec/dependabot/docker/file_parser_spec.rb

+14-12
Original file line numberDiff line numberDiff line change
@@ -158,14 +158,14 @@
158158
requirement: nil,
159159
groups: [],
160160
file: "Dockerfile",
161-
source: { digest: "18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005" }
161+
source: { digest: "sha256:18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005" }
162162
}]
163163
end
164164

165165
it "has the right details" do
166166
expect(dependency).to be_a(Dependabot::Dependency)
167167
expect(dependency.name).to eq("my-fork/ubuntu")
168-
expect(dependency.version).to eq("18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005")
168+
expect(dependency.version).to eq("sha256:18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005")
169169
expect(dependency.requirements).to eq(expected_requirements)
170170
end
171171
end
@@ -275,7 +275,7 @@
275275
groups: [],
276276
file: "Dockerfile",
277277
source: {
278-
digest: "18305429afa14ea462f810146ba44d4363ae76e4c8d" \
278+
digest: "sha256:18305429afa14ea462f810146ba44d4363ae76e4c8d" \
279279
"fc38288cf73aa07485005"
280280
}
281281
}]
@@ -284,7 +284,7 @@
284284
it "has the right details" do
285285
expect(dependency).to be_a(Dependabot::Dependency)
286286
expect(dependency.name).to eq("ubuntu")
287-
expect(dependency.version).to eq("18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005")
287+
expect(dependency.version).to eq("sha256:18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005")
288288
expect(dependency.requirements).to eq(expected_requirements)
289289
end
290290
end
@@ -335,7 +335,7 @@
335335
groups: [],
336336
file: "Dockerfile",
337337
source: {
338-
digest: "18305429afa14ea462f810146ba44d4363ae76e4c8d" \
338+
digest: "sha256:18305429afa14ea462f810146ba44d4363ae76e4c8d" \
339339
"fc38288cf73aa07485005"
340340
}
341341
}]
@@ -344,7 +344,7 @@
344344
it "has the right details" do
345345
expect(dependency).to be_a(Dependabot::Dependency)
346346
expect(dependency.name).to eq("ubuntu")
347-
expect(dependency.version).to eq("18305429afa14ea462f810146ba44d4363ae76e4c8d" \
347+
expect(dependency.version).to eq("sha256:18305429afa14ea462f810146ba44d4363ae76e4c8d" \
348348
"fc38288cf73aa07485005")
349349
expect(dependency.requirements).to eq(expected_requirements)
350350
end
@@ -380,14 +380,15 @@
380380
it "determines the correct version" do
381381
expect(dependency).to be_a(Dependabot::Dependency)
382382
expect(dependency.name).to eq("ubuntu")
383-
expect(dependency.version).to eq("12.04.5")
383+
expect(dependency.version).to eq("12.04.5@sha256:18305429afa14ea462f810146ba44d4363ae76e4c8d" \
384+
"fc38288cf73aa07485005")
384385
expect(dependency.requirements).to eq([{
385386
requirement: nil,
386387
groups: [],
387388
file: "Dockerfile",
388389
source: {
389390
tag: "12.04.5",
390-
digest: "18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005"
391+
digest: "sha256:18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005"
391392
}
392393
}])
393394
end
@@ -831,7 +832,7 @@
831832
groups: [],
832833
file: "digest.yaml",
833834
source: {
834-
digest: "18305429afa14ea462f810146ba44d4363ae76e4c8d" \
835+
digest: "sha256:18305429afa14ea462f810146ba44d4363ae76e4c8d" \
835836
"fc38288cf73aa07485005"
836837
}
837838
}]
@@ -840,7 +841,7 @@
840841
it "has the right details" do
841842
expect(dependency).to be_a(Dependabot::Dependency)
842843
expect(dependency.name).to eq("ubuntu")
843-
expect(dependency.version).to eq("18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005")
844+
expect(dependency.version).to eq("sha256:18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005")
844845
expect(dependency.requirements).to eq(expected_requirements)
845846
end
846847
end
@@ -873,14 +874,15 @@
873874
it "determines the correct version" do
874875
expect(dependency).to be_a(Dependabot::Dependency)
875876
expect(dependency.name).to eq("ubuntu")
876-
expect(dependency.version).to eq("12.04.5")
877+
expect(dependency.version).to eq("12.04.5@sha256:18305429afa14ea462f810146ba44d4363ae76e4c8d" \
878+
"fc38288cf73aa07485005")
877879
expect(dependency.requirements).to eq([{
878880
requirement: nil,
879881
groups: [],
880882
file: "digest_and_tag.yaml",
881883
source: {
882884
tag: "12.04.5",
883-
digest: "18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005"
885+
digest: "sha256:18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005"
884886
}
885887
}])
886888
end

0 commit comments

Comments
 (0)