Selaa lähdekoodia

pkg/urlutil: deprecate, and move to builder/remotecontext/urlutil

pkg/urlutil (despite its poorly chosen name) is not really intended as a generic
utility to handle URLs, and should only be used by the builder to handle (remote)
build contexts.

- IsURL() only does a very rudimentary check for http(s):// prefixes, without any
  other validation, but due to its name may give incorrect expectations.
- IsGitURL() is written specifically with docker build remote git contexts in
  mind, and has handling for backward-compatibility, where strings that are
  not URLs, but start with "github.com/" are accepted.

Because of the above, this patch:

- moves the package inside builder/remotecontext, close to where it's intended
  to be used (ideally this would be part of build/remotecontext itself, but this
  package imports many other dependencies, which would introduce those as extra
  dependencies in the CLI).
- deprecates pkg/urlutil, but adds aliases as there are some external consumers.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 3 vuotta sitten
vanhempi
commit
5f89a6a78e

+ 1 - 1
builder/dockerfile/copy.go

@@ -16,6 +16,7 @@ import (
 
 	"github.com/docker/docker/builder"
 	"github.com/docker/docker/builder/remotecontext"
+	"github.com/docker/docker/builder/remotecontext/urlutil"
 	"github.com/docker/docker/pkg/archive"
 	"github.com/docker/docker/pkg/containerfs"
 	"github.com/docker/docker/pkg/idtools"
@@ -23,7 +24,6 @@ import (
 	"github.com/docker/docker/pkg/progress"
 	"github.com/docker/docker/pkg/streamformatter"
 	"github.com/docker/docker/pkg/system"
-	"github.com/docker/docker/pkg/urlutil"
 	"github.com/moby/buildkit/frontend/dockerfile/instructions"
 	specs "github.com/opencontainers/image-spec/specs-go/v1"
 	"github.com/pkg/errors"

+ 1 - 1
builder/remotecontext/detect.go

@@ -11,9 +11,9 @@ import (
 	"github.com/containerd/continuity/driver"
 	"github.com/docker/docker/api/types/backend"
 	"github.com/docker/docker/builder"
+	"github.com/docker/docker/builder/remotecontext/urlutil"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/pkg/fileutils"
-	"github.com/docker/docker/pkg/urlutil"
 	"github.com/moby/buildkit/frontend/dockerfile/dockerignore"
 	"github.com/moby/buildkit/frontend/dockerfile/parser"
 	"github.com/pkg/errors"

+ 1 - 1
pkg/urlutil/urlutil.go → builder/remotecontext/urlutil/urlutil.go

@@ -1,6 +1,6 @@
 // Package urlutil provides helper function to check urls kind.
 // It supports http and git urls.
-package urlutil // import "github.com/docker/docker/pkg/urlutil"
+package urlutil // import "github.com/docker/docker/builder/remotecontext/urlutil"
 
 import (
 	"regexp"

+ 1 - 1
pkg/urlutil/urlutil_test.go → builder/remotecontext/urlutil/urlutil_test.go

@@ -1,4 +1,4 @@
-package urlutil // import "github.com/docker/docker/pkg/urlutil"
+package urlutil // import "github.com/docker/docker/builder/remotecontext/urlutil"
 
 import "testing"
 

+ 6 - 0
hack/make.ps1

@@ -251,6 +251,12 @@ Function Validate-PkgImports($headCommit, $upstreamCommit) {
     $files=@(); $files = Invoke-Expression "git diff $upstreamCommit...$headCommit --diff-filter=ACMR --name-only -- `'pkg\*.go`'"
     $badFiles=@(); $files | ForEach-Object{
         $file=$_
+        if ($file -eq "pkg\urlutil\deprecated.go") {
+            # pkg/urlutil is deprecated, but has a temporary alias to help migration,
+            # see https://github.com/moby/moby/pull/43477
+            # TODO(thaJeztah) remove this exception once pkg/urlutil aliases are removed
+            return
+        }
         # For the current changed file, get its list of dependencies, sorted and uniqued.
         $imports = Invoke-Expression "go list -e -f `'{{ .Deps }}`' $file"
         if ($LASTEXITCODE -ne 0) { Throw "Failed go list for dependencies on $file" }

+ 6 - 0
hack/validate/pkg-imports

@@ -10,6 +10,12 @@ unset IFS
 
 badFiles=()
 for f in "${files[@]}"; do
+	if [ "$f" = "pkg/urlutil/deprecated.go" ]; then
+		# pkg/urlutil is deprecated, but has a temporary alias to help migration,
+		# see https://github.com/moby/moby/pull/43477
+		# TODO(thaJeztah) remove this exception once pkg/urlutil aliases are removed
+		continue
+	fi
 	IFS=$'\n'
 	badImports=($(go list -e -f '{{ join .Deps "\n" }}' "$f" | sort -u | grep -vE '^github.com/docker/docker/pkg/' | grep -vE '^github.com/docker/docker/vendor' | grep -E '^github.com/docker/docker' || true))
 	unset IFS

+ 21 - 0
pkg/urlutil/deprecated.go

@@ -0,0 +1,21 @@
+package urlutil // import "github.com/docker/docker/pkg/urlutil"
+
+import "github.com/docker/docker/builder/remotecontext/urlutil"
+
+// IsURL returns true if the provided str is an HTTP(S) URL.
+//
+// Deprecated: use github.com/docker/docker/builder/remotecontext/urlutil.IsURL
+// to detect build-context type, or use strings.HasPrefix() to check if the
+// string has a https:// or http:// prefix.
+func IsURL(str string) bool {
+	// TODO(thaJeztah) when removing this alias, remove the exception from hack/validate/pkg-imports and hack/make.ps1 (Validate-PkgImports)
+	return urlutil.IsURL(str)
+}
+
+// IsGitURL returns true if the provided str is a git repository URL.
+//
+// Deprecated: use github.com/docker/docker/builder/remotecontext/urlutil.IsGitURL
+func IsGitURL(str string) bool {
+	// TODO(thaJeztah) when removing this alias, remove the exception from hack/validate/pkg-imports and hack/make.ps1 (Validate-PkgImports)
+	return urlutil.IsGitURL(str)
+}