From 993e8a32d6ad3461f6e79495f1c91f2335507a15 Mon Sep 17 00:00:00 2001 From: Guinevere Saenger Date: Fri, 17 Mar 2023 14:19:44 -0700 Subject: [PATCH] Add Dockerfile to build context if passed from outside the build context (#542) Breaking Change: If a user provides a Dockerfile, the path specified must be absolute, or relative to the _Pulumi_ context, not the Docker build context. The `dockerfile` field remains optional, and if left blank, we assume traditional location of Dockerfile within the Docker build context. Specifics: - If a user does not specify a Dockerfile the provider defaults to "Dockerfile", relative to Docker build context. The tarball already contains all necessary build files. - If a user declares a Dockerfile, it must be an absolute path or a path relative to the Pulumi.yaml's location in the file system. The provider does its best to detect if a Dockerfile path was declared in error, and sends a helpful error message to the user during `Check()`, i.e. during a `pulumi preview`. - When a Dockerfile is passed from outside the Docker build context, we create a separate Dockerfile context and add it to the build tarball. Note that any COPY statements are now relative to the Docker context, and not the Pulumi program's filesystem location. * Add Dockerfile to build context using the clibuild method Testing this against context: app and dockerfile: Dockerfile, we see error hashing dockerfile "Dockerfile": could not open file Dockerfile: open app/Dockerfile: no such file or directory Unsure if I installed the correct provider version. Retrying. * First attempt at getting a relative Dockerfile so we can hash it properly * Pass relDockerfile to hashContext Currently fails wilt dockerfile frontend error. relDockerfile needs to be passed to the build context tarball. * This now errors with Diagnostics: docker:index:Image (my-image): error: failed to compute cache key: "/app" not found: not found But that just means the Dockerfile is passing the wrong folder - this is an expected error. * Remove debugs and cleanup * fix linter; disable dotnet registry tests * A blank Dockerfile gets tests to pass but reverses the logic for outside-context Dockerfiles again. We need to create different logic for hashing and not use the cli build library. * Use separator as way to determine whether this dockerfile is relative to the build context or not * Use filepath separator detection to determine if a Dockerfile context is needed. * unskip dotnet tests * Refactor relative path getter function for testing purposes * Add unit test for getting the relative path to demonstrate and cement assumptions * lint: handle error * Remove default values for Dockerfile and Context. Refine logic for detecting external Dockerfile. Return dockerfile and context as outputs in schema. Return additional outputs from Create: build context and its relative Dockerfile Pass the replaced Dockerfile to the image build options when necessary Co-authored-by: Aaron Friel * Verify existence of Dockerfile in Check function This allows for us to fail early, during preview, and send an error message to a user who is providing an erroneous Dockerfile. Co-authored-by: Aaron Friel * Add integration tests for new dockerfile logic Co-authored-by: Aaron Friel * Re-generate schema and SDKs * Add a test for a build left blank * Pacify linter --------- Co-authored-by: Aaron Friel --- .../docker-container-registry/ts/index.ts | 2 +- examples/dockerfile_test.go | 77 ++++++++++++ examples/examples_nodejs_test.go | 2 +- .../dockerfile-default-context/Dockerfile | 3 + .../dockerfile-default-context/Pulumi.yaml | 13 ++ .../dockerfile-default-context/app.txt | 1 + .../dockerfile-default/Pulumi.yaml | 15 +++ .../dockerfile-default/app/Dockerfile | 3 + .../dockerfile-default/app/app.txt | 1 + .../dockerfile-external/Dockerfile | 3 + .../dockerfile-external/Pulumi.yaml | 16 +++ .../dockerfile-external/app/app.txt | 1 + .../dockerfile-in-context/Pulumi.yaml | 15 +++ .../dockerfile-in-context/app/Dockerfile | 3 + .../dockerfile-in-context/app/app.txt | 1 + .../cmd/pulumi-resource-docker/schema.json | 14 ++- provider/go.mod | 55 ++++----- provider/go.sum | 114 ++++++++++-------- provider/image.go | 89 +++++++++----- provider/provider.go | 62 +++++++++- provider/provider_test.go | 32 +++++ provider/resources.go | 10 +- sdk/dotnet/Image.cs | 12 ++ sdk/dotnet/Inputs/DockerBuildArgs.cs | 2 - sdk/go/docker/image.go | 14 +++ sdk/go/docker/pulumiTypes.go | 14 --- .../main/java/com/pulumi/docker/Image.java | 28 +++++ .../pulumi/docker/inputs/DockerBuildArgs.java | 2 - sdk/nodejs/image.ts | 12 ++ sdk/nodejs/types/input.ts | 2 - sdk/python/pulumi_docker/_inputs.py | 4 - sdk/python/pulumi_docker/image.py | 20 +++ 32 files changed, 505 insertions(+), 137 deletions(-) create mode 100644 examples/dockerfile_test.go create mode 100644 examples/test-dockerfile/dockerfile-default-context/Dockerfile create mode 100644 examples/test-dockerfile/dockerfile-default-context/Pulumi.yaml create mode 100644 examples/test-dockerfile/dockerfile-default-context/app.txt create mode 100644 examples/test-dockerfile/dockerfile-default/Pulumi.yaml create mode 100644 examples/test-dockerfile/dockerfile-default/app/Dockerfile create mode 100644 examples/test-dockerfile/dockerfile-default/app/app.txt create mode 100644 examples/test-dockerfile/dockerfile-external/Dockerfile create mode 100644 examples/test-dockerfile/dockerfile-external/Pulumi.yaml create mode 100644 examples/test-dockerfile/dockerfile-external/app/app.txt create mode 100644 examples/test-dockerfile/dockerfile-in-context/Pulumi.yaml create mode 100644 examples/test-dockerfile/dockerfile-in-context/app/Dockerfile create mode 100644 examples/test-dockerfile/dockerfile-in-context/app/app.txt diff --git a/examples/docker-container-registry/ts/index.ts b/examples/docker-container-registry/ts/index.ts index 52ab1dc5..5be18374 100644 --- a/examples/docker-container-registry/ts/index.ts +++ b/examples/docker-container-registry/ts/index.ts @@ -17,7 +17,7 @@ const registryInfo = { // Build and publish the container image. const image = new docker.Image("my-image", { build: { - context: "app" + context: "app", }, imageName: imageName, registry: registryInfo, diff --git a/examples/dockerfile_test.go b/examples/dockerfile_test.go new file mode 100644 index 00000000..2773a2e4 --- /dev/null +++ b/examples/dockerfile_test.go @@ -0,0 +1,77 @@ +// Copyright 2016-2018, Pulumi Corporation. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//go:build go || all +// +build go all + +package examples + +import ( + "github.com/pulumi/pulumi/pkg/v3/testing/integration" + "github.com/stretchr/testify/assert" + "os" + "path" + "testing" +) + +func TestDockerfileDefaultYAML(t *testing.T) { + cwd, err := os.Getwd() + if !assert.NoError(t, err) { + t.FailNow() + } + + integration.ProgramTest(t, &integration.ProgramTestOptions{ + Dir: path.Join(cwd, "test-dockerfile", "dockerfile-default"), + Quick: true, + SkipRefresh: true, + }) +} + +func TestDockerfileDefaultContextYAML(t *testing.T) { + cwd, err := os.Getwd() + if !assert.NoError(t, err) { + t.FailNow() + } + + integration.ProgramTest(t, &integration.ProgramTestOptions{ + Dir: path.Join(cwd, "test-dockerfile", "dockerfile-default-context"), + Quick: true, + SkipRefresh: true, + }) +} + +func TestDockerfileExternalYAML(t *testing.T) { + cwd, err := os.Getwd() + if !assert.NoError(t, err) { + t.FailNow() + } + + integration.ProgramTest(t, &integration.ProgramTestOptions{ + Dir: path.Join(cwd, "test-dockerfile", "dockerfile-external"), + Quick: true, + SkipRefresh: true, + }) +} + +func TestDockerfileInContextYAML(t *testing.T) { + cwd, err := os.Getwd() + if !assert.NoError(t, err) { + t.FailNow() + } + + integration.ProgramTest(t, &integration.ProgramTestOptions{ + Dir: path.Join(cwd, "test-dockerfile", "dockerfile-in-context"), + Quick: true, + SkipRefresh: true, + }) +} diff --git a/examples/examples_nodejs_test.go b/examples/examples_nodejs_test.go index 95af174f..275e4578 100644 --- a/examples/examples_nodejs_test.go +++ b/examples/examples_nodejs_test.go @@ -107,7 +107,7 @@ func TestGcpContainerRegistry(t *testing.T) { integration.ProgramTest(t, &test) } -func TestDockerContainerRegistry(t *testing.T) { +func TestDockerContainerRegistryNode(t *testing.T) { username := "pulumibot" password := os.Getenv("DOCKER_HUB_PASSWORD") test := getJsOptions(t). diff --git a/examples/test-dockerfile/dockerfile-default-context/Dockerfile b/examples/test-dockerfile/dockerfile-default-context/Dockerfile new file mode 100644 index 00000000..de2d80e5 --- /dev/null +++ b/examples/test-dockerfile/dockerfile-default-context/Dockerfile @@ -0,0 +1,3 @@ +FROM scratch + +COPY . / diff --git a/examples/test-dockerfile/dockerfile-default-context/Pulumi.yaml b/examples/test-dockerfile/dockerfile-default-context/Pulumi.yaml new file mode 100644 index 00000000..08f3b17d --- /dev/null +++ b/examples/test-dockerfile/dockerfile-default-context/Pulumi.yaml @@ -0,0 +1,13 @@ +name: dockerfile-default-context +runtime: yaml +resources: + demo-image: + type: docker:Image + properties: + imageName: pulumibot/test-image:tag + skipPush: true + options: + version: v4.0.0 +outputs: + imageName: ${demo-image.imageName} + out-dockerfile: ${demo-image.dockerfile} diff --git a/examples/test-dockerfile/dockerfile-default-context/app.txt b/examples/test-dockerfile/dockerfile-default-context/app.txt new file mode 100644 index 00000000..5adb594f --- /dev/null +++ b/examples/test-dockerfile/dockerfile-default-context/app.txt @@ -0,0 +1 @@ +Hi! I am a test file! diff --git a/examples/test-dockerfile/dockerfile-default/Pulumi.yaml b/examples/test-dockerfile/dockerfile-default/Pulumi.yaml new file mode 100644 index 00000000..7a66a7b2 --- /dev/null +++ b/examples/test-dockerfile/dockerfile-default/Pulumi.yaml @@ -0,0 +1,15 @@ +name: dockerfile-default +runtime: yaml +resources: + demo-image: + type: docker:Image + properties: + imageName: pulumibot/test-image:tag2 + skipPush: true + build: + context: ./app + options: + version: v4.0.0 +outputs: + imageName: ${demo-image.imageName} + out-dockerfile: ${demo-image.dockerfile} diff --git a/examples/test-dockerfile/dockerfile-default/app/Dockerfile b/examples/test-dockerfile/dockerfile-default/app/Dockerfile new file mode 100644 index 00000000..de2d80e5 --- /dev/null +++ b/examples/test-dockerfile/dockerfile-default/app/Dockerfile @@ -0,0 +1,3 @@ +FROM scratch + +COPY . / diff --git a/examples/test-dockerfile/dockerfile-default/app/app.txt b/examples/test-dockerfile/dockerfile-default/app/app.txt new file mode 100644 index 00000000..5adb594f --- /dev/null +++ b/examples/test-dockerfile/dockerfile-default/app/app.txt @@ -0,0 +1 @@ +Hi! I am a test file! diff --git a/examples/test-dockerfile/dockerfile-external/Dockerfile b/examples/test-dockerfile/dockerfile-external/Dockerfile new file mode 100644 index 00000000..27ab0197 --- /dev/null +++ b/examples/test-dockerfile/dockerfile-external/Dockerfile @@ -0,0 +1,3 @@ +FROM scratch + +COPY .. / diff --git a/examples/test-dockerfile/dockerfile-external/Pulumi.yaml b/examples/test-dockerfile/dockerfile-external/Pulumi.yaml new file mode 100644 index 00000000..f2da5706 --- /dev/null +++ b/examples/test-dockerfile/dockerfile-external/Pulumi.yaml @@ -0,0 +1,16 @@ +name: dockerfile-external +runtime: yaml +resources: + demo-image: + type: docker:Image + properties: + imageName: pulumibot/test-image:tag3 + skipPush: true + build: + context: ./app + dockerfile: ./Dockerfile + options: + version: v4.0.0 +outputs: + imageName: ${demo-image.imageName} + out-dockerfile: ${demo-image.dockerfile} diff --git a/examples/test-dockerfile/dockerfile-external/app/app.txt b/examples/test-dockerfile/dockerfile-external/app/app.txt new file mode 100644 index 00000000..5adb594f --- /dev/null +++ b/examples/test-dockerfile/dockerfile-external/app/app.txt @@ -0,0 +1 @@ +Hi! I am a test file! diff --git a/examples/test-dockerfile/dockerfile-in-context/Pulumi.yaml b/examples/test-dockerfile/dockerfile-in-context/Pulumi.yaml new file mode 100644 index 00000000..18830cb3 --- /dev/null +++ b/examples/test-dockerfile/dockerfile-in-context/Pulumi.yaml @@ -0,0 +1,15 @@ +name: dockerfile-in-context +runtime: yaml +resources: + demo-image: + type: docker:Image + properties: + imageName: pulumibot/test-image:tag1 + skipPush: true + build: + context: ./app + dockerfile: ./app/Dockerfile + options: + version: v4.0.0 +outputs: + imageName: ${demo-image.imageName} diff --git a/examples/test-dockerfile/dockerfile-in-context/app/Dockerfile b/examples/test-dockerfile/dockerfile-in-context/app/Dockerfile new file mode 100644 index 00000000..de2d80e5 --- /dev/null +++ b/examples/test-dockerfile/dockerfile-in-context/app/Dockerfile @@ -0,0 +1,3 @@ +FROM scratch + +COPY . / diff --git a/examples/test-dockerfile/dockerfile-in-context/app/app.txt b/examples/test-dockerfile/dockerfile-in-context/app/app.txt new file mode 100644 index 00000000..5adb594f --- /dev/null +++ b/examples/test-dockerfile/dockerfile-in-context/app/app.txt @@ -0,0 +1 @@ +Hi! I am a test file! diff --git a/provider/cmd/pulumi-resource-docker/schema.json b/provider/cmd/pulumi-resource-docker/schema.json index 2872e505..70185ec3 100644 --- a/provider/cmd/pulumi-resource-docker/schema.json +++ b/provider/cmd/pulumi-resource-docker/schema.json @@ -3065,13 +3065,11 @@ }, "context": { "type": "string", - "description": "The path to the build context to use.", - "default": "." + "description": "The path to the build context to use." }, "dockerfile": { "type": "string", - "description": "The path to the Dockerfile to use.", - "default": "Dockerfile" + "description": "The path to the Dockerfile to use." }, "platform": { "type": "string", @@ -4422,6 +4420,14 @@ "type": "string", "description": "The fully qualified image name that was pushed to the registry." }, + "context": { + "type": "string", + "description": "The path to the build context to use." + }, + "dockerfile": { + "type": "string", + "description": "The location of the Dockerfile relative to the docker build context." + }, "imageName": { "type": "string", "description": "The fully qualified image name" diff --git a/provider/go.mod b/provider/go.mod index 1e31cf8e..b8730d3f 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -7,7 +7,7 @@ require ( github.com/docker/distribution v2.8.1+incompatible github.com/docker/docker v23.0.1+incompatible github.com/golang/protobuf v1.5.2 - github.com/moby/buildkit v0.11.3 + github.com/moby/buildkit v0.11.4 github.com/moby/moby v23.0.1+incompatible github.com/moby/patternmatcher v0.5.0 github.com/pkg/errors v0.9.1 @@ -29,14 +29,14 @@ replace ( ) require ( - cloud.google.com/go v0.107.0 // indirect - cloud.google.com/go/compute v1.15.1 // indirect + cloud.google.com/go v0.110.0 // indirect + cloud.google.com/go/compute v1.18.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.8.0 // indirect - cloud.google.com/go/kms v1.7.0 // indirect - cloud.google.com/go/logging v1.6.1 // indirect - cloud.google.com/go/longrunning v0.3.0 // indirect - cloud.google.com/go/storage v1.28.0 // indirect + cloud.google.com/go/iam v0.12.0 // indirect + cloud.google.com/go/kms v1.9.0 // indirect + cloud.google.com/go/logging v1.7.0 // indirect + cloud.google.com/go/longrunning v0.4.1 // indirect + cloud.google.com/go/storage v1.28.1 // indirect github.com/AlecAivazis/survey/v2 v2.0.5 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.2.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 // indirect @@ -90,9 +90,10 @@ require ( github.com/cheggaaa/pb v1.0.29 // indirect github.com/cloudflare/circl v1.1.0 // indirect github.com/containerd/console v1.0.3 // indirect - github.com/containerd/containerd v1.6.16 // indirect + github.com/containerd/containerd v1.7.0 // indirect github.com/containerd/continuity v0.3.1-0.20230206214859-2a963a2f56e8 // indirect github.com/containerd/typeurl v1.0.2 // indirect + github.com/containerd/typeurl/v2 v2.1.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/djherbis/times v1.5.0 // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect @@ -123,7 +124,7 @@ require ( github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.3.0 // indirect github.com/google/wire v0.5.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.7.0 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect @@ -173,11 +174,11 @@ require ( github.com/json-iterator/go v1.1.12 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.15.12 // indirect + github.com/klauspost/compress v1.16.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.16 // indirect - github.com/mattn/go-runewidth v0.0.13 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/mitchellh/cli v1.1.5 // indirect @@ -192,7 +193,7 @@ require ( github.com/moby/sys/sequential v0.5.0 // indirect github.com/moby/sys/signal v0.7.0 // indirect github.com/moby/sys/symlink v0.2.0 // indirect - github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect + github.com/moby/term v0.0.0-20221205130635-1aeaba878587 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/morikuni/aec v1.0.0 // indirect @@ -200,8 +201,8 @@ require ( github.com/natefinch/atomic v1.0.1 // indirect github.com/oklog/run v1.1.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.0.3-0.20220303224323-02efb9a75ee1 // indirect - github.com/opencontainers/runc v1.1.3 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b // indirect + github.com/opencontainers/runc v1.1.4 // indirect github.com/opentracing/basictracer-go v1.1.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 // indirect @@ -247,16 +248,17 @@ require ( github.com/vmihailenco/msgpack/v4 v4.3.12 // indirect github.com/vmihailenco/tagparser v0.1.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/zclconf/go-cty v1.12.1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0 // indirect - go.opentelemetry.io/otel v1.11.1 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1 // indirect - go.opentelemetry.io/otel/sdk v1.11.1 // indirect - go.opentelemetry.io/otel/trace v1.11.1 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.40.0 // indirect + go.opentelemetry.io/otel v1.14.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0 // indirect + go.opentelemetry.io/otel/metric v0.37.0 // indirect + go.opentelemetry.io/otel/sdk v1.14.0 // indirect + go.opentelemetry.io/otel/trace v1.14.0 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect gocloud.dev v0.28.0 // indirect @@ -264,20 +266,19 @@ require ( golang.org/x/crypto v0.6.0 // indirect golang.org/x/mod v0.9.0 // indirect golang.org/x/net v0.7.0 // indirect - golang.org/x/oauth2 v0.4.0 // indirect + golang.org/x/oauth2 v0.5.0 // indirect golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.6.0 // indirect - golang.org/x/term v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect + golang.org/x/term v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect golang.org/x/time v0.2.0 // indirect golang.org/x/tools v0.6.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.106.0 // indirect + google.golang.org/api v0.110.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect + google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect - gotest.tools/v3 v3.4.0 // indirect lukechampine.com/frand v1.4.2 // indirect sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600 // indirect ) diff --git a/provider/go.sum b/provider/go.sum index df1fabf1..cbe18d73 100644 --- a/provider/go.sum +++ b/provider/go.sum @@ -34,8 +34,9 @@ cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+ cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0 h1:qkj22L7bgkl6vIeZDlOY2po43Mx/TIa2Wsa7VR+PEww= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= @@ -113,8 +114,8 @@ cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.15.1 h1:7UGq3QknM33pw5xATlpzeoomNxsacIVvTqTTvbfajmE= -cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= @@ -204,8 +205,9 @@ cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= -cloud.google.com/go/iam v0.8.0 h1:E2osAkZzxI/+8pZcxVLcDtAQx/u+hZXVryUaYQ5O0Kk= cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= @@ -215,19 +217,22 @@ cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0 cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -cloud.google.com/go/kms v1.7.0 h1:8FCf8C7qfOuSr6YzOQ4RGjJvswSRFeOpur3nHOlJbio= cloud.google.com/go/kms v1.7.0/go.mod h1:k2UdVoNIHLJi/Rnng6dN0vlq7lS3jHSDiZasft+gmYE= +cloud.google.com/go/kms v1.9.0 h1:b0votJQa/9DSsxgHwN33/tTLA7ZHVzfWhDCrfiXijSo= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/logging v1.6.1 h1:ZBsZK+JG+oCDT+vaxwqF2egKNRjz8soXiS6Xv79benI= cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0 h1:CJYxlNNNNAMkHp9em/YEXcfJg+rPDg7YfwoRpMU+t5I= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= -cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= @@ -391,6 +396,8 @@ contrib.go.opencensus.io/exporter/stackdriver v0.13.14/go.mod h1:5pSSGY0Bhuk7waT contrib.go.opencensus.io/integrations/ocsql v0.1.7/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= +github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20221215162035-5330a85ea652 h1:+vTEFqeoeur6XSq06bs+roX3YiT49gUniJK7Zky7Xjg= github.com/AlecAivazis/survey/v2 v2.0.5 h1:xpZp+Q55wi5C7Iaze+40onHnEkex1jSc34CltJjOoPM= github.com/AlecAivazis/survey/v2 v2.0.5/go.mod h1:WYBhg6f0y/fNYUuesWQc0PKbJcEliGcYHB9sNT3Bg74= github.com/Azure/azure-amqp-common-go/v3 v3.2.3/go.mod h1:7rPmbSfszeovxGfc5fSAXE4ehlXQZHpMja2OtxC2Tas= @@ -489,7 +496,7 @@ github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwT github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim v0.9.6 h1:VwnDOgLeoi2du6dAznfmspNqTiwczvjv4K7NxuY9jsY= +github.com/Microsoft/hcsshim v0.10.0-rc.7 h1:HBytQPxcv8Oy4244zbQbe6hnOnx544eL5QPUqhJldz8= github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= @@ -720,7 +727,7 @@ github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4S github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= -github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= +github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= @@ -745,8 +752,8 @@ github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTV github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= -github.com/containerd/containerd v1.6.16 h1:0H5xH6ABsN7XTrxIAKxFpBkFCBtrZ/OSORhCpUnHjrc= -github.com/containerd/containerd v1.6.16/go.mod h1:1RdCUu95+gc2v9t3IL+zIlpClSmew7/0YS8O5eQZrOw= +github.com/containerd/containerd v1.7.0 h1:G/ZQr3gMZs6ZT0qPUZ15znx5QSdQdASW11nXTLTM2Pg= +github.com/containerd/containerd v1.7.0/go.mod h1:QfR7Efgb/6X2BDpTPJRvPTYDE9rsF0FsXX9J8sIs/sc= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= @@ -762,8 +769,8 @@ github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU= github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY= github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= @@ -790,13 +797,15 @@ github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDG github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= +github.com/containerd/ttrpc v1.2.1 h1:VWv/Rzx023TBLv4WQ+9WPXlBG/s3rsRjY3i9AJ2BJdE= github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/typeurl/v2 v2.1.0 h1:yNAhJvbNEANt7ck48IlEGOxP7YAp6LLpGn5jZACDNIE= +github.com/containerd/typeurl/v2 v2.1.0/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0= github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= @@ -839,8 +848,9 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= @@ -1227,8 +1237,9 @@ github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1 github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1 h1:RY7tHKZcRlk788d5WSo/e83gOyyy742E8GSs771ySpg= github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -1553,8 +1564,8 @@ github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdY github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= -github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4= +github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/kolo/xmlrpc v0.0.0-20201022064351-38db28db192b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM= github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -1627,8 +1638,8 @@ github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peK github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= @@ -1687,8 +1698,8 @@ github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= -github.com/moby/buildkit v0.11.3 h1:bnQFPHkNJTELRb2n3HISPGvB1FWzFx+YD1MTZg8bsfk= -github.com/moby/buildkit v0.11.3/go.mod h1:P8MqGq7YrIDldCdZLhK8M/vPcrFYZ6GX1crX0j4hOmQ= +github.com/moby/buildkit v0.11.4 h1:mleVHr+n7HUD65QNUkgkT3d8muTzhYUoHE9FM3Ej05s= +github.com/moby/buildkit v0.11.4/go.mod h1:P5Qi041LvCfhkfYBHry+Rwoo3Wi6H971J2ggE+PcIoo= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/moby v23.0.1+incompatible h1:h9fbV+v0Ye04IenS/aQfJ2SM3J6NR4h+QoBlOuLOVHk= @@ -1710,8 +1721,9 @@ github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZ github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1793,8 +1805,8 @@ github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.3-0.20220303224323-02efb9a75ee1 h1:9iFHD5Kt9hkOfeawBNiEeEaV7bmC4/Z5wJp8E9BptMs= -github.com/opencontainers/image-spec v1.0.3-0.20220303224323-02efb9a75ee1/go.mod h1:K/JAU0m27RFhDRX4PcFdIKntROP6y5Ed6O91aZYDQfs= +github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8= +github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= @@ -1802,21 +1814,21 @@ github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rm github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/runc v1.1.4 h1:nRCz/8sKg6K6jgYAFLDlXzPeITBZJyX28DBVhWD+5dg= +github.com/opencontainers/runc v1.1.4/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.1.0-rc.1 h1:wHa9jroFfKGQqFHj0I1fMRKLl0pfj+ynAqBxo3v6u9w= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= -github.com/opencontainers/selinux v1.10.2 h1:NFy2xCsjn7+WspbfZkUd5zyVeisV7VFbPSP96+8/ha4= +github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= @@ -1969,7 +1981,6 @@ github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -2149,8 +2160,9 @@ github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+ github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= @@ -2216,26 +2228,27 @@ go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0 h1:n9b7AAdbQtQ0k9dm0Dm2/KUcUqtG8i2O15KzNaDze8c= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0/go.mod h1:LsankqVDx4W+RhZNA5uWarULII/MBhF5qwCYxTuyXjs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.40.0 h1:5jD3teb4Qh7mx/nfzq4jO2WFFpvXD0vYWFDrdvNWmXk= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.40.0/go.mod h1:UMklln0+MRhZC4e3PwmN3pCtq4DyIadWw4yikh6bNrw= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.31.0/go.mod h1:PFmBsWbldL1kiWZk9+0LBZz2brhByaGsvp6pRICMlPE= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4/go.mod h1:l2MdsbKTocpPS5nQZscqTR9jd8u96VYZdcpF8Sye7mA= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= -go.opentelemetry.io/otel v1.4.0/go.mod h1:jeAqMFKy2uLIxCtKxoFj0FAL5zAPKQagc3+GtBWakzk= go.opentelemetry.io/otel v1.6.0/go.mod h1:bfJD2DZVw0LBxghOTlgnlI0CV3hLDu9XF/QKOUXMTQQ= go.opentelemetry.io/otel v1.6.1/go.mod h1:blzUabWHkX6LJewxvadmzafgh/wnvBSDBdOuwkAtrWQ= -go.opentelemetry.io/otel v1.11.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4= go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= +go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM= +go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.6.1/go.mod h1:NEu79Xo32iVb+0gVNV8PMd7GoWqnyDXRlj04yFjqz40= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1/go.mod h1:i8vjiSzbiUC7wOQplijSXMYUpNM93DtlS5CbUT+C6oQ= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.6.1/go.mod h1:YJ/JbY5ag/tSQFXzH3mtDmHqzF3aFn3DI/aB1n7pt4w= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1 h1:MEQNafcNCB0uQIti/oHgU7CZpUMYQ7qigBwMVKycHvc= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1/go.mod h1:19O5I2U5iys38SsmT2uDJja/300woyzE1KPIQxEUBUc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0 h1:TKf2uAs2ueguzLaxOCBXNpHxfO/aC7PAdDsSH0IbeRQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0/go.mod h1:HrbCVv40OOLTABmOn1ZWty6CHXkU8DK/Urc43tHug70= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.6.1/go.mod h1:UJJXJj0rltNIemDMwkOJyggsvyMG9QHfJeFH0HS5JjM= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.1/go.mod h1:QrRRQiY3kzAoYPNLP0W/Ikg0gR6V3LMc+ODSxr7yyvg= @@ -2245,21 +2258,24 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.1/go.mod h go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= go.opentelemetry.io/otel/metric v0.28.0/go.mod h1:TrzsfQAmQaB1PDcdhBauLMk7nyyg9hm+GoQq/ekE9Iw= go.opentelemetry.io/otel/metric v0.33.0/go.mod h1:QlTYc+EnYNq/M2mNk1qDDMRLpqCOj2f/r5c7Fd5FYaI= +go.opentelemetry.io/otel/metric v0.37.0 h1:pHDQuLQOZwYD+Km0eb657A25NaRzy0a+eLyKfDXedEs= +go.opentelemetry.io/otel/metric v0.37.0/go.mod h1:DmdaHfGt54iV6UKxsV9slj2bBRJcKC1B1uvDLIioc1s= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= go.opentelemetry.io/otel/sdk v1.6.1/go.mod h1:IVYrddmFZ+eJqu2k38qD3WezFR2pymCzm8tdxyh3R4E= -go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs= go.opentelemetry.io/otel/sdk v1.11.1/go.mod h1:/l3FE4SupHJ12TduVjUkZtlfFqDCQJlOlithYrdktys= +go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY= +go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= -go.opentelemetry.io/otel/trace v1.4.0/go.mod h1:uc3eRsqDfWs9R7b92xbQbU42/eTNz4N+gLP8qJCi4aE= go.opentelemetry.io/otel/trace v1.6.0/go.mod h1:qs7BrU5cZ8dXQHBGxHMOxwME/27YH2qEp4/+tZLLwJE= go.opentelemetry.io/otel/trace v1.6.1/go.mod h1:RkFRM1m0puWIq10oxImnGEduNBzxiN7TXluRBtE+5j0= -go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ= go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= +go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M= +go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= go.opentelemetry.io/proto/otlp v0.12.1/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= @@ -2498,8 +2514,8 @@ golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/oauth2 v0.2.0/go.mod h1:Cwn6afJ8jrQwYMxQDTpISoXmXW9I6qF6vDeuuoX3Ibs= -golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -2682,8 +2698,8 @@ golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2697,8 +2713,8 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2849,8 +2865,9 @@ google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91 google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -google.golang.org/api v0.106.0 h1:ffmW0faWCwKkpbbtvlY/K/8fUl+JKvNS5CVzRoyfCv8= google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -2980,8 +2997,9 @@ google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZV google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -3098,11 +3116,11 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/provider/image.go b/provider/image.go index 360d6a1e..628762ac 100644 --- a/provider/image.go +++ b/provider/image.go @@ -6,30 +6,31 @@ import ( "encoding/base64" "encoding/json" "fmt" - "net" - "path/filepath" - - "github.com/docker/distribution/reference" - "github.com/docker/docker/pkg/idtools" - "github.com/moby/buildkit/session" - "github.com/moby/buildkit/session/auth/authprovider" - "github.com/moby/moby/registry" - + buildCmd "github.com/docker/cli/cli/command/image/build" clibuild "github.com/docker/cli/cli/command/image/build" "github.com/docker/cli/cli/config" "github.com/docker/cli/cli/config/configfile" "github.com/docker/cli/cli/config/credentials" clitypes "github.com/docker/cli/cli/config/types" + "github.com/docker/distribution/reference" "github.com/docker/docker/api/types" "github.com/docker/docker/client" "github.com/docker/docker/pkg/archive" + "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/jsonmessage" structpb "github.com/golang/protobuf/ptypes/struct" controlapi "github.com/moby/buildkit/api/services/control" + "github.com/moby/buildkit/session" + "github.com/moby/buildkit/session/auth/authprovider" + "github.com/moby/moby/registry" "github.com/pulumi/pulumi/sdk/v3/go/common/resource" "github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin" - - buildCmd "github.com/docker/cli/cli/command/image/build" + "io" + "net" + "os" + "path" + "path/filepath" + "strings" ) const defaultDockerfile = "Dockerfile" @@ -107,6 +108,26 @@ func (p *dockerNativeProvider) dockerBuild(ctx context.Context, return "", nil, fmt.Errorf("error reading ignore file: %w", err) } + absDockerfile, err := filepath.Abs(build.Dockerfile) + if err != nil { + return "", nil, fmt.Errorf("absDockerfile error: %s", err) + } + absBuildpath, err := filepath.Abs(build.Context) + if err != nil { + return "", nil, fmt.Errorf("absBuildPath error: %s", err) + } + relDockerfile, err := filepath.Rel(absBuildpath, absDockerfile) + if err != nil { + return "", nil, fmt.Errorf("relDockerfile error: %s", err) + } + + // if the dockerfile is in the context it will be something like "./Dockerfile" or ".\sub\dir\Dockerfile" + // if the dockerfile is out of the context it will begin with "../" + dockerfileInContext := true + if strings.HasPrefix(relDockerfile, ".."+string(filepath.Separator)) { + dockerfileInContext = false + } + contextDir, err := clibuild.ResolveAndValidateContextPath(build.Context) if err != nil { return "", nil, fmt.Errorf("error resolving context: %w", err) @@ -119,7 +140,7 @@ func (p *dockerNativeProvider) dockerBuild(ctx context.Context, // un-ignore build files so the docker daemon can use them ignorePatterns := buildCmd.TrimBuildFilesFromExcludes( initialIgnorePatterns, - img.Build.Dockerfile, + relDockerfile, false, ) @@ -134,10 +155,6 @@ func (p *dockerNativeProvider) dockerBuild(ctx context.Context, } } - if err != nil { - return "", nil, err - } - tar, err := archive.TarWithOptions(contextDir, &archive.TarOptions{ ExcludePatterns: ignorePatterns, ChownOpts: &idtools.Identity{UID: 0, GID: 0}, @@ -146,6 +163,21 @@ func (p *dockerNativeProvider) dockerBuild(ctx context.Context, return "", nil, err } + // add dockerfile to tarball if it's not in the build context + replaceDockerfile := relDockerfile + if !dockerfileInContext { + // Handle Dockerfile from outside of build context folder + var dockerfileCtx io.ReadCloser + dockerfileCtx, err = os.Open(build.Dockerfile) + if err != nil { + return "", nil, err + } + tar, replaceDockerfile, err = clibuild.AddDockerfileToBuildContext(dockerfileCtx, tar) + if err != nil { + return "", nil, err + } + } + cfg, err := getDefaultDockerConfig() if err != nil { return "", nil, err @@ -182,7 +214,7 @@ func (p *dockerNativeProvider) dockerBuild(ctx context.Context, } // make the build options opts := types.ImageBuildOptions{ - Dockerfile: img.Build.Dockerfile, + Dockerfile: replaceDockerfile, Tags: []string{img.Name}, //this should build the image locally, sans registry info CacheFrom: img.Build.CachedImages, BuildArgs: build.Args, @@ -237,9 +269,10 @@ func (p *dockerNativeProvider) dockerBuild(ctx context.Context, // if we are not pushing to the registry, we return after building the local image. if img.SkipPush { outputs := map[string]interface{}{ - "dockerfile": img.Build.Dockerfile, + "dockerfile": relDockerfile, "context": img.Build.Context, "registryServer": img.Registry.Server, + "imageName": img.Name, } pbstruct, err := plugin.MarshalProperties( @@ -287,10 +320,11 @@ func (p *dockerNativeProvider) dockerBuild(ctx context.Context, } outputs := map[string]interface{}{ - "dockerfile": img.Build.Dockerfile, + "dockerfile": relDockerfile, "context": img.Build.Context, "baseImageName": img.Name, "registryServer": img.Registry.Server, + "imageName": img.Name, } pbstruct, err := plugin.MarshalProperties( resource.NewPropertyMapFromMap(outputs), @@ -305,19 +339,13 @@ func marshalBuildAndApplyDefaults(b resource.PropertyValue) (Build, error) { var build Build if b.IsNull() { // use the default build context - build.Dockerfile = defaultDockerfile build.Context = "." + build.Dockerfile = defaultDockerfile return build, nil } // read in the build type fields buildObject := b.ObjectValue() - // Dockerfile - if buildObject["dockerfile"].IsNull() { - // set default - build.Dockerfile = defaultDockerfile - } else { - build.Dockerfile = buildObject["dockerfile"].StringValue() - } + // Context if buildObject["context"].IsNull() { // set default @@ -326,6 +354,13 @@ func marshalBuildAndApplyDefaults(b resource.PropertyValue) (Build, error) { build.Context = buildObject["context"].StringValue() } + // Dockerfile + if buildObject["dockerfile"].IsNull() { + // set default + build.Dockerfile = path.Join(build.Context, defaultDockerfile) + } else { + build.Dockerfile = buildObject["dockerfile"].StringValue() + } // BuildKit version, err := marshalBuilder(buildObject["builderVersion"]) diff --git a/provider/provider.go b/provider/provider.go index 245d62a3..3be5dd4f 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -118,10 +118,45 @@ func (p *dockerNativeProvider) Check(ctx context.Context, req *rpc.CheckRequest) return nil, err } - dockerContext := build.Context - dockerfile := build.Dockerfile + // Verify Dockerfile at given location + if _, statErr := os.Stat(build.Dockerfile); statErr != nil { + if filepath.IsAbs(build.Dockerfile) { + return nil, fmt.Errorf("could not open dockerfile at absolute path %s: %v", build.Dockerfile, statErr) + } + relPath := filepath.Join(build.Context, build.Dockerfile) + _, err = os.Stat(relPath) + + // In the case of a pulumi project that looks as follows: + // infra/ + // app/ + // # some content for the Docker build + // Dockerfile + // Pulumi.yaml + // + // + // the user inputs: + // context: "./app" + // dockerfile: "./Dockerfile" # this is in error because it is in "./app/Dockerfile" + // + // we want an error message that tells the user: try "./app/Dockerfile" + if err != nil { + // no clue case + return nil, fmt.Errorf("could not open dockerfile at relative path %s: %v", build.Dockerfile, statErr) + } + + // we could open the relative path + return nil, fmt.Errorf("could not open dockerfile at relative path %s. "+ + "Try setting `dockerfile` to %q", build.Dockerfile, relPath) + + } + // Get the relative path to Dockerfile from docker context + relDockerfile, err := getRelDockerfilePath(build.Context, build.Dockerfile) + if err != nil { + return nil, err + } + // Hash docker build context digest - contextDigest, err := hashContext(dockerContext, dockerfile) + contextDigest, err := hashContext(build.Context, relDockerfile) if err != nil { return nil, err } @@ -556,3 +591,24 @@ func getIgnore(dockerIgnorePath string) ([]string, error) { } return ignorePatterns, nil } + +func getRelDockerfilePath(buildContext, dockerfile string) (string, error) { + // if the Pulumi program specifies an absolute path or a path relative to the program's local directory, + // we need to get the Dockerfile's relative path to the context directory for the hash function + if strings.Contains(dockerfile, string(filepath.Separator)) { + absDockerfile, err := filepath.Abs(dockerfile) + if err != nil { + return "", fmt.Errorf("absDockerfile error: %s", err) + } + absBuildpath, err := filepath.Abs(buildContext) + if err != nil { + return "", fmt.Errorf("absBuildPath error: %s", err) + } + dockerfile, err = filepath.Rel(absBuildpath, absDockerfile) + if err != nil { + return "", fmt.Errorf("relDockerfile error: %s", err) + } + + } + return dockerfile, nil +} diff --git a/provider/provider_test.go b/provider/provider_test.go index dcf7324b..0bcd4e6a 100644 --- a/provider/provider_test.go +++ b/provider/provider_test.go @@ -142,4 +142,36 @@ func TestHashFilemodeMatters(t *testing.T) { func TestHashDeepSymlinks(t *testing.T) { _, err := hashContext("./testdata/symlinks", "./Dockerfile") assert.NoError(t, err) + +} + +func TestGetRelDockerfilePath(t *testing.T) { + + t.Run("A Dockerfile name with no separators is relative to the build context", func(t *testing.T) { + expected := "Dockerfile" + input1, input2 := ".", "Dockerfile" + + actual, err := getRelDockerfilePath(input1, input2) + assert.NoError(t, err) + assert.Equal(t, expected, actual) + }) + + t.Run("A Dockerfile name with separators will return its relative position to the build context", func(t *testing.T) { + expected := "../Dockerfile" + input1, input2 := "./special-context", "./Dockerfile" + + actual, err := getRelDockerfilePath(input1, input2) + assert.NoError(t, err) + assert.Equal(t, expected, actual) + }) + + t.Run("A Dockerfile name with multiple separators will return its relative position to the build context", + func(t *testing.T) { + expected := "../other-folder/Dockerfile" + input1, input2 := "./special-context", "./other-folder/Dockerfile" + + actual, err := getRelDockerfilePath(input1, input2) + assert.NoError(t, err) + assert.Equal(t, expected, actual) + }) } diff --git a/provider/resources.go b/provider/resources.go index afd27edc..2e0a200d 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -150,12 +150,10 @@ func Provider() tfbridge.ProviderInfo { "context": { Description: "The path to the build context to use.", TypeSpec: schema.TypeSpec{Type: "string"}, - Default: ".", }, "dockerfile": { Description: "The path to the Dockerfile to use.", TypeSpec: schema.TypeSpec{Type: "string"}, - Default: "Dockerfile", }, "cacheFrom": { Description: "A list of image names to use as build cache. " + @@ -247,6 +245,14 @@ func Provider() tfbridge.ProviderInfo { Description: "The fully qualified image name that was pushed to the registry.", TypeSpec: schema.TypeSpec{Type: "string"}, }, + "dockerfile": { + Description: "The location of the Dockerfile relative to the docker build context.", + TypeSpec: schema.TypeSpec{Type: "string"}, + }, + "context": { + Description: "The path to the build context to use.", + TypeSpec: schema.TypeSpec{Type: "string"}, + }, }, }, IsComponent: false, diff --git a/sdk/dotnet/Image.cs b/sdk/dotnet/Image.cs index 171c8712..e545f1a7 100644 --- a/sdk/dotnet/Image.cs +++ b/sdk/dotnet/Image.cs @@ -49,6 +49,18 @@ public partial class Image : global::Pulumi.CustomResource [Output("baseImageName")] public Output BaseImageName { get; private set; } = null!; + /// + /// The path to the build context to use. + /// + [Output("context")] + public Output Context { get; private set; } = null!; + + /// + /// The location of the Dockerfile relative to the docker build context. + /// + [Output("dockerfile")] + public Output Dockerfile { get; private set; } = null!; + /// /// The fully qualified image name /// diff --git a/sdk/dotnet/Inputs/DockerBuildArgs.cs b/sdk/dotnet/Inputs/DockerBuildArgs.cs index 3ea92321..eb4b07a0 100644 --- a/sdk/dotnet/Inputs/DockerBuildArgs.cs +++ b/sdk/dotnet/Inputs/DockerBuildArgs.cs @@ -66,8 +66,6 @@ public InputMap Args public DockerBuildArgs() { BuilderVersion = Pulumi.Docker.BuilderVersion.BuilderBuildKit; - Context = "."; - Dockerfile = "Dockerfile"; } public static new DockerBuildArgs Empty => new DockerBuildArgs(); } diff --git a/sdk/go/docker/image.go b/sdk/go/docker/image.go index 60d5aef8..687b71ea 100644 --- a/sdk/go/docker/image.go +++ b/sdk/go/docker/image.go @@ -49,6 +49,10 @@ type Image struct { // The fully qualified image name that was pushed to the registry. BaseImageName pulumi.StringPtrOutput `pulumi:"baseImageName"` + // The path to the build context to use. + Context pulumi.StringPtrOutput `pulumi:"context"` + // The location of the Dockerfile relative to the docker build context. + Dockerfile pulumi.StringPtrOutput `pulumi:"dockerfile"` // The fully qualified image name ImageName pulumi.StringPtrOutput `pulumi:"imageName"` // The name of the registry server hosting the image. @@ -223,6 +227,16 @@ func (o ImageOutput) BaseImageName() pulumi.StringPtrOutput { return o.ApplyT(func(v *Image) pulumi.StringPtrOutput { return v.BaseImageName }).(pulumi.StringPtrOutput) } +// The path to the build context to use. +func (o ImageOutput) Context() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Image) pulumi.StringPtrOutput { return v.Context }).(pulumi.StringPtrOutput) +} + +// The location of the Dockerfile relative to the docker build context. +func (o ImageOutput) Dockerfile() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Image) pulumi.StringPtrOutput { return v.Dockerfile }).(pulumi.StringPtrOutput) +} + // The fully qualified image name func (o ImageOutput) ImageName() pulumi.StringPtrOutput { return o.ApplyT(func(v *Image) pulumi.StringPtrOutput { return v.ImageName }).(pulumi.StringPtrOutput) diff --git a/sdk/go/docker/pulumiTypes.go b/sdk/go/docker/pulumiTypes.go index 0fea90d2..8e56436f 100644 --- a/sdk/go/docker/pulumiTypes.go +++ b/sdk/go/docker/pulumiTypes.go @@ -9702,14 +9702,6 @@ func (val *DockerBuild) Defaults() *DockerBuild { builderVersion_ := BuilderVersion("BuilderBuildKit") tmp.BuilderVersion = &builderVersion_ } - if tmp.Context == nil { - context_ := "." - tmp.Context = &context_ - } - if tmp.Dockerfile == nil { - dockerfile_ := "Dockerfile" - tmp.Dockerfile = &dockerfile_ - } return &tmp } @@ -9751,12 +9743,6 @@ func (val *DockerBuildArgs) Defaults() *DockerBuildArgs { if tmp.BuilderVersion == nil { tmp.BuilderVersion = BuilderVersion("BuilderBuildKit") } - if tmp.Context == nil { - tmp.Context = pulumi.StringPtr(".") - } - if tmp.Dockerfile == nil { - tmp.Dockerfile = pulumi.StringPtr("Dockerfile") - } return &tmp } func (DockerBuildArgs) ElementType() reflect.Type { diff --git a/sdk/java/src/main/java/com/pulumi/docker/Image.java b/sdk/java/src/main/java/com/pulumi/docker/Image.java index ac3e30db..878bbc5b 100644 --- a/sdk/java/src/main/java/com/pulumi/docker/Image.java +++ b/sdk/java/src/main/java/com/pulumi/docker/Image.java @@ -73,6 +73,34 @@ public class Image extends com.pulumi.resources.CustomResource { public Output> baseImageName() { return Codegen.optional(this.baseImageName); } + /** + * The path to the build context to use. + * + */ + @Export(name="context", type=String.class, parameters={}) + private Output context; + + /** + * @return The path to the build context to use. + * + */ + public Output> context() { + return Codegen.optional(this.context); + } + /** + * The location of the Dockerfile relative to the docker build context. + * + */ + @Export(name="dockerfile", type=String.class, parameters={}) + private Output dockerfile; + + /** + * @return The location of the Dockerfile relative to the docker build context. + * + */ + public Output> dockerfile() { + return Codegen.optional(this.dockerfile); + } /** * The fully qualified image name * diff --git a/sdk/java/src/main/java/com/pulumi/docker/inputs/DockerBuildArgs.java b/sdk/java/src/main/java/com/pulumi/docker/inputs/DockerBuildArgs.java index f1c9cbdf..2c0b8156 100644 --- a/sdk/java/src/main/java/com/pulumi/docker/inputs/DockerBuildArgs.java +++ b/sdk/java/src/main/java/com/pulumi/docker/inputs/DockerBuildArgs.java @@ -307,8 +307,6 @@ public Builder target(String target) { public DockerBuildArgs build() { $.builderVersion = Codegen.objectProp("builderVersion", BuilderVersion.class).output().arg($.builderVersion).def(BuilderVersion.BuilderBuildKit).getNullable(); - $.context = Codegen.stringProp("context").output().arg($.context).def(".").getNullable(); - $.dockerfile = Codegen.stringProp("dockerfile").output().arg($.dockerfile).def("Dockerfile").getNullable(); return $; } } diff --git a/sdk/nodejs/image.ts b/sdk/nodejs/image.ts index 72cb832b..fde5bbc9 100644 --- a/sdk/nodejs/image.ts +++ b/sdk/nodejs/image.ts @@ -59,6 +59,14 @@ export class Image extends pulumi.CustomResource { * The fully qualified image name that was pushed to the registry. */ public /*out*/ readonly baseImageName!: pulumi.Output; + /** + * The path to the build context to use. + */ + public /*out*/ readonly context!: pulumi.Output; + /** + * The location of the Dockerfile relative to the docker build context. + */ + public /*out*/ readonly dockerfile!: pulumi.Output; /** * The fully qualified image name */ @@ -87,9 +95,13 @@ export class Image extends pulumi.CustomResource { resourceInputs["registry"] = args ? args.registry : undefined; resourceInputs["skipPush"] = (args ? args.skipPush : undefined) ?? false; resourceInputs["baseImageName"] = undefined /*out*/; + resourceInputs["context"] = undefined /*out*/; + resourceInputs["dockerfile"] = undefined /*out*/; resourceInputs["registryServer"] = undefined /*out*/; } else { resourceInputs["baseImageName"] = undefined /*out*/; + resourceInputs["context"] = undefined /*out*/; + resourceInputs["dockerfile"] = undefined /*out*/; resourceInputs["imageName"] = undefined /*out*/; resourceInputs["registryServer"] = undefined /*out*/; } diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index 8d4d9dcf..2e3edf79 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -315,8 +315,6 @@ export function dockerBuildProvideDefaults(val: DockerBuild): DockerBuild { return { ...val, builderVersion: (val.builderVersion) ?? "BuilderBuildKit", - context: (val.context) ?? ".", - dockerfile: (val.dockerfile) ?? "Dockerfile", }; } diff --git a/sdk/python/pulumi_docker/_inputs.py b/sdk/python/pulumi_docker/_inputs.py index 17d94493..1e672112 100644 --- a/sdk/python/pulumi_docker/_inputs.py +++ b/sdk/python/pulumi_docker/_inputs.py @@ -4079,12 +4079,8 @@ def __init__(__self__, *, pulumi.set(__self__, "builder_version", builder_version) if cache_from is not None: pulumi.set(__self__, "cache_from", cache_from) - if context is None: - context = '.' if context is not None: pulumi.set(__self__, "context", context) - if dockerfile is None: - dockerfile = 'Dockerfile' if dockerfile is not None: pulumi.set(__self__, "dockerfile", dockerfile) if platform is not None: diff --git a/sdk/python/pulumi_docker/image.py b/sdk/python/pulumi_docker/image.py index 92d9fe9a..29579b63 100644 --- a/sdk/python/pulumi_docker/image.py +++ b/sdk/python/pulumi_docker/image.py @@ -184,6 +184,8 @@ def _internal_init(__self__, skip_push = False __props__.__dict__["skip_push"] = skip_push __props__.__dict__["base_image_name"] = None + __props__.__dict__["context"] = None + __props__.__dict__["dockerfile"] = None __props__.__dict__["registry_server"] = None alias_opts = pulumi.ResourceOptions(aliases=[pulumi.Alias(type_="docker:image:Image")]) opts = pulumi.ResourceOptions.merge(opts, alias_opts) @@ -210,6 +212,8 @@ def get(resource_name: str, __props__ = ImageArgs.__new__(ImageArgs) __props__.__dict__["base_image_name"] = None + __props__.__dict__["context"] = None + __props__.__dict__["dockerfile"] = None __props__.__dict__["image_name"] = None __props__.__dict__["registry_server"] = None return Image(resource_name, opts=opts, __props__=__props__) @@ -222,6 +226,22 @@ def base_image_name(self) -> pulumi.Output[Optional[str]]: """ return pulumi.get(self, "base_image_name") + @property + @pulumi.getter + def context(self) -> pulumi.Output[Optional[str]]: + """ + The path to the build context to use. + """ + return pulumi.get(self, "context") + + @property + @pulumi.getter + def dockerfile(self) -> pulumi.Output[Optional[str]]: + """ + The location of the Dockerfile relative to the docker build context. + """ + return pulumi.get(self, "dockerfile") + @property @pulumi.getter(name="imageName") def image_name(self) -> pulumi.Output[Optional[str]]: