From 63fc248616a67ce8cec0449b96de93d919e3b285 Mon Sep 17 00:00:00 2001 From: Ryan Brandenburg Date: Wed, 25 Oct 2023 16:47:58 -0700 Subject: [PATCH] Allow docker version prefixes to contain underscores --- docker/lib/dependabot/docker/tag.rb | 4 +-- .../dependabot/docker/file_parser_spec.rb | 28 +++++++++++++++++++ .../fixtures/docker/dockerfiles/underscore | 18 ++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 docker/spec/fixtures/docker/dockerfiles/underscore diff --git a/docker/lib/dependabot/docker/tag.rb b/docker/lib/dependabot/docker/tag.rb index 21ef0cd52eab..dcef80ad55fe 100644 --- a/docker/lib/dependabot/docker/tag.rb +++ b/docker/lib/dependabot/docker/tag.rb @@ -9,8 +9,8 @@ class Tag WORDS_WITH_BUILD = /(?:(?:-[a-z]+)+-[0-9]+)+/ VERSION_REGEX = /v?(?[0-9]+(?:\.[0-9]+)*(?:_[0-9]+|\.[a-z0-9]+|#{WORDS_WITH_BUILD}|-(?:kb)?[0-9]+)*)/i VERSION_WITH_SFX = /^#{VERSION_REGEX}(?-[a-z][a-z0-9.\-]*)?$/i - VERSION_WITH_PFX = /^(?[a-z][a-z0-9.\-]*-)?#{VERSION_REGEX}$/i - VERSION_WITH_PFX_AND_SFX = /^(?[a-z\-]+-)?#{VERSION_REGEX}(?-[a-z\-]+)?$/i + VERSION_WITH_PFX = /^(?[a-z][a-z0-9.\-_]*-)?#{VERSION_REGEX}$/i + VERSION_WITH_PFX_AND_SFX = /^(?[a-z\-_]+-)?#{VERSION_REGEX}(?-[a-z\-]+)?$/i NAME_WITH_VERSION = / #{VERSION_WITH_PFX}| diff --git a/docker/spec/dependabot/docker/file_parser_spec.rb b/docker/spec/dependabot/docker/file_parser_spec.rb index 262a644dd490..8b83bf4a9a4e 100644 --- a/docker/spec/dependabot/docker/file_parser_spec.rb +++ b/docker/spec/dependabot/docker/file_parser_spec.rb @@ -462,6 +462,34 @@ end end + context "with a _ in the tag" do + let(:dockerfile_fixture_name) { "underscore" } + + its(:length) { is_expected.to eq(1) } + + describe "the first dependency" do + subject(:dependency) { dependencies.first } + let(:expected_requirements) do + [{ + requirement: nil, + groups: [], + file: "Dockerfile", + source: { + registry: "registry-host.io:5000", + tag: "someRepo_19700101.4" + } + }] + end + + it "has the right details" do + expect(dependency).to be_a(Dependabot::Dependency) + expect(dependency.name).to eq("myreg/ubuntu") + expect(dependency.version).to eq("someRepo_19700101.4") + expect(dependency.requirements).to eq(expected_requirements) + end + end + end + context "with a private registry and a tag" do let(:dockerfile_fixture_name) { "private_tag" } diff --git a/docker/spec/fixtures/docker/dockerfiles/underscore b/docker/spec/fixtures/docker/dockerfiles/underscore new file mode 100644 index 000000000000..694284ae8f14 --- /dev/null +++ b/docker/spec/fixtures/docker/dockerfiles/underscore @@ -0,0 +1,18 @@ +FROM registry-host.io:5000/myreg/ubuntu:someRepo_19700101.4 + +### SYSTEM DEPENDENCIES + +RUN apt-get update \ + && apt-get upgrade -y \ + && apt-get install -y --no-install-recommends \ + build-essential \ + dirmngr \ + git \ + +### RUBY + +# Install Ruby 2.4 +RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C3173AA6 \ + && echo "deb http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu zesty main" > /etc/apt/sources.list.d/brightbox.list \ + && apt-get update +RUN apt-get install -y ruby2.4 ruby2.4-dev