mirror of https://github.com/buildpacks/pack.git
Compare commits
No commits in common. "main" and "v0.36.1" have entirely different histories.
|
@ -17,7 +17,6 @@ jobs:
|
|||
- name: Set up go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.24
|
||||
check-latest: true
|
||||
go-version-file: 'go.mod'
|
||||
- name: Set up go env
|
||||
|
|
|
@ -20,7 +20,7 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
config: [macos, linux, windows-lcow]
|
||||
config: [macos, linux, windows-lcow, windows-wcow]
|
||||
include:
|
||||
- config: macos
|
||||
# since macos-14 the latest runner is arm64
|
||||
|
@ -38,6 +38,11 @@ jobs:
|
|||
runner: [self-hosted, windows, lcow]
|
||||
no_docker: "false"
|
||||
pack_bin: pack.exe
|
||||
- config: windows-wcow
|
||||
os: windows
|
||||
runner: [windows-2019]
|
||||
no_docker: "false"
|
||||
pack_bin: pack.exe
|
||||
runs-on: ${{ matrix.runner }}
|
||||
env:
|
||||
PACK_BIN: ${{ matrix.pack_bin }}
|
||||
|
@ -86,6 +91,36 @@ jobs:
|
|||
shell: powershell
|
||||
- name: Verify
|
||||
run: make verify
|
||||
- name: Register runner IP
|
||||
if: matrix.config == 'windows-wcow'
|
||||
shell: powershell
|
||||
run: |
|
||||
# Get IP from default gateway interface
|
||||
$IPAddress=(Get-NetIPAddress -InterfaceAlias ((Get-NetRoute "0.0.0.0/0").InterfaceAlias) -AddressFamily IPv4)[0].IPAddress
|
||||
|
||||
# Allow container-to-host registry traffic (from public interface, to the same interface)
|
||||
New-NetfirewallRule -DisplayName test-registry -LocalAddress $IPAddress -RemoteAddress $IPAddress
|
||||
|
||||
# create or update daemon config to allow host as insecure-registry
|
||||
$config=@{}
|
||||
if (Test-Path C:\ProgramData\docker\config\daemon.json) {
|
||||
$config=(Get-Content C:\ProgramData\docker\config\daemon.json | ConvertFrom-json)
|
||||
}
|
||||
$config | Add-Member -Force -Name "insecure-registries" -value @("$IPAddress/32") -MemberType NoteProperty
|
||||
ConvertTo-json $config | Out-File -Encoding ASCII C:\ProgramData\docker\config\daemon.json
|
||||
|
||||
Restart-Service docker
|
||||
|
||||
# dump docker info for auditing
|
||||
docker version
|
||||
docker info
|
||||
|
||||
# Modify etc\hosts to include runner IP
|
||||
$IPAddress=(Get-NetIPAddress -InterfaceAlias ((Get-NetRoute "0.0.0.0/0").InterfaceAlias) -AddressFamily IPv4)[0].IPAddress
|
||||
"# Modified by CNB: https://github.com/buildpacks/ci/tree/main/gh-runners/windows
|
||||
${IPAddress} host.docker.internal
|
||||
${IPAddress} gateway.docker.internal
|
||||
" | Out-File -Filepath C:\Windows\System32\drivers\etc\hosts -Encoding utf8
|
||||
- name: Test
|
||||
env:
|
||||
TEST_COVERAGE: 1
|
||||
|
@ -123,6 +158,7 @@ jobs:
|
|||
PACK_BUILD: ${{ github.run_number }}
|
||||
shell: powershell
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: matrix.config != 'windows-lcow'
|
||||
with:
|
||||
name: pack-${{ matrix.os }}
|
||||
path: out/${{ env.PACK_BIN }}
|
||||
|
|
|
@ -70,7 +70,7 @@ jobs:
|
|||
fi
|
||||
- name: Scan latest release image
|
||||
id: scan-image
|
||||
uses: anchore/scan-action@v6
|
||||
uses: anchore/scan-action@v5
|
||||
with:
|
||||
image: docker.io/buildpacksio/pack:${{ steps.read-go.outputs.latest-release-version }}
|
||||
- name: Create issue if needed
|
||||
|
|
|
@ -61,7 +61,7 @@ jobs:
|
|||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- uses: docker/setup-qemu-action@v3
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
- uses: buildpacks/github-actions/setup-tools@v5.9.2
|
||||
- uses: buildpacks/github-actions/setup-tools@v5.8.3
|
||||
- name: Buildx Build/Publish
|
||||
run: |
|
||||
docker buildx build . \
|
||||
|
|
|
@ -50,11 +50,6 @@ jobs:
|
|||
core.setOutput("linux_url", asset.browser_download_url);
|
||||
}
|
||||
|
||||
if (asset.name.endsWith("linux-arm64.tgz")) {
|
||||
core.setOutput("linux_arm64_name", asset.name);
|
||||
core.setOutput("linux_arm64_url", asset.browser_download_url);
|
||||
}
|
||||
|
||||
if (asset.name.endsWith("macos.tgz")) {
|
||||
core.setOutput("macos_name", asset.name);
|
||||
core.setOutput("macos_url", asset.browser_download_url);
|
||||
|
@ -72,10 +67,6 @@ jobs:
|
|||
linux_sha256=$(sha256sum ${{ steps.assets.outputs.linux_name }} | cut -d ' ' -f1)
|
||||
echo "linux_sha256=$linux_sha256" >> $GITHUB_OUTPUT
|
||||
|
||||
curl -sSL ${{ steps.assets.outputs.linux_arm64_url }} -o ${{ steps.assets.outputs.linux_arm64_name }}
|
||||
linux_arm64_sha256=$(sha256sum ${{ steps.assets.outputs.linux_arm64_name }} | cut -d ' ' -f1)
|
||||
echo "linux_arm64_sha256=$linux_arm64_sha256" >> $GITHUB_OUTPUT
|
||||
|
||||
curl -sSL ${{ steps.assets.outputs.macos_url }} -o ${{ steps.assets.outputs.macos_name }}
|
||||
macos_sha256=$(sha256sum ${{ steps.assets.outputs.macos_name }} | cut -d ' ' -f1)
|
||||
echo "macos_sha256=$macos_sha256" >> $GITHUB_OUTPUT
|
||||
|
@ -92,8 +83,6 @@ jobs:
|
|||
env:
|
||||
LINUX_URL: ${{ steps.assets.outputs.linux_url }}
|
||||
LINUX_SHA: ${{ steps.checksums.outputs.linux_sha256 }}
|
||||
LINUX_ARM64_URL: ${{ steps.assets.outputs.linux_arm64_url }}
|
||||
LINUX_ARM64_SHA: ${{ steps.checksums.outputs.linux_arm64_sha256 }}
|
||||
MACOS_URL: ${{ steps.assets.outputs.macos_url }}
|
||||
MACOS_SHA: ${{ steps.checksums.outputs.macos_sha256 }}
|
||||
MACOS_ARM64_URL: ${{ steps.assets.outputs.macos_arm64_url }}
|
||||
|
|
|
@ -20,8 +20,8 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target: [bionic, focal, jammy, noble, oracular, plucky]
|
||||
runs-on: ubuntu-22.04
|
||||
target: [bionic, focal, jammy, noble]
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
@ -114,27 +114,3 @@ jobs:
|
|||
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
|
||||
GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
|
||||
PACKAGE_VERSION: ${{ steps.version.outputs.result }}
|
||||
|
||||
- name: Deliver oracular
|
||||
if: matrix.target == 'oracular'
|
||||
uses: docker://ubuntu:oracular
|
||||
with:
|
||||
entrypoint: .github/workflows/delivery/ubuntu/deliver.sh
|
||||
env:
|
||||
DEBIAN_FRONTEND: "noninteractive"
|
||||
GO_DEP_PACKAGE_NAME: golang
|
||||
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
|
||||
GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
|
||||
PACKAGE_VERSION: ${{ steps.version.outputs.result }}
|
||||
|
||||
- name: Deliver plucky
|
||||
if: matrix.target == 'plucky'
|
||||
uses: docker://ubuntu:plucky
|
||||
with:
|
||||
entrypoint: .github/workflows/delivery/ubuntu/deliver.sh
|
||||
env:
|
||||
DEBIAN_FRONTEND: "noninteractive"
|
||||
GO_DEP_PACKAGE_NAME: golang
|
||||
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
|
||||
GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
|
||||
PACKAGE_VERSION: ${{ steps.version.outputs.result }}
|
||||
|
|
|
@ -14,10 +14,7 @@ class Pack < Formula
|
|||
elsif OS.mac?
|
||||
url "{{MACOS_URL}}"
|
||||
sha256 "{{MACOS_SHA}}"
|
||||
elsif OS.linux? && Hardware::CPU.arm?
|
||||
url "{{LINUX_ARM64_URL}}"
|
||||
sha256 "{{LINUX_ARM64_SHA}}"
|
||||
else
|
||||
else
|
||||
url "{{LINUX_URL}}"
|
||||
sha256 "{{LINUX_SHA}}"
|
||||
end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
ARG base_image=gcr.io/distroless/static
|
||||
|
||||
FROM golang:1.24 as builder
|
||||
FROM golang:1.23 as builder
|
||||
ARG pack_version
|
||||
ENV PACK_VERSION=$pack_version
|
||||
WORKDIR /app
|
||||
|
|
8
Makefile
8
Makefile
|
@ -58,7 +58,7 @@ BINDIR:=/usr/bin/
|
|||
## build: Build the program
|
||||
build: out
|
||||
@echo "=====> Building..."
|
||||
$(GOCMD) build -ldflags "-s -w -X 'github.com/buildpacks/pack/pkg/client.Version=${PACK_VERSION}' -extldflags '${LDFLAGS}'" -trimpath -o ./out/$(PACK_BIN) -a
|
||||
$(GOCMD) build -ldflags "-s -w -X 'github.com/buildpacks/pack.Version=${PACK_VERSION}' -extldflags '${LDFLAGS}'" -trimpath -o ./out/$(PACK_BIN) -a ./cmd/pack
|
||||
|
||||
## all: Run clean, verify, test, and build operations
|
||||
all: clean verify test build
|
||||
|
@ -160,12 +160,12 @@ install-goimports:
|
|||
## install-golangci-lint: Install golangci-lint dependency
|
||||
install-golangci-lint:
|
||||
@echo "=====> Installing golangci-lint..."
|
||||
cd tools && $(GOCMD) install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.0.2
|
||||
cd tools && $(GOCMD) install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.61.0
|
||||
|
||||
## mod-tidy: Tidy Go modules
|
||||
mod-tidy:
|
||||
$(GOCMD) mod tidy -compat=1.24
|
||||
cd tools && $(GOCMD) mod tidy -compat=1.24
|
||||
$(GOCMD) mod tidy -compat=1.23
|
||||
cd tools && $(GOCMD) mod tidy -compat=1.23
|
||||
|
||||
## tidy: Tidy modules and format the code
|
||||
tidy: mod-tidy format
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package acceptance
|
||||
|
||||
|
@ -47,7 +48,7 @@ const (
|
|||
)
|
||||
|
||||
var (
|
||||
dockerCli client.APIClient
|
||||
dockerCli client.CommonAPIClient
|
||||
registryConfig *h.TestRegistryConfig
|
||||
suiteManager *SuiteManager
|
||||
imageManager managers.ImageManager
|
||||
|
@ -1273,225 +1274,6 @@ func testAcceptance(
|
|||
})
|
||||
})
|
||||
|
||||
when("system buildpacks", func() {
|
||||
var (
|
||||
builderWithSystemBP string
|
||||
builderWithFailingSystemBP string
|
||||
builderWithOptionalFailingSystemBP string
|
||||
regularBuilder string
|
||||
)
|
||||
|
||||
it.Before(func() {
|
||||
// Create builder with system buildpacks
|
||||
builderWithSystemBP = fmt.Sprintf("pack.local/builder-with-system-bps/%s", h.RandString(10))
|
||||
h.SkipIf(t, !createBuilderPack.Supports("builder create"), "pack builder create not supported")
|
||||
|
||||
createBuilderPack.JustRunSuccessfully(
|
||||
"builder", "create", builderWithSystemBP,
|
||||
"--config", createBuilderPack.FixtureManager().FixtureLocation("builder_with_system_buildpacks.toml"),
|
||||
)
|
||||
|
||||
// Create builder with failing system buildpack
|
||||
builderWithFailingSystemBP = fmt.Sprintf("pack.local/builder-fail-system/%s", h.RandString(10))
|
||||
createBuilderPack.JustRunSuccessfully(
|
||||
"builder", "create", builderWithFailingSystemBP,
|
||||
"--config", createBuilderPack.FixtureManager().FixtureLocation("builder_with_failing_system_buildpack.toml"),
|
||||
)
|
||||
|
||||
// Create builder with optional failing system buildpack
|
||||
builderWithOptionalFailingSystemBP = fmt.Sprintf("pack.local/builder-optional-fail/%s", h.RandString(10))
|
||||
createBuilderPack.JustRunSuccessfully(
|
||||
"builder", "create", builderWithOptionalFailingSystemBP,
|
||||
"--config", createBuilderPack.FixtureManager().FixtureLocation("builder_with_optional_failing_system_buildpack.toml"),
|
||||
)
|
||||
|
||||
// Create regular builder for comparison
|
||||
regularBuilder = fmt.Sprintf("pack.local/regular-builder/%s", h.RandString(10))
|
||||
createBuilderPack.JustRunSuccessfully(
|
||||
"builder", "create", regularBuilder,
|
||||
"--config", createBuilderPack.FixtureManager().FixtureLocation("builder.toml"),
|
||||
)
|
||||
})
|
||||
|
||||
it.After(func() {
|
||||
imageManager.CleanupImages(builderWithSystemBP)
|
||||
imageManager.CleanupImages(builderWithFailingSystemBP)
|
||||
imageManager.CleanupImages(builderWithOptionalFailingSystemBP)
|
||||
imageManager.CleanupImages(regularBuilder)
|
||||
})
|
||||
|
||||
when("inspecting builder with system buildpacks", func() {
|
||||
it("shows system buildpacks in builder info", func() {
|
||||
output := createBuilderPack.RunSuccessfully("builder", "inspect", builderWithSystemBP)
|
||||
|
||||
// Verify system buildpacks are shown in the output
|
||||
h.AssertContains(t, output, "system/pre")
|
||||
h.AssertContains(t, output, "system/post")
|
||||
})
|
||||
})
|
||||
|
||||
when("building with system buildpacks", func() {
|
||||
var (
|
||||
appImage string
|
||||
appPath string
|
||||
)
|
||||
|
||||
it.Before(func() {
|
||||
appPath = filepath.Join("testdata", "mock_app")
|
||||
appImage = fmt.Sprintf("pack.local/app/%s", h.RandString(10))
|
||||
})
|
||||
|
||||
it.After(func() {
|
||||
imageManager.CleanupImages(appImage)
|
||||
})
|
||||
|
||||
when("system buildpacks are enabled (default)", func() {
|
||||
it("runs pre-system buildpacks before regular buildpacks", func() {
|
||||
output := pack.RunSuccessfully(
|
||||
"build", appImage,
|
||||
"--path", appPath,
|
||||
"--builder", builderWithSystemBP,
|
||||
"--no-color",
|
||||
)
|
||||
|
||||
// Verify pre-system buildpack ran before the main buildpack
|
||||
h.AssertContains(t, output, "DETECT: System Pre buildpack")
|
||||
h.AssertContains(t, output, "BUILD: System Pre buildpack")
|
||||
h.AssertContains(t, output, "Simple Layers Buildpack")
|
||||
|
||||
// Verify order: system pre should come before main buildpack
|
||||
systemPreIndex := strings.Index(output, "BUILD: System Pre buildpack")
|
||||
mainBuildpackIndex := strings.Index(output, "Simple Layers Buildpack")
|
||||
if systemPreIndex == -1 || mainBuildpackIndex == -1 || systemPreIndex >= mainBuildpackIndex {
|
||||
t.Fatalf("Expected system pre buildpack to run before main buildpack")
|
||||
}
|
||||
})
|
||||
|
||||
it("runs post-system buildpacks after regular buildpacks", func() {
|
||||
output := pack.RunSuccessfully(
|
||||
"build", appImage,
|
||||
"--path", appPath,
|
||||
"--builder", builderWithSystemBP,
|
||||
"--no-color",
|
||||
)
|
||||
|
||||
// Verify post-system buildpack ran after the main buildpack
|
||||
h.AssertContains(t, output, "BUILD: System Post buildpack")
|
||||
|
||||
// Verify order: system post should come after main buildpack
|
||||
mainBuildpackIndex := strings.Index(output, "Simple Layers Buildpack")
|
||||
systemPostIndex := strings.Index(output, "BUILD: System Post buildpack")
|
||||
if mainBuildpackIndex == -1 || systemPostIndex == -1 || mainBuildpackIndex >= systemPostIndex {
|
||||
t.Fatalf("Expected system post buildpack to run after main buildpack")
|
||||
}
|
||||
})
|
||||
|
||||
it("builds successfully with system buildpacks", func() {
|
||||
output := pack.RunSuccessfully(
|
||||
"build", appImage,
|
||||
"--path", appPath,
|
||||
"--builder", builderWithSystemBP,
|
||||
"--verbose",
|
||||
)
|
||||
|
||||
// Verify system buildpack contributed during build
|
||||
h.AssertContains(t, output, "BUILD: System Pre buildpack")
|
||||
h.AssertContains(t, output, "BUILD: System Post buildpack")
|
||||
|
||||
// Verify the image was successfully built
|
||||
h.AssertContains(t, output, "Successfully built image")
|
||||
assertImage.ExistsLocally(appImage)
|
||||
})
|
||||
})
|
||||
|
||||
when("--disable-system-buildpacks flag is used", func() {
|
||||
it("does not run system buildpacks", func() {
|
||||
output := pack.RunSuccessfully(
|
||||
"build", appImage,
|
||||
"--path", appPath,
|
||||
"--builder", builderWithSystemBP,
|
||||
"--disable-system-buildpacks",
|
||||
"--no-color",
|
||||
)
|
||||
|
||||
// Verify system buildpacks did not run
|
||||
h.AssertNotContains(t, output, "DETECT: System Pre buildpack")
|
||||
h.AssertNotContains(t, output, "BUILD: System Pre buildpack")
|
||||
h.AssertNotContains(t, output, "BUILD: System Post buildpack")
|
||||
|
||||
// Verify main buildpack still runs
|
||||
h.AssertContains(t, output, "Simple Layers Buildpack")
|
||||
|
||||
// Verify the image was successfully built
|
||||
h.AssertContains(t, output, "Successfully built image")
|
||||
assertImage.ExistsLocally(appImage)
|
||||
})
|
||||
})
|
||||
|
||||
when("builder has no system buildpacks", func() {
|
||||
it("builds normally without system buildpacks", func() {
|
||||
output := pack.RunSuccessfully(
|
||||
"build", appImage,
|
||||
"--path", appPath,
|
||||
"--builder", regularBuilder,
|
||||
"--no-color",
|
||||
)
|
||||
|
||||
// Verify no system buildpacks ran
|
||||
h.AssertNotContains(t, output, "System Pre buildpack")
|
||||
h.AssertNotContains(t, output, "System Post buildpack")
|
||||
|
||||
// Verify main buildpack runs
|
||||
h.AssertContains(t, output, "Simple Layers Buildpack")
|
||||
|
||||
// Verify the image was successfully built
|
||||
h.AssertContains(t, output, "Successfully built image")
|
||||
assertImage.ExistsLocally(appImage)
|
||||
})
|
||||
})
|
||||
|
||||
when("required system buildpack fails detection", func() {
|
||||
it("fails the build", func() {
|
||||
output, err := pack.Run(
|
||||
"build", appImage,
|
||||
"--path", appPath,
|
||||
"--builder", builderWithFailingSystemBP,
|
||||
"--no-color",
|
||||
)
|
||||
|
||||
// Build should fail
|
||||
h.AssertNotNil(t, err)
|
||||
h.AssertContains(t, output, "DETECT: System Fail Detect buildpack (will fail)")
|
||||
h.AssertContains(t, output, "No buildpack groups passed detection")
|
||||
})
|
||||
})
|
||||
|
||||
when("optional system buildpack fails detection", func() {
|
||||
it("continues with the build", func() {
|
||||
output := pack.RunSuccessfully(
|
||||
"build", appImage,
|
||||
"--path", appPath,
|
||||
"--builder", builderWithOptionalFailingSystemBP,
|
||||
"--no-color",
|
||||
)
|
||||
|
||||
// Build should succeed despite optional system buildpack failing
|
||||
h.AssertContains(t, output, "DETECT: System Fail Detect buildpack (will fail)")
|
||||
h.AssertContains(t, output, "DETECT: System Pre buildpack")
|
||||
h.AssertContains(t, output, "BUILD: System Pre buildpack")
|
||||
h.AssertContains(t, output, "Simple Layers Buildpack")
|
||||
|
||||
// Verify the failed optional buildpack didn't run build
|
||||
h.AssertNotContains(t, output, "BUILD: System Fail Detect buildpack")
|
||||
|
||||
// Verify the image was successfully built
|
||||
h.AssertContains(t, output, "Successfully built image")
|
||||
assertImage.ExistsLocally(appImage)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("build", func() {
|
||||
var repo, repoName string
|
||||
|
||||
|
@ -2403,45 +2185,20 @@ func testAcceptance(
|
|||
imageManager.CleanupImages(runImageName)
|
||||
})
|
||||
|
||||
when("should validate stack", func() {
|
||||
it.Before(func() {
|
||||
h.SkipIf(t, pack.SupportsFeature(invoke.StackWarning), "stack is validated in prior versions")
|
||||
})
|
||||
it("fails with a message", func() {
|
||||
it("fails with a message", func() {
|
||||
output, err := pack.Run(
|
||||
"build", repoName,
|
||||
"-p", filepath.Join("testdata", "mock_app"),
|
||||
"--run-image", runImageName,
|
||||
)
|
||||
assert.NotNil(err)
|
||||
|
||||
output, err := pack.Run(
|
||||
"build", repoName,
|
||||
"-p", filepath.Join("testdata", "mock_app"),
|
||||
"--run-image", runImageName,
|
||||
)
|
||||
assert.NotNil(err)
|
||||
|
||||
assertOutput := assertions.NewOutputAssertionManager(t, output)
|
||||
assertOutput.ReportsRunImageStackNotMatchingBuilder(
|
||||
"other.stack.id",
|
||||
"pack.test.stack",
|
||||
)
|
||||
})
|
||||
assertOutput := assertions.NewOutputAssertionManager(t, output)
|
||||
assertOutput.ReportsRunImageStackNotMatchingBuilder(
|
||||
"other.stack.id",
|
||||
"pack.test.stack",
|
||||
)
|
||||
})
|
||||
|
||||
when("should not validate stack", func() {
|
||||
it.Before(func() {
|
||||
h.SkipIf(t, !pack.SupportsFeature(invoke.StackWarning), "stack is no longer validated")
|
||||
})
|
||||
it("succeeds with a warning", func() {
|
||||
|
||||
output, err := pack.Run(
|
||||
"build", repoName,
|
||||
"-p", filepath.Join("testdata", "mock_app"),
|
||||
"--run-image", runImageName,
|
||||
)
|
||||
assert.Nil(err)
|
||||
|
||||
assertOutput := assertions.NewOutputAssertionManager(t, output)
|
||||
assertOutput.ReportsDeprecatedUseOfStack()
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
})
|
||||
|
||||
|
@ -4147,7 +3904,7 @@ func generatePackageTomlWithOS(
|
|||
return packageTomlFile.Name()
|
||||
}
|
||||
|
||||
func createStack(t *testing.T, dockerCli client.APIClient, runImageMirror string) error {
|
||||
func createStack(t *testing.T, dockerCli client.CommonAPIClient, runImageMirror string) error {
|
||||
t.Helper()
|
||||
t.Log("creating stack images...")
|
||||
|
||||
|
@ -4168,7 +3925,7 @@ func createStack(t *testing.T, dockerCli client.APIClient, runImageMirror string
|
|||
return nil
|
||||
}
|
||||
|
||||
func createStackImage(dockerCli client.APIClient, repoName string, dir string) error {
|
||||
func createStackImage(dockerCli client.CommonAPIClient, repoName string, dir string) error {
|
||||
defaultFilterFunc := func(file string) bool { return true }
|
||||
|
||||
ctx := context.Background()
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package assertions
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package assertions
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package assertions
|
||||
|
||||
|
@ -117,12 +118,6 @@ func (o OutputAssertionManager) ReportsRunImageStackNotMatchingBuilder(runImageS
|
|||
)
|
||||
}
|
||||
|
||||
func (o OutputAssertionManager) ReportsDeprecatedUseOfStack() {
|
||||
o.testObject.Helper()
|
||||
|
||||
o.assert.Contains(o.output, "Warning: deprecated usage of stack")
|
||||
}
|
||||
|
||||
func (o OutputAssertionManager) WithoutColors() {
|
||||
o.testObject.Helper()
|
||||
o.testObject.Log("has no color")
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package assertions
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package buildpacks
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package buildpacks
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package buildpacks
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package buildpacks
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package buildpacks
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package config
|
||||
|
||||
|
@ -353,9 +354,9 @@ func (b assetManagerBuilder) buildPack(compileVersion string) string {
|
|||
b.assert.Nil(err)
|
||||
|
||||
cmd := exec.Command("go", "build",
|
||||
// XXX the version setter is wrong here, there is no cmd.Version
|
||||
"-ldflags", fmt.Sprintf("-X 'github.com/buildpacks/pack/cmd.Version=%s'", compileVersion),
|
||||
"-o", packPath,
|
||||
"./cmd/pack",
|
||||
)
|
||||
if filepath.Base(cwd) == "acceptance" {
|
||||
cmd.Dir = filepath.Dir(cwd)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package config
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package config
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package config
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package config
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package config
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package invoke
|
||||
|
||||
|
@ -240,7 +241,6 @@ const (
|
|||
ManifestCommands
|
||||
PlatformOption
|
||||
MultiPlatformBuildersAndBuildPackages
|
||||
StackWarning
|
||||
)
|
||||
|
||||
var featureTests = map[Feature]func(i *PackInvoker) bool{
|
||||
|
@ -286,9 +286,6 @@ var featureTests = map[Feature]func(i *PackInvoker) bool{
|
|||
MultiPlatformBuildersAndBuildPackages: func(i *PackInvoker) bool {
|
||||
return i.atLeast("v0.34.0")
|
||||
},
|
||||
StackWarning: func(i *PackInvoker) bool {
|
||||
return i.atLeast("v0.37.0")
|
||||
},
|
||||
}
|
||||
|
||||
func (i *PackInvoker) SupportsFeature(f Feature) bool {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package invoke
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package managers
|
||||
|
||||
|
@ -22,10 +23,10 @@ var DefaultDuration = 10 * time.Second
|
|||
type ImageManager struct {
|
||||
testObject *testing.T
|
||||
assert h.AssertionManager
|
||||
dockerCli client.APIClient
|
||||
dockerCli client.CommonAPIClient
|
||||
}
|
||||
|
||||
func NewImageManager(t *testing.T, dockerCli client.APIClient) ImageManager {
|
||||
func NewImageManager(t *testing.T, dockerCli client.CommonAPIClient) ImageManager {
|
||||
return ImageManager{
|
||||
testObject: t,
|
||||
assert: h.NewAssertionManager(t),
|
||||
|
@ -43,7 +44,7 @@ func (im ImageManager) CleanupImages(imageNames ...string) {
|
|||
|
||||
func (im ImageManager) InspectLocal(image string) (dockertypes.ImageInspect, error) {
|
||||
im.testObject.Helper()
|
||||
inspect, err := im.dockerCli.ImageInspect(context.Background(), image)
|
||||
inspect, _, err := im.dockerCli.ImageInspectWithRaw(context.Background(), image)
|
||||
return inspect, err
|
||||
}
|
||||
|
||||
|
@ -119,7 +120,7 @@ func (im ImageManager) CreateContainer(name string) TestContainer {
|
|||
|
||||
type TestContainer struct {
|
||||
testObject *testing.T
|
||||
dockerCli client.APIClient
|
||||
dockerCli client.CommonAPIClient
|
||||
assert h.AssertionManager
|
||||
name string
|
||||
id string
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance && !windows
|
||||
// +build acceptance,!windows
|
||||
|
||||
package os
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance && darwin && amd64
|
||||
// +build acceptance,darwin,amd64
|
||||
|
||||
package os
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance && darwin && arm64
|
||||
// +build acceptance,darwin,arm64
|
||||
|
||||
package os
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance && linux
|
||||
// +build acceptance,linux
|
||||
|
||||
package os
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance && windows
|
||||
// +build acceptance,windows
|
||||
|
||||
package os
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build acceptance
|
||||
// +build acceptance
|
||||
|
||||
package acceptance
|
||||
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
echo "---> BUILD: System Fail Detect buildpack (should never run)"
|
||||
|
||||
# This should never be reached
|
||||
exit 1
|
|
@ -1,6 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
echo "---> DETECT: System Fail Detect buildpack (will fail)"
|
||||
|
||||
# Always fail detection
|
||||
exit 1
|
|
@ -1,9 +0,0 @@
|
|||
api = "0.7"
|
||||
|
||||
[buildpack]
|
||||
id = "system/fail-detect"
|
||||
version = "system-fail-detect-version"
|
||||
name = "System Fail Detect Buildpack"
|
||||
|
||||
[[stacks]]
|
||||
id = "pack.test.stack"
|
|
@ -1,20 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
echo "---> BUILD: System Post buildpack"
|
||||
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
|
||||
layers_dir=$1
|
||||
platform_dir=$2
|
||||
|
||||
# Create a layer to verify it ran
|
||||
mkdir -p "${layers_dir}/system-post"
|
||||
cat > "${layers_dir}/system-post.toml" <<EOF
|
||||
launch = true
|
||||
cache = true
|
||||
EOF
|
||||
|
||||
echo "System Post Buildpack was here" > "${layers_dir}/system-post/marker"
|
||||
|
||||
exit 0
|
|
@ -1,6 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
echo "---> DETECT: System Post buildpack"
|
||||
|
||||
# Always pass detection for testing
|
||||
exit 0
|
|
@ -1,9 +0,0 @@
|
|||
api = "0.7"
|
||||
|
||||
[buildpack]
|
||||
id = "system/post"
|
||||
version = "system-post-version"
|
||||
name = "System Post Buildpack"
|
||||
|
||||
[[stacks]]
|
||||
id = "pack.test.stack"
|
|
@ -1,20 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
echo "---> BUILD: System Pre buildpack"
|
||||
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
|
||||
layers_dir=$1
|
||||
platform_dir=$2
|
||||
|
||||
# Create a layer to verify it ran
|
||||
mkdir -p "${layers_dir}/system-pre"
|
||||
cat > "${layers_dir}/system-pre.toml" <<EOF
|
||||
launch = true
|
||||
cache = true
|
||||
EOF
|
||||
|
||||
echo "System Pre Buildpack was here" > "${layers_dir}/system-pre/marker"
|
||||
|
||||
exit 0
|
|
@ -1,6 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
echo "---> DETECT: System Pre buildpack"
|
||||
|
||||
# Always pass detection for testing
|
||||
exit 0
|
|
@ -1,9 +0,0 @@
|
|||
api = "0.7"
|
||||
|
||||
[buildpack]
|
||||
id = "system/pre"
|
||||
version = "system-pre-version"
|
||||
name = "System Pre Buildpack"
|
||||
|
||||
[[stacks]]
|
||||
id = "pack.test.stack"
|
|
@ -1,33 +0,0 @@
|
|||
[[buildpacks]]
|
||||
id = "simple-layers-buildpack"
|
||||
uri = "file://{{.Fixtures}}/simple-layers-buildpack"
|
||||
|
||||
[[buildpacks]]
|
||||
id = "system/fail-detect"
|
||||
uri = "file://{{.Fixtures}}/system-fail-detect"
|
||||
|
||||
[[buildpacks]]
|
||||
id = "system/post"
|
||||
uri = "file://{{.Fixtures}}/system-post-buildpack"
|
||||
|
||||
# System buildpacks configuration
|
||||
[system]
|
||||
[system.pre]
|
||||
buildpacks = [
|
||||
{ id = "system/fail-detect", version = "system-fail-detect-version", optional = false }
|
||||
]
|
||||
|
||||
[system.post]
|
||||
buildpacks = [
|
||||
{ id = "system/post", version = "system-post-version", optional = true }
|
||||
]
|
||||
|
||||
[[order]]
|
||||
[[order.group]]
|
||||
id = "simple-layers-buildpack"
|
||||
version = "simple-layers-buildpack-version"
|
||||
|
||||
[stack]
|
||||
id = "pack.test.stack"
|
||||
build-image = "pack-test/build"
|
||||
run-image = "pack-test/run"
|
|
@ -1,29 +0,0 @@
|
|||
[[buildpacks]]
|
||||
id = "simple-layers-buildpack"
|
||||
uri = "file://{{.Fixtures}}/simple-layers-buildpack"
|
||||
|
||||
[[buildpacks]]
|
||||
id = "system/fail-detect"
|
||||
uri = "file://{{.Fixtures}}/system-fail-detect"
|
||||
|
||||
[[buildpacks]]
|
||||
id = "system/pre"
|
||||
uri = "file://{{.Fixtures}}/system-pre-buildpack"
|
||||
|
||||
# System buildpacks configuration
|
||||
[system]
|
||||
[system.pre]
|
||||
buildpacks = [
|
||||
{ id = "system/fail-detect", version = "system-fail-detect-version", optional = true },
|
||||
{ id = "system/pre", version = "system-pre-version", optional = false }
|
||||
]
|
||||
|
||||
[[order]]
|
||||
[[order.group]]
|
||||
id = "simple-layers-buildpack"
|
||||
version = "simple-layers-buildpack-version"
|
||||
|
||||
[stack]
|
||||
id = "pack.test.stack"
|
||||
build-image = "pack-test/build"
|
||||
run-image = "pack-test/run"
|
|
@ -1,33 +0,0 @@
|
|||
[[buildpacks]]
|
||||
id = "simple-layers-buildpack"
|
||||
uri = "file://{{.Fixtures}}/simple-layers-buildpack"
|
||||
|
||||
[[buildpacks]]
|
||||
id = "system/pre"
|
||||
uri = "file://{{.Fixtures}}/system-pre-buildpack"
|
||||
|
||||
[[buildpacks]]
|
||||
id = "system/post"
|
||||
uri = "file://{{.Fixtures}}/system-post-buildpack"
|
||||
|
||||
# System buildpacks configuration
|
||||
[system]
|
||||
[system.pre]
|
||||
buildpacks = [
|
||||
{ id = "system/pre", version = "system-pre-version", optional = false }
|
||||
]
|
||||
|
||||
[system.post]
|
||||
buildpacks = [
|
||||
{ id = "system/post", version = "system-post-version", optional = true }
|
||||
]
|
||||
|
||||
[[order]]
|
||||
[[order.group]]
|
||||
id = "simple-layers-buildpack"
|
||||
version = "simple-layers-buildpack-version"
|
||||
|
||||
[stack]
|
||||
id = "pack.test.stack"
|
||||
build-image = "pack-test/build"
|
||||
run-image = "pack-test/run"
|
|
@ -2,7 +2,7 @@ Pack:
|
|||
Version: {{ .Version }}
|
||||
OS/Arch: {{ .OS }}/{{ .Arch }}
|
||||
|
||||
Default Lifecycle Version: 0.20.11
|
||||
Default Lifecycle Version: 0.20.3
|
||||
|
||||
Supported Platform APIs: 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.10, 0.11, 0.12, 0.13
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build benchmarks
|
||||
// +build benchmarks
|
||||
|
||||
package benchmarks
|
||||
|
||||
|
|
|
@ -26,7 +26,6 @@ type Config struct {
|
|||
Run RunConfig `toml:"run"`
|
||||
Build BuildConfig `toml:"build"`
|
||||
Targets []dist.Target `toml:"targets"`
|
||||
System dist.System `toml:"system"`
|
||||
}
|
||||
|
||||
// ModuleCollection is a list of ModuleConfigs
|
||||
|
@ -39,8 +38,8 @@ type ModuleConfig struct {
|
|||
}
|
||||
|
||||
func (c *ModuleConfig) DisplayString() string {
|
||||
if c.FullName() != "" {
|
||||
return c.FullName()
|
||||
if c.ModuleInfo.FullName() != "" {
|
||||
return c.ModuleInfo.FullName()
|
||||
}
|
||||
|
||||
return c.ImageOrURI.DisplayString()
|
||||
|
|
|
@ -157,39 +157,6 @@ uri = "noop-buildpack.tgz"
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("system buildpack is defined", func() {
|
||||
it.Before(func() {
|
||||
h.AssertNil(t, os.WriteFile(builderConfigPath, []byte(`
|
||||
[[system.pre.buildpacks]]
|
||||
id = "id-1"
|
||||
version = "1.0"
|
||||
optional = false
|
||||
|
||||
[[system.post.buildpacks]]
|
||||
id = "id-2"
|
||||
version = "2.0"
|
||||
optional = true
|
||||
`), 0666))
|
||||
})
|
||||
|
||||
it("returns a builder config", func() {
|
||||
builderConfig, _, err := builder.ReadConfig(builderConfigPath)
|
||||
h.AssertNil(t, err)
|
||||
h.AssertEq(t, len(builderConfig.System.Pre.Buildpacks), 1)
|
||||
h.AssertEq(t, len(builderConfig.System.Post.Buildpacks), 1)
|
||||
|
||||
// Verify system.pre.buildpacks
|
||||
h.AssertEq(t, builderConfig.System.Pre.Buildpacks[0].ID, "id-1")
|
||||
h.AssertEq(t, builderConfig.System.Pre.Buildpacks[0].Version, "1.0")
|
||||
h.AssertEq(t, builderConfig.System.Pre.Buildpacks[0].Optional, false)
|
||||
|
||||
// Verify system.post.buildpacks
|
||||
h.AssertEq(t, builderConfig.System.Post.Buildpacks[0].ID, "id-2")
|
||||
h.AssertEq(t, builderConfig.System.Post.Buildpacks[0].Version, "2.0")
|
||||
h.AssertEq(t, builderConfig.System.Post.Buildpacks[0].Optional, true)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("#ValidateConfig()", func() {
|
||||
|
|
|
@ -20,7 +20,7 @@ import (
|
|||
"github.com/buildpacks/pack/pkg/client"
|
||||
)
|
||||
|
||||
func tryInitSSHDockerClient() (dockerClient.APIClient, error) {
|
||||
func tryInitSSHDockerClient() (dockerClient.CommonAPIClient, error) {
|
||||
dockerHost := os.Getenv("DOCKER_HOST")
|
||||
_url, err := url.Parse(dockerHost)
|
||||
isSSH := err == nil && _url.Scheme == "ssh"
|
||||
|
|
174
go.mod
174
go.mod
|
@ -1,154 +1,148 @@
|
|||
module github.com/buildpacks/pack
|
||||
|
||||
require (
|
||||
github.com/BurntSushi/toml v1.5.0
|
||||
github.com/GoogleContainerTools/kaniko v1.24.0
|
||||
github.com/BurntSushi/toml v1.4.0
|
||||
github.com/GoogleContainerTools/kaniko v1.23.2
|
||||
github.com/Masterminds/semver v1.5.0
|
||||
github.com/Microsoft/go-winio v0.6.2
|
||||
github.com/apex/log v1.9.0
|
||||
github.com/buildpacks/imgutil v0.0.0-20250814164739-4b1c8875ba7e
|
||||
github.com/buildpacks/lifecycle v0.20.11
|
||||
github.com/containerd/errdefs v1.0.0
|
||||
github.com/docker/cli v28.3.3+incompatible
|
||||
github.com/docker/docker v28.3.3+incompatible
|
||||
github.com/docker/go-connections v0.6.0
|
||||
github.com/buildpacks/imgutil v0.0.0-20240605145725-186f89b2d168
|
||||
github.com/buildpacks/lifecycle v0.20.4
|
||||
github.com/docker/cli v27.4.0+incompatible
|
||||
github.com/docker/docker v27.4.0+incompatible
|
||||
github.com/docker/go-connections v0.5.0
|
||||
github.com/dustin/go-humanize v1.0.1
|
||||
github.com/gdamore/tcell/v2 v2.8.1
|
||||
github.com/go-git/go-git/v5 v5.16.2
|
||||
github.com/gdamore/tcell/v2 v2.7.4
|
||||
github.com/go-git/go-git/v5 v5.12.0
|
||||
github.com/golang/mock v1.6.0
|
||||
github.com/google/go-cmp v0.7.0
|
||||
github.com/google/go-containerregistry v0.20.6
|
||||
github.com/google/go-cmp v0.6.0
|
||||
github.com/google/go-containerregistry v0.20.2
|
||||
github.com/google/go-github/v30 v30.1.0
|
||||
github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95
|
||||
github.com/heroku/color v0.0.6
|
||||
github.com/mitchellh/ioprogress v0.0.0-20180201004757-6a23b12fa88e
|
||||
github.com/moby/go-archive v0.1.0
|
||||
github.com/onsi/gomega v1.38.0
|
||||
github.com/onsi/gomega v1.36.1
|
||||
github.com/opencontainers/go-digest v1.0.0
|
||||
github.com/opencontainers/image-spec v1.1.1
|
||||
github.com/opencontainers/image-spec v1.1.0
|
||||
github.com/pelletier/go-toml v1.9.5
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8
|
||||
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06
|
||||
github.com/sclevine/spec v1.4.0
|
||||
github.com/spf13/cobra v1.9.1
|
||||
golang.org/x/crypto v0.41.0
|
||||
golang.org/x/mod v0.27.0
|
||||
golang.org/x/oauth2 v0.30.0
|
||||
golang.org/x/sync v0.16.0
|
||||
golang.org/x/sys v0.35.0
|
||||
golang.org/x/term v0.34.0
|
||||
golang.org/x/text v0.28.0
|
||||
github.com/spf13/cobra v1.8.1
|
||||
golang.org/x/crypto v0.31.0
|
||||
golang.org/x/mod v0.22.0
|
||||
golang.org/x/oauth2 v0.24.0
|
||||
golang.org/x/sync v0.10.0
|
||||
golang.org/x/sys v0.28.0
|
||||
golang.org/x/term v0.27.0
|
||||
golang.org/x/text v0.21.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
)
|
||||
|
||||
require (
|
||||
dario.cat/mergo v1.0.2 // indirect
|
||||
dario.cat/mergo v1.0.0 // indirect
|
||||
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect
|
||||
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
|
||||
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
|
||||
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
|
||||
github.com/Azure/go-autorest/autorest v0.11.30 // indirect
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.24 // indirect
|
||||
github.com/Azure/go-autorest/autorest/azure/auth v0.5.13 // indirect
|
||||
github.com/Azure/go-autorest/autorest/azure/cli v0.4.7 // indirect
|
||||
github.com/Azure/go-autorest/autorest/date v0.3.1 // indirect
|
||||
github.com/Azure/go-autorest/logger v0.2.2 // indirect
|
||||
github.com/Azure/go-autorest/tracing v0.6.1 // indirect
|
||||
github.com/ProtonMail/go-crypto v1.2.0 // indirect
|
||||
github.com/Azure/go-autorest/autorest v0.11.29 // indirect
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect
|
||||
github.com/Azure/go-autorest/autorest/azure/auth v0.5.12 // indirect
|
||||
github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 // indirect
|
||||
github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect
|
||||
github.com/Azure/go-autorest/logger v0.2.1 // indirect
|
||||
github.com/Azure/go-autorest/tracing v0.6.0 // indirect
|
||||
github.com/ProtonMail/go-crypto v1.0.0 // indirect
|
||||
github.com/agext/levenshtein v1.2.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.14 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.67 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.44.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 // indirect
|
||||
github.com/aws/smithy-go v1.22.3 // indirect
|
||||
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.9.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2 v1.30.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.27.24 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.24 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.9 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.13 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.13 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.27.4 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.23.4 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.15 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.22.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.30.1 // indirect
|
||||
github.com/aws/smithy-go v1.20.3 // indirect
|
||||
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20240419161514-af205d85bb44 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 // indirect
|
||||
github.com/cloudflare/circl v1.6.1 // indirect
|
||||
github.com/containerd/errdefs/pkg v0.3.0 // indirect
|
||||
github.com/cloudflare/circl v1.3.7 // indirect
|
||||
github.com/containerd/log v0.1.0 // indirect
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect
|
||||
github.com/containerd/typeurl/v2 v2.2.3 // indirect
|
||||
github.com/cyphar/filepath-securejoin v0.4.1 // indirect
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect
|
||||
github.com/containerd/typeurl/v2 v2.1.1 // indirect
|
||||
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
|
||||
github.com/dimchansky/utfbom v1.1.1 // indirect
|
||||
github.com/distribution/reference v0.6.0 // indirect
|
||||
github.com/docker/distribution v2.8.3+incompatible // indirect
|
||||
github.com/docker/docker-credential-helpers v0.9.3 // indirect
|
||||
github.com/docker/docker-credential-helpers v0.8.1 // indirect
|
||||
github.com/docker/go-metrics v0.0.1 // indirect
|
||||
github.com/docker/go-units v0.5.0 // indirect
|
||||
github.com/emirpasic/gods v1.18.1 // indirect
|
||||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||
github.com/gdamore/encoding v1.0.1 // indirect
|
||||
github.com/gdamore/encoding v1.0.0 // indirect
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
|
||||
github.com/go-git/go-billy/v5 v5.6.2 // indirect
|
||||
github.com/go-logr/logr v1.4.3 // indirect
|
||||
github.com/go-git/go-billy/v5 v5.5.0 // indirect
|
||||
github.com/go-logr/logr v1.4.2 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-viper/mapstructure/v2 v2.3.0 // indirect
|
||||
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
|
||||
github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/google/go-querystring v1.1.0 // indirect
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/gorilla/mux v1.8.1 // indirect
|
||||
github.com/gorilla/mux v1.8.0 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/kevinburke/ssh_config v1.2.0 // indirect
|
||||
github.com/klauspost/compress v1.18.0 // indirect
|
||||
github.com/klauspost/compress v1.17.4 // indirect
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.16 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.15 // indirect
|
||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||
github.com/moby/buildkit v0.22.0 // indirect
|
||||
github.com/moby/buildkit v0.14.1 // indirect
|
||||
github.com/moby/docker-image-spec v1.3.1 // indirect
|
||||
github.com/moby/patternmatcher v0.6.0 // indirect
|
||||
github.com/moby/sys/atomicwriter v0.1.0 // indirect
|
||||
github.com/moby/sys/sequential v0.6.0 // indirect
|
||||
github.com/moby/sys/user v0.4.0 // indirect
|
||||
github.com/moby/sys/sequential v0.5.0 // indirect
|
||||
github.com/moby/sys/user v0.3.0 // indirect
|
||||
github.com/moby/sys/userns v0.1.0 // indirect
|
||||
github.com/moby/term v0.5.2 // indirect
|
||||
github.com/moby/term v0.5.0 // indirect
|
||||
github.com/morikuni/aec v1.0.0 // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/opencontainers/selinux v1.12.0 // indirect
|
||||
github.com/pjbgf/sha1cd v0.3.2 // indirect
|
||||
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
|
||||
github.com/prometheus/client_golang v1.22.0 // indirect
|
||||
github.com/prometheus/client_model v0.6.2 // indirect
|
||||
github.com/prometheus/common v0.64.0 // indirect
|
||||
github.com/prometheus/procfs v0.16.1 // indirect
|
||||
github.com/opencontainers/selinux v1.11.0 // indirect
|
||||
github.com/pjbgf/sha1cd v0.3.0 // indirect
|
||||
github.com/prometheus/client_golang v1.19.0 // indirect
|
||||
github.com/prometheus/client_model v0.5.0 // indirect
|
||||
github.com/prometheus/common v0.48.0 // indirect
|
||||
github.com/prometheus/procfs v0.12.0 // indirect
|
||||
github.com/rivo/uniseg v0.4.3 // indirect
|
||||
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
|
||||
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||
github.com/skeema/knownhosts v1.3.1 // indirect
|
||||
github.com/spf13/pflag v1.0.6 // indirect
|
||||
github.com/tonistiigi/go-csvvalue v0.0.0-20240814133006-030d3b2625d0 // indirect
|
||||
github.com/vbatts/tar-split v0.12.1 // indirect
|
||||
github.com/skeema/knownhosts v1.2.2 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/vbatts/tar-split v0.11.5 // indirect
|
||||
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
|
||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
||||
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
|
||||
go.opentelemetry.io/otel v1.36.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.36.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.36.0 // indirect
|
||||
golang.org/x/net v0.42.0 // indirect
|
||||
google.golang.org/protobuf v1.36.6 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 // indirect
|
||||
go.opentelemetry.io/otel v1.25.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.25.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.25.0 // indirect
|
||||
golang.org/x/net v0.30.0 // indirect
|
||||
google.golang.org/protobuf v1.35.1 // indirect
|
||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
||||
|
||||
replace github.com/BurntSushi/toml => github.com/BurntSushi/toml v1.3.2
|
||||
|
||||
go 1.24.4
|
||||
go 1.23
|
||||
|
|
471
go.sum
471
go.sum
|
@ -1,48 +1,45 @@
|
|||
dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8=
|
||||
dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
|
||||
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
|
||||
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
|
||||
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU=
|
||||
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
|
||||
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
|
||||
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
|
||||
github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA=
|
||||
github.com/Azure/go-autorest/autorest v0.11.30 h1:iaZ1RGz/ALZtN5eq4Nr1SOFSlf2E4pDI3Tcsl+dZPVE=
|
||||
github.com/Azure/go-autorest/autorest v0.11.30/go.mod h1:t1kpPIOpIVX7annvothKvb0stsrXa37i7b+xpmBW8Fs=
|
||||
github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc=
|
||||
github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw=
|
||||
github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.24 h1:BHZfgGsGwdkHDyZdtQRQk1WeUdW0m2WPAwuHZwUi5i4=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.24/go.mod h1:7T1+g0PYFmACYW5LlG2fcoPiPlFHjClyRGL7dRlP5c8=
|
||||
github.com/Azure/go-autorest/autorest/azure/auth v0.5.13 h1:Ov8avRZi2vmrE2JcXw+tu5K/yB41r7xK9GZDiBF7NdM=
|
||||
github.com/Azure/go-autorest/autorest/azure/auth v0.5.13/go.mod h1:5BAVfWLWXihP47vYrPuBKKf4cS0bXI+KM9Qx6ETDJYo=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c=
|
||||
github.com/Azure/go-autorest/autorest/azure/auth v0.5.12 h1:wkAZRgT/pn8HhFyzfe9UnqOjJYqlembgCTi72Bm/xKk=
|
||||
github.com/Azure/go-autorest/autorest/azure/auth v0.5.12/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg=
|
||||
github.com/Azure/go-autorest/autorest/azure/cli v0.4.5/go.mod h1:ADQAXrkgm7acgWVUNamOgh8YNrv4p27l3Wc55oVfpzg=
|
||||
github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 h1:w77/uPk80ZET2F+AfQExZyEWtn+0Rk/uw17m9fv5Ajc=
|
||||
github.com/Azure/go-autorest/autorest/azure/cli v0.4.6/go.mod h1:piCfgPho7BiIDdEQ1+g4VmKyD5y+p/XtSNqE6Hc4QD0=
|
||||
github.com/Azure/go-autorest/autorest/azure/cli v0.4.7 h1:Q9R3utmFg9K1B4OYtAZ7ZUUvIUdzQt7G2MN5Hi/d670=
|
||||
github.com/Azure/go-autorest/autorest/azure/cli v0.4.7/go.mod h1:bVrAueELJ0CKLBpUHDIvD516TwmHmzqwCpvONWRsw3s=
|
||||
github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
|
||||
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
|
||||
github.com/Azure/go-autorest/autorest/date v0.3.1 h1:o9Z8Jyt+VJJTCZ/UORishuHOusBwolhjokt9s5k8I4w=
|
||||
github.com/Azure/go-autorest/autorest/date v0.3.1/go.mod h1:Dz/RDmXlfiFFS/eW+b/xMUSFs1tboPVy6UjgADToWDM=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU=
|
||||
github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg=
|
||||
github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
|
||||
github.com/Azure/go-autorest/logger v0.2.2 h1:hYqBsEBywrrOSW24kkOCXRcKfKhK76OzLTfF+MYDE2o=
|
||||
github.com/Azure/go-autorest/logger v0.2.2/go.mod h1:I5fg9K52o+iuydlWfa9T5K6WFos9XYr9dYTFzpqgibw=
|
||||
github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
|
||||
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
|
||||
github.com/Azure/go-autorest/tracing v0.6.1 h1:YUMSrC/CeD1ZnnXcNYU4a/fzsO35u2Fsful9L/2nyR0=
|
||||
github.com/Azure/go-autorest/tracing v0.6.1/go.mod h1:/3EgjbsjraOqiicERAeu3m7/z0x1TzjQGAwDrJrXGkc=
|
||||
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
|
||||
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||
github.com/GoogleContainerTools/kaniko v1.24.0 h1:PgzzuOwaraxC7UMw0F0YoxNHi+a6YeiAbDgc2GHrk+M=
|
||||
github.com/GoogleContainerTools/kaniko v1.24.0/go.mod h1:hO9q9uGMwrItm4wGcX7E0cMJIw84NM6gPETIt6vkwAk=
|
||||
github.com/GoogleContainerTools/kaniko v1.23.2 h1:/gu6xNhod6IfrZp9Pwlo9gDlqwu7YUsTec6TZTgOw6Q=
|
||||
github.com/GoogleContainerTools/kaniko v1.23.2/go.mod h1:jmMu5xcyuxDmDT2waMc8MSnSFBVRHHupp+0T12Oddsc=
|
||||
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
|
||||
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
||||
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
|
||||
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
|
||||
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
|
||||
github.com/ProtonMail/go-crypto v1.2.0 h1:+PhXXn4SPGd+qk76TlEePBfOfivE0zkWFenhGhFLzWs=
|
||||
github.com/ProtonMail/go-crypto v1.2.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
|
||||
github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78=
|
||||
github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
|
||||
github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
|
||||
github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
|
||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
|
@ -57,70 +54,68 @@ github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3st
|
|||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
|
||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
|
||||
github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM=
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.14 h1:f+eEi/2cKCg9pqKBoAIwRGzVb70MRKqWX4dg1BDcSJM=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.14/go.mod h1:wVPHWcIFv3WO89w0rE10gzf17ZYy+UVS1Geq8Iei34g=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.67 h1:9KxtdcIA/5xPNQyZRgUSpYOE6j9Bc4+D7nZua0KGYOM=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.67/go.mod h1:p3C44m+cfnbv763s52gCqrjaqyPikj9Sg47kUVaNZQQ=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34/go.mod h1:dFZsC0BLo346mvKQLWmoJxT+Sjp+qcVR1tRVHQGOH9Q=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.44.0 h1:E+UTVTDH6XTSjqxHWRuY8nB6s+05UllneWxnycplHFk=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.44.0/go.mod h1:iQ1skgw1XRK+6Lgkb0I9ODatAP72WoTILh0zXQ5DtbU=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.0 h1:wA2O6pZ2r5smqJunFP4hp7qptMW4EQxs8O6RVHPulOE=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.0/go.mod h1:RZL7ov7c72wSmoM8bIiVxRHgcVdzhNkVW2J36C8RF4s=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 h1:1XuUZ8mYJw9B6lzAkXhqHlJd/XvaX32evhproijJEZY=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.19/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4=
|
||||
github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k=
|
||||
github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
|
||||
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.9.1 h1:50sS0RWhGpW/yZx2KcDNEb1u1MANv5BMEkJgcieEDTA=
|
||||
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.9.1/go.mod h1:ErZOtbzuHabipRTDTor0inoRlYwbsV1ovwSxjGs/uJo=
|
||||
github.com/aws/aws-sdk-go-v2 v1.30.1 h1:4y/5Dvfrhd1MxRDD77SrfsDaj8kUkkljU7XE83NPV+o=
|
||||
github.com/aws/aws-sdk-go-v2 v1.30.1/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.27.24 h1:NM9XicZ5o1CBU/MZaHwFtimRpWx9ohAUAqkG6AqSqPo=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.27.24/go.mod h1:aXzi6QJTuQRVVusAO8/NxpdTeTyr/wRcybdDtfUwJSs=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.24 h1:YclAsrnb1/GTQNt2nzv+756Iw4mF8AOzcDfweWwwm/M=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.24/go.mod h1:Hld7tmnAkoBQdTMNYZGzztzKRdA4fCdn9L83LOoigac=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.9 h1:Aznqksmd6Rfv2HQN9cpqIV/lQRMaIpJkLLaJ1ZI76no=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.9/go.mod h1:WQr3MY7AxGNxaqAtsDWn+fBxmd4XvLkzeqQ8P1VM0/w=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.13 h1:5SAoZ4jYpGH4721ZNoS1znQrhOfZinOhc4XuTXx/nVc=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.13/go.mod h1:+rdA6ZLpaSeM7tSg/B0IEDinCIBJGmW8rKDFkYpP04g=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.13 h1:WIijqeaAO7TYFLbhsZmi2rgLEAtWOC1LhxCAVTJlSKw=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.13/go.mod h1:i+kbfa76PQbWw/ULoWnp51EYVWH4ENln76fLQE3lXT8=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.27.4 h1:Qr9W21mzWT3RhfYn9iAux7CeRIdbnTAqmiOlASqQgZI=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.27.4/go.mod h1:if7ybzzjOmDB8pat9FE35AHTY6ZxlYSy3YviSmFZv8c=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.23.4 h1:aNuiieMaS2IHxqAsTdM/pjHyY1aoaDLBGLqpNnFMMqk=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.23.4/go.mod h1:8pvvNAklmq+hKmqyvFoMRg0bwg9sdGOvdwximmKiKP0=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3/go.mod h1:GlAeCkHwugxdHaueRr4nhPuY+WW+gR8UjlcqzPr1SPI=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.15 h1:I9zMeF107l0rJrpnHpjEiiTSCKYAIw8mALiXcPsGBiA=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.15/go.mod h1:9xWJ3Q/S6Ojusz1UIkfycgD1mGirJfLLKqq3LPT7WN8=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.22.1 h1:p1GahKIjyMDZtiKoIn0/jAj/TkMzfzndDv5+zi2Mhgc=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.22.1/go.mod h1:/vWdhoIoYA5hYoPZ6fm7Sv4d8701PiG5VKe8/pPJL60=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.2 h1:ORnrOK0C4WmYV/uYt3koHEWBLYsRDwk2Np+eEoyV4Z0=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.2/go.mod h1:xyFHA4zGxgYkdD73VeezHt3vSKEG9EmFnGwoKlP00u4=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.30.1 h1:+woJ607dllHJQtsnJLi52ycuqHMwlW+Wqm2Ppsfp4nQ=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.30.1/go.mod h1:jiNR3JqT15Dm+QWq2SRgh0x0bCNSRP2L25+CqPNpJlQ=
|
||||
github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE=
|
||||
github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
|
||||
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20240419161514-af205d85bb44 h1:oNDkocd5/+6jUuxyz07jQWnKhgpNtKQoZSXKMb7emqQ=
|
||||
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20240419161514-af205d85bb44/go.mod h1:2nlYPkG0rFrODp6R875pk/kOnB8Ivj3+onhzk2mO57g=
|
||||
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/buildpacks/imgutil v0.0.0-20250814164739-4b1c8875ba7e h1:a+vpYYeK7E7+3uGqseiRutzKA7yNNjAOPON9+VOADiw=
|
||||
github.com/buildpacks/imgutil v0.0.0-20250814164739-4b1c8875ba7e/go.mod h1:UH4th60x/wM1DdH7+eSgzbp0kgsJMhVgngWzXoF21cs=
|
||||
github.com/buildpacks/lifecycle v0.20.11 h1:lr8smVyW59HvkdJj7H3rYbfiNT7ndkV4cV2lQiOnCuo=
|
||||
github.com/buildpacks/lifecycle v0.20.11/go.mod h1:+YlGlTCwJcyJSp5QvZKxH8k2JOpYzjTE9NYB6CA5CuE=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/buildpacks/imgutil v0.0.0-20240605145725-186f89b2d168 h1:yVYVi1V7x1bXklOx9lpbTfteyzQKGZC/wkl+IlaVRlU=
|
||||
github.com/buildpacks/imgutil v0.0.0-20240605145725-186f89b2d168/go.mod h1:n2R6VRuWsAX3cyHCp/u0Z4WJcixny0gYg075J39owrk=
|
||||
github.com/buildpacks/lifecycle v0.20.4 h1:VVVTrd9y1LHY3adchh6oktw0wKQuYsWLq3/g23TLaGQ=
|
||||
github.com/buildpacks/lifecycle v0.20.4/go.mod h1:ZsExeEhN+6Qws7iDHJl6PV6zsHycgK/RmDKnRgKQTH0=
|
||||
github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
|
||||
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
|
||||
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 h1:krfRl01rzPzxSxyLyrChD+U+MzsBXbm0OwYYB67uF+4=
|
||||
github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589/go.mod h1:OuDyvmLnMCwa2ep4Jkm6nyA0ocJuZlGyk2gGseVzERM=
|
||||
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
|
||||
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
|
||||
github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
|
||||
github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
|
||||
github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE=
|
||||
github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
|
||||
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
|
||||
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
|
||||
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
|
||||
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
|
||||
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8=
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU=
|
||||
github.com/containerd/typeurl/v2 v2.2.3 h1:yNA/94zxWdvYACdYO8zofhrTVuQY73fFU1y++dYSw40=
|
||||
github.com/containerd/typeurl/v2 v2.2.3/go.mod h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU=
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk=
|
||||
github.com/containerd/typeurl/v2 v2.1.1 h1:3Q4Pt7i8nYwy2KmQWIw2+1hTvwTE/6w9FqcttATPO/4=
|
||||
github.com/containerd/typeurl/v2 v2.1.1/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
|
||||
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
|
||||
github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
|
||||
github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
|
||||
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
|
||||
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
|
@ -128,16 +123,16 @@ github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi
|
|||
github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE=
|
||||
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
|
||||
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
|
||||
github.com/docker/cli v28.3.3+incompatible h1:fp9ZHAr1WWPGdIWBM1b3zLtgCF+83gRdVMTJsUeiyAo=
|
||||
github.com/docker/cli v28.3.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
||||
github.com/docker/cli v27.4.0+incompatible h1:/nJzWkcI1MDMN+U+px/YXnQWJqnu4J+QKGTfD6ptiTc=
|
||||
github.com/docker/cli v27.4.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
||||
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
|
||||
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/docker v28.3.3+incompatible h1:Dypm25kh4rmk49v1eiVbsAtpAsYURjYkaKubwuBdxEI=
|
||||
github.com/docker/docker v28.3.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8=
|
||||
github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo=
|
||||
github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94=
|
||||
github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE=
|
||||
github.com/docker/docker v27.4.0+incompatible h1:I9z7sQ5qyzO0BfAb9IMOawRkAGxhYsidKiTMcm0DU+A=
|
||||
github.com/docker/docker v27.4.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker-credential-helpers v0.8.1 h1:j/eKUktUltBtMzKqmfLB0PAgqYyMHOp5vfsD1807oKo=
|
||||
github.com/docker/docker-credential-helpers v0.8.1/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
|
||||
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
|
||||
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
|
||||
github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8=
|
||||
github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
|
||||
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
||||
|
@ -146,82 +141,82 @@ github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU
|
|||
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
|
||||
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o=
|
||||
github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE=
|
||||
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU=
|
||||
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
|
||||
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
|
||||
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
|
||||
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
|
||||
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
|
||||
github.com/gdamore/encoding v1.0.1 h1:YzKZckdBL6jVt2Gc+5p82qhrGiqMdG/eNs6Wy0u3Uhw=
|
||||
github.com/gdamore/encoding v1.0.1/go.mod h1:0Z0cMFinngz9kS1QfMjCP8TY7em3bZYeeklsSDPivEo=
|
||||
github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04=
|
||||
github.com/gdamore/tcell/v2 v2.8.1 h1:KPNxyqclpWpWQlPLx6Xui1pMk8S+7+R37h3g07997NU=
|
||||
github.com/gdamore/tcell/v2 v2.8.1/go.mod h1:bj8ori1BG3OYMjmb3IklZVWfZUJ1UBQt9JXrOCOhGWw=
|
||||
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
|
||||
github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
|
||||
github.com/gdamore/tcell/v2 v2.7.4 h1:sg6/UnTM9jGpZU+oFYAsDahfchWAFW8Xx2yFinNSAYU=
|
||||
github.com/gdamore/tcell/v2 v2.7.4/go.mod h1:dSXtXTSK0VsW1biw65DZLZ2NKr7j0qP/0J7ONmsraWg=
|
||||
github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE=
|
||||
github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8=
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
|
||||
github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
|
||||
github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
|
||||
github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
|
||||
github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
|
||||
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
|
||||
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
|
||||
github.com/go-git/go-git/v5 v5.16.2 h1:fT6ZIOjE5iEnkzKyxTHK1W4HGAsPhqEqiSAssSO77hM=
|
||||
github.com/go-git/go-git/v5 v5.16.2/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
|
||||
github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys=
|
||||
github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY=
|
||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
|
||||
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
|
||||
github.com/go-viper/mapstructure/v2 v2.3.0 h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk=
|
||||
github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
||||
github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
|
||||
github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
|
||||
github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
|
||||
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||
github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI=
|
||||
github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
|
||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
|
||||
github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
|
||||
github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
|
||||
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/go-containerregistry v0.20.6 h1:cvWX87UxxLgaH76b4hIvya6Dzz9qHB31qAwjAohdSTU=
|
||||
github.com/google/go-containerregistry v0.20.6/go.mod h1:T0x8MuoAoKX/873bkeSfLD2FAkwCDf9/HZgsFJ02E2Y=
|
||||
github.com/google/go-containerregistry v0.20.2 h1:B1wPJ1SN/S7pB+ZAimcciVD+r+yV/l/DSArMxlbwseo=
|
||||
github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEvalZBqs6AoLeWfUy34nQC8=
|
||||
github.com/google/go-github/v30 v30.1.0 h1:VLDx+UolQICEOKu2m4uAoMti1SxuEBAl7RSEG16L+Oo=
|
||||
github.com/google/go-github/v30 v30.1.0/go.mod h1:n8jBpHl45a/rlBUtRJMOG4GhNADUQFEufcolZ95JfU8=
|
||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
|
||||
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8=
|
||||
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
|
||||
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA=
|
||||
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
|
||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
|
||||
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg=
|
||||
github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ=
|
||||
github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E=
|
||||
github.com/heroku/color v0.0.6 h1:UTFFMrmMLFcL3OweqP1lAdp8i1y/9oHqkeHjQ/b/Ny0=
|
||||
|
@ -232,6 +227,10 @@ github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf
|
|||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
|
||||
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0=
|
||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
|
@ -240,8 +239,8 @@ github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4
|
|||
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||
github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
|
||||
github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
|
@ -252,8 +251,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
||||
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
|
||||
|
@ -266,92 +263,84 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
|
|||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
|
||||
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
|
||||
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/ioprogress v0.0.0-20180201004757-6a23b12fa88e h1:Qa6dnn8DlasdXRnacluu8HzPts0S1I9zvvUPDbBnXFI=
|
||||
github.com/mitchellh/ioprogress v0.0.0-20180201004757-6a23b12fa88e/go.mod h1:waEya8ee1Ro/lgxpVhkJI4BVASzkm3UZqkx/cFJiYHM=
|
||||
github.com/moby/buildkit v0.22.0 h1:aWN06w1YGSVN1XfeZbj2ZbgY+zi5xDAjEFI8Cy9fTjA=
|
||||
github.com/moby/buildkit v0.22.0/go.mod h1:j4pP5hxiTWcz7xuTK2cyxQislHl/N2WWHzOy43DlLJw=
|
||||
github.com/moby/buildkit v0.14.1 h1:2epLCZTkn4CikdImtsLtIa++7DzCimrrZCT1sway+oI=
|
||||
github.com/moby/buildkit v0.14.1/go.mod h1:1XssG7cAqv5Bz1xcGMxJL123iCv5TYN4Z/qf647gfuk=
|
||||
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
|
||||
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
|
||||
github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ=
|
||||
github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo=
|
||||
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
|
||||
github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
|
||||
github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw=
|
||||
github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs=
|
||||
github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU=
|
||||
github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
|
||||
github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs=
|
||||
github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
|
||||
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
|
||||
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
|
||||
github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=
|
||||
github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
|
||||
github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
|
||||
github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
|
||||
github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
|
||||
github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
|
||||
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
|
||||
github.com/moby/term v0.5.0/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/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
||||
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus=
|
||||
github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8=
|
||||
github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo=
|
||||
github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI=
|
||||
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.38.0 h1:c/WX+w8SLAinvuKKQFh77WEucCnPk4j2OTUr7lt7BeY=
|
||||
github.com/onsi/gomega v1.38.0/go.mod h1:OcXcwId0b9QsE7Y49u+BTrL4IdKOBOKnD6VQNTJEB6o=
|
||||
github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw=
|
||||
github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
|
||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
|
||||
github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
|
||||
github.com/opencontainers/selinux v1.12.0 h1:6n5JV4Cf+4y0KNXW48TLj5DwfXpvWlxXplUkdTrmPb8=
|
||||
github.com/opencontainers/selinux v1.12.0/go.mod h1:BTPX+bjVbWGXw7ZZWUbdENt8w0htPSrlgOOysQaU62U=
|
||||
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
|
||||
github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
|
||||
github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU=
|
||||
github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec=
|
||||
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
|
||||
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
||||
github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
|
||||
github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
|
||||
github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
|
||||
github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
|
||||
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
||||
github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q=
|
||||
github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0=
|
||||
github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
|
||||
github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
|
||||
github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
|
||||
github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
|
||||
github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
|
||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
|
||||
github.com/prometheus/common v0.64.0 h1:pdZeA+g617P7oGv1CzdTzyeShxAGrTBsolKNOLQPGO4=
|
||||
github.com/prometheus/common v0.64.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8=
|
||||
github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
|
||||
github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||
github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
|
||||
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
|
||||
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
|
||||
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
|
||||
github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 h1:xe+mmCnDN82KhC010l3NfYlA8ZbOuzbXAzSYBa6wbMc=
|
||||
github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw=
|
||||
github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
||||
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
||||
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI=
|
||||
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs=
|
||||
|
@ -364,15 +353,15 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx
|
|||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
|
||||
github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
|
||||
github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A=
|
||||
github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo=
|
||||
github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
|
||||
github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
|
||||
github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs=
|
||||
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
|
||||
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
|
||||
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
||||
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
||||
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
|
@ -385,8 +374,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0=
|
||||
github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk=
|
||||
github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk=
|
||||
|
@ -394,10 +383,8 @@ github.com/tj/go-buffer v1.1.0/go.mod h1:iyiJpfFcR2B9sXu7KvjbT9fpM4mOelRSDTbntVj
|
|||
github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0=
|
||||
github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao=
|
||||
github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4=
|
||||
github.com/tonistiigi/go-csvvalue v0.0.0-20240814133006-030d3b2625d0 h1:2f304B10LaZdB8kkVEaoXvAMVan2tl9AiK4G0odjQtE=
|
||||
github.com/tonistiigi/go-csvvalue v0.0.0-20240814133006-030d3b2625d0/go.mod h1:278M4p8WsNh3n4a1eqiFcV2FGk7wE5fwUpUom9mK9lE=
|
||||
github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo=
|
||||
github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA=
|
||||
github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts=
|
||||
github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk=
|
||||
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
|
||||
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=
|
||||
|
@ -410,52 +397,43 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
|||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
|
||||
go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
|
||||
go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0/go.mod h1:cpgtDBaqD/6ok/UG0jT15/uKjAY8mRA53diogHBg3UI=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0=
|
||||
go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
|
||||
go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
|
||||
go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
|
||||
go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
|
||||
go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
|
||||
go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
|
||||
go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg=
|
||||
go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY=
|
||||
go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
|
||||
go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 h1:cEPbyTSEHlQR89XVlyo78gqluF8Y3oMeBkXGWzQsfXY=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0/go.mod h1:DKdbWcT4GH1D0Y3Sqt/PFXt2naRKDWtU+eE6oLdFNA8=
|
||||
go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
|
||||
go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0 h1:cl5P5/GIfFh4t6xyruOgJP5QiA1pw4fYYdv6nc6CBWw=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0/go.mod h1:zgBdWWAu7oEEMC06MMKc5NLbA/1YDXV1sMpSqEeLQLg=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
|
||||
go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
|
||||
go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
|
||||
go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
|
||||
go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
|
||||
go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
|
||||
go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
|
||||
go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
|
||||
go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
|
||||
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
||||
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
|
||||
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
|
||||
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
|
||||
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
|
||||
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
|
||||
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
|
||||
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
|
||||
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
|
||||
golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
|
||||
golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
|
@ -468,16 +446,14 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
|||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
|
||||
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
|
||||
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
|
||||
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
|
||||
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||
golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
|
||||
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
|
||||
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
|
||||
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
|
||||
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||
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=
|
||||
|
@ -487,12 +463,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
|
|||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
||||
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
|
||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
|
||||
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
|
@ -515,45 +487,36 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
|
||||
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
|
||||
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
|
||||
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
|
||||
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
|
||||
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
|
||||
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
|
||||
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
|
||||
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
|
||||
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
|
||||
golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
|
||||
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
|
||||
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
|
||||
golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=
|
||||
golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
|
||||
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
|
||||
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
|
@ -561,24 +524,24 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
|
|||
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
|
||||
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
|
||||
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
|
||||
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
|
||||
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
|
||||
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/genproto v0.0.0-20250519155744-55703ea1f237 h1:2zGWyk04EwQ3mmV4dd4M4U7P/igHi5p7CBJEg1rI6A8=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237 h1:Kog3KlB4xevJlAcbbbzPfRG0+X9fdoGM+UBRKVz6Wr0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237/go.mod h1:ezi0AVyMKDWy5xAncvjLWH7UcLBB5n7y2fQ8MzjJcto=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 h1:cJfm9zPbe1e873mHJzmQ1nwVEeRDU/T1wXDK2kUSU34=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
|
||||
google.golang.org/grpc v1.72.1 h1:HR03wO6eyZ7lknl75XlxABNVLLFc2PAb6mHlYh756mA=
|
||||
google.golang.org/grpc v1.72.1/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
|
||||
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||
google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d h1:PksQg4dV6Sem3/HkBX+Ltq8T0ke0PKIRBNBatoDTVls=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4 h1:MuYw1wJzT+ZkybKfaOXKp5hJiZDn2iHaXRw0mRYdHSc=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4/go.mod h1:px9SlOOZBg1wM1zdnr8jEL4CNGUBZ+ZKYtNPApNQc4c=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d h1:k3zyW3BYYR30e8v3x0bTDdE9vpYFjZHK+HcyqkrppWk=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY=
|
||||
google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA=
|
||||
google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
|
||||
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
@ -590,10 +553,12 @@ gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
|
|||
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/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/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
|
||||
gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
|
||||
gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o=
|
||||
gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g=
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
version: "2"
|
||||
run:
|
||||
timeout: 6m
|
||||
|
||||
linters:
|
||||
default: none
|
||||
disable-all: true
|
||||
enable:
|
||||
- bodyclose
|
||||
- exportloopref
|
||||
- dogsled
|
||||
- gocritic
|
||||
- goimports
|
||||
- gosimple
|
||||
- govet
|
||||
- ineffassign
|
||||
- misspell
|
||||
|
@ -12,40 +17,16 @@ linters:
|
|||
- revive
|
||||
- rowserrcheck
|
||||
- staticcheck
|
||||
- stylecheck
|
||||
- typecheck
|
||||
- unconvert
|
||||
- unused
|
||||
- whitespace
|
||||
settings:
|
||||
revive:
|
||||
rules:
|
||||
- name: error-strings
|
||||
disabled: true
|
||||
exclusions:
|
||||
generated: lax
|
||||
presets:
|
||||
- comments
|
||||
- common-false-positives
|
||||
- legacy
|
||||
- std-error-handling
|
||||
paths:
|
||||
- third_party$
|
||||
- builtin$
|
||||
- examples$
|
||||
formatters:
|
||||
enable:
|
||||
- goimports
|
||||
settings:
|
||||
goimports:
|
||||
local-prefixes:
|
||||
- github.com/buildpacks/pack
|
||||
exclusions:
|
||||
generated: lax
|
||||
paths:
|
||||
- third_party$
|
||||
- builtin$
|
||||
- examples$
|
||||
issues:
|
||||
default: info
|
||||
rules:
|
||||
- linters:
|
||||
- staticcheck: info
|
||||
|
||||
linters-settings:
|
||||
goimports:
|
||||
local-prefixes: github.com/buildpacks/pack
|
||||
revive:
|
||||
rules:
|
||||
- name: error-strings
|
||||
disabled: true
|
||||
|
|
|
@ -10,13 +10,12 @@ import (
|
|||
|
||||
"github.com/BurntSushi/toml"
|
||||
"github.com/buildpacks/lifecycle/platform/files"
|
||||
"github.com/docker/docker/api/types"
|
||||
dcontainer "github.com/docker/docker/api/types/container"
|
||||
|
||||
darchive "github.com/moby/go-archive"
|
||||
"github.com/docker/docker/errdefs"
|
||||
darchive "github.com/docker/docker/pkg/archive"
|
||||
"github.com/pkg/errors"
|
||||
|
||||
cerrdefs "github.com/containerd/errdefs"
|
||||
|
||||
"github.com/buildpacks/pack/internal/builder"
|
||||
"github.com/buildpacks/pack/internal/container"
|
||||
"github.com/buildpacks/pack/internal/paths"
|
||||
|
@ -52,7 +51,7 @@ func CopyOutMaybe(handler func(closer io.ReadCloser) error, srcs ...string) Cont
|
|||
for _, src := range srcs {
|
||||
reader, _, err := ctrClient.CopyFromContainer(ctx, containerID, src)
|
||||
if err != nil {
|
||||
if cerrdefs.IsNotFound(err) {
|
||||
if errdefs.IsNotFound(err) {
|
||||
continue
|
||||
}
|
||||
return err
|
||||
|
@ -199,13 +198,13 @@ func copyDirWindows(ctx context.Context, ctrClient DockerClient, containerID str
|
|||
)
|
||||
}
|
||||
|
||||
func findMount(info dcontainer.InspectResponse, dst string) (dcontainer.MountPoint, error) {
|
||||
func findMount(info types.ContainerJSON, dst string) (types.MountPoint, error) {
|
||||
for _, m := range info.Mounts {
|
||||
if m.Destination == dst {
|
||||
return m, nil
|
||||
}
|
||||
}
|
||||
return dcontainer.MountPoint{}, fmt.Errorf("no matching mount found for %s", dst)
|
||||
return types.MountPoint{}, fmt.Errorf("no matching mount found for %s", dst)
|
||||
}
|
||||
|
||||
func writeToml(ctrClient DockerClient, ctx context.Context, data interface{}, dstPath string, containerID string, os string, stdout, stderr io.Writer) error {
|
||||
|
|
|
@ -20,11 +20,11 @@ type DockerClient interface {
|
|||
ContainerStart(ctx context.Context, container string, options containertypes.StartOptions) error
|
||||
ContainerCreate(ctx context.Context, config *containertypes.Config, hostConfig *containertypes.HostConfig, networkingConfig *networktypes.NetworkingConfig, platform *specs.Platform, containerName string) (containertypes.CreateResponse, error)
|
||||
CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, containertypes.PathStat, error)
|
||||
ContainerInspect(ctx context.Context, container string) (containertypes.InspectResponse, error)
|
||||
ContainerInspect(ctx context.Context, container string) (types.ContainerJSON, error)
|
||||
ContainerRemove(ctx context.Context, container string, options containertypes.RemoveOptions) error
|
||||
CopyToContainer(ctx context.Context, container, path string, content io.Reader, options containertypes.CopyToContainerOptions) error
|
||||
NetworkCreate(ctx context.Context, name string, options networktypes.CreateOptions) (networktypes.CreateResponse, error)
|
||||
NetworkRemove(ctx context.Context, network string) error
|
||||
}
|
||||
|
||||
var _ DockerClient = dockerClient.APIClient(nil)
|
||||
var _ DockerClient = dockerClient.CommonAPIClient(nil)
|
||||
|
|
|
@ -117,17 +117,8 @@ func (b *FakeBuilder) RunImages() []builder.RunImageMetadata {
|
|||
return b.ReturnForRunImages
|
||||
}
|
||||
|
||||
func (b *FakeBuilder) System() dist.System { return dist.System{} }
|
||||
|
||||
func WithBuilder(builder *FakeBuilder) func(*build.LifecycleOptions) {
|
||||
return func(opts *build.LifecycleOptions) {
|
||||
opts.Builder = builder
|
||||
}
|
||||
}
|
||||
|
||||
// WithEnableUsernsHost creates a LifecycleOptions option that enables userns=host
|
||||
func WithEnableUsernsHost() func(*build.LifecycleOptions) {
|
||||
return func(opts *build.LifecycleOptions) {
|
||||
opts.EnableUsernsHost = true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -382,12 +382,6 @@ func (l *LifecycleExecution) Create(ctx context.Context, buildCache, launchCache
|
|||
flags = append(flags, "-uid", strconv.Itoa(l.opts.UID))
|
||||
}
|
||||
|
||||
if l.platformAPI.AtLeast("0.13") {
|
||||
for _, reg := range l.opts.InsecureRegistries {
|
||||
flags = append(flags, "-insecure-registry", reg)
|
||||
}
|
||||
}
|
||||
|
||||
if l.opts.PreviousImage != "" {
|
||||
if l.opts.Image == nil {
|
||||
return errors.New("image can't be nil")
|
||||
|
@ -545,12 +539,6 @@ func (l *LifecycleExecution) Restore(ctx context.Context, buildCache Cache, kani
|
|||
flags = append(flags, "-uid", strconv.Itoa(l.opts.UID))
|
||||
}
|
||||
|
||||
if l.platformAPI.AtLeast("0.13") {
|
||||
for _, reg := range l.opts.InsecureRegistries {
|
||||
flags = append(flags, "-insecure-registry", reg)
|
||||
}
|
||||
}
|
||||
|
||||
// for kaniko
|
||||
kanikoCacheBindOp := NullOp()
|
||||
if (l.platformAPI.AtLeast("0.10") && l.hasExtensionsForBuild()) ||
|
||||
|
@ -658,12 +646,6 @@ func (l *LifecycleExecution) Analyze(ctx context.Context, buildCache, launchCach
|
|||
flags = append(flags, "-uid", strconv.Itoa(l.opts.UID))
|
||||
}
|
||||
|
||||
if l.platformAPI.AtLeast("0.13") {
|
||||
for _, reg := range l.opts.InsecureRegistries {
|
||||
flags = append(flags, "-insecure-registry", reg)
|
||||
}
|
||||
}
|
||||
|
||||
if l.opts.PreviousImage != "" {
|
||||
if l.opts.Image == nil {
|
||||
return errors.New("image can't be nil")
|
||||
|
@ -873,12 +855,6 @@ func (l *LifecycleExecution) Export(ctx context.Context, buildCache, launchCache
|
|||
flags = append(flags, "-uid", strconv.Itoa(l.opts.UID))
|
||||
}
|
||||
|
||||
if l.platformAPI.AtLeast("0.13") {
|
||||
for _, reg := range l.opts.InsecureRegistries {
|
||||
flags = append(flags, "-insecure-registry", reg)
|
||||
}
|
||||
}
|
||||
|
||||
cacheBindOp := NullOp()
|
||||
switch buildCache.Type() {
|
||||
case cache.Image:
|
||||
|
|
|
@ -45,7 +45,6 @@ type Builder interface {
|
|||
RunImages() []builder.RunImageMetadata
|
||||
Image() imgutil.Image
|
||||
OrderExtensions() dist.Order
|
||||
System() dist.System
|
||||
}
|
||||
|
||||
type LifecycleExecutor struct {
|
||||
|
@ -94,7 +93,6 @@ type LifecycleOptions struct {
|
|||
Network string
|
||||
AdditionalTags []string
|
||||
Volumes []string
|
||||
InsecureRegistries []string
|
||||
DefaultProcessType string
|
||||
FileFilter func(string) bool
|
||||
Workspace string
|
||||
|
@ -105,7 +103,6 @@ type LifecycleOptions struct {
|
|||
SBOMDestinationDir string
|
||||
CreationTime *time.Time
|
||||
Keychain authn.Keychain
|
||||
EnableUsernsHost bool
|
||||
}
|
||||
|
||||
func NewLifecycleExecutor(logger logging.Logger, docker DockerClient) *LifecycleExecutor {
|
||||
|
|
|
@ -35,9 +35,7 @@ type PhaseConfigProvider struct {
|
|||
|
||||
func NewPhaseConfigProvider(name string, lifecycleExec *LifecycleExecution, ops ...PhaseConfigProviderOperation) *PhaseConfigProvider {
|
||||
hostConf := new(container.HostConfig)
|
||||
if lifecycleExec.opts.EnableUsernsHost {
|
||||
hostConf.UsernsMode = "host"
|
||||
}
|
||||
hostConf.UsernsMode = "host"
|
||||
if lifecycleExec.os != "windows" {
|
||||
hostConf.SecurityOpt = []string{"no-new-privileges=true"}
|
||||
}
|
||||
|
|
|
@ -59,24 +59,10 @@ func testPhaseConfigProvider(t *testing.T, when spec.G, it spec.S) {
|
|||
h.AssertSliceContainsMatch(t, phaseConfigProvider.HostConfig().Binds, "pack-app-.*:/workspace")
|
||||
|
||||
h.AssertEq(t, phaseConfigProvider.HostConfig().Isolation, container.IsolationEmpty)
|
||||
h.AssertEq(t, phaseConfigProvider.HostConfig().UsernsMode, container.UsernsMode(""))
|
||||
h.AssertEq(t, phaseConfigProvider.HostConfig().UsernsMode, container.UsernsMode("host"))
|
||||
h.AssertSliceContains(t, phaseConfigProvider.HostConfig().SecurityOpt, "no-new-privileges=true")
|
||||
})
|
||||
|
||||
when("userns-host is enabled", func() {
|
||||
it("sets user namespace mode to host", func() {
|
||||
expectedBuilderImage := ifakes.NewImage("some-builder-name", "", nil)
|
||||
fakeBuilder, err := fakes.NewFakeBuilder(fakes.WithImage(expectedBuilderImage))
|
||||
h.AssertNil(t, err)
|
||||
lifecycle := newTestLifecycleExec(t, false, "some-temp-dir", fakes.WithBuilder(fakeBuilder), fakes.WithEnableUsernsHost())
|
||||
expectedPhaseName := "some-name"
|
||||
|
||||
phaseConfigProvider := build.NewPhaseConfigProvider(expectedPhaseName, lifecycle)
|
||||
|
||||
h.AssertEq(t, phaseConfigProvider.HostConfig().UsernsMode, container.UsernsMode("host"))
|
||||
})
|
||||
})
|
||||
|
||||
when("building for Windows", func() {
|
||||
it("sets process isolation", func() {
|
||||
fakeBuilderImage := ifakes.NewImage("fake-builder", "", nil)
|
||||
|
|
|
@ -38,7 +38,7 @@ const phaseName = "phase"
|
|||
|
||||
var (
|
||||
repoName string
|
||||
ctrClient client.APIClient
|
||||
ctrClient client.CommonAPIClient
|
||||
)
|
||||
|
||||
// TestPhase is a integration test suite to ensure that the phase options are propagated to the container.
|
||||
|
@ -70,7 +70,7 @@ func testPhase(t *testing.T, when spec.G, it spec.S) {
|
|||
lifecycleExec *build.LifecycleExecution
|
||||
phaseFactory build.PhaseFactory
|
||||
outBuf, errBuf bytes.Buffer
|
||||
docker client.APIClient
|
||||
docker client.CommonAPIClient
|
||||
logger logging.Logger
|
||||
osType string
|
||||
)
|
||||
|
@ -508,7 +508,7 @@ func assertRunSucceeds(t *testing.T, phase build.RunnerCleaner, outBuf *bytes.Bu
|
|||
h.AssertNilE(t, phase.Cleanup())
|
||||
}
|
||||
|
||||
func CreateFakeLifecycleExecution(logger logging.Logger, docker client.APIClient, appDir string, repoName string, handler ...container.Handler) (*build.LifecycleExecution, error) {
|
||||
func CreateFakeLifecycleExecution(logger logging.Logger, docker client.CommonAPIClient, appDir string, repoName string, handler ...container.Handler) (*build.LifecycleExecution, error) {
|
||||
builderImage, err := local.NewImage(repoName, docker, local.FromBaseImage(repoName))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -42,7 +42,6 @@ const (
|
|||
|
||||
orderPath = "/cnb/order.toml"
|
||||
stackPath = "/cnb/stack.toml"
|
||||
systemPath = "/cnb/system.toml"
|
||||
runPath = "/cnb/run.toml"
|
||||
platformDir = "/platform"
|
||||
lifecycleDir = "/cnb/lifecycle"
|
||||
|
@ -85,7 +84,6 @@ type Builder struct {
|
|||
replaceOrder bool
|
||||
order dist.Order
|
||||
orderExtensions dist.Order
|
||||
system dist.System
|
||||
validateMixins bool
|
||||
saveProhibited bool
|
||||
}
|
||||
|
@ -95,10 +93,6 @@ type orderTOML struct {
|
|||
OrderExt dist.Order `toml:"order-extensions,omitempty"`
|
||||
}
|
||||
|
||||
type systemTOML struct {
|
||||
System dist.System `toml:"system"`
|
||||
}
|
||||
|
||||
// moduleWithDiffID is a Build Module which content was written on disk in a tar file and the content hash was calculated
|
||||
type moduleWithDiffID struct {
|
||||
tarPath string
|
||||
|
@ -147,11 +141,6 @@ func constructBuilder(img imgutil.Image, newName string, errOnMissingLabel bool,
|
|||
return nil, fmt.Errorf("builder %s missing label %s -- try recreating builder", style.Symbol(img.Name()), style.Symbol(metadataLabel))
|
||||
}
|
||||
|
||||
system := dist.System{}
|
||||
if _, err := dist.GetLabel(img, SystemLabel, &system); err != nil {
|
||||
return nil, errors.Wrapf(err, "getting label %s", SystemLabel)
|
||||
}
|
||||
|
||||
opts := &options{}
|
||||
for _, op := range ops {
|
||||
if err := op(opts); err != nil {
|
||||
|
@ -193,7 +182,6 @@ func constructBuilder(img imgutil.Image, newName string, errOnMissingLabel bool,
|
|||
additionalBuildpacks: buildpack.NewManagedCollectionV2(opts.toFlatten),
|
||||
additionalExtensions: buildpack.NewManagedCollectionV2(opts.toFlatten),
|
||||
saveProhibited: opts.saveProhibited,
|
||||
system: system,
|
||||
}
|
||||
|
||||
if err := addImgLabelsToBuildr(bldr); err != nil {
|
||||
|
@ -315,9 +303,6 @@ func (b *Builder) Stack() StackMetadata {
|
|||
return b.metadata.Stack
|
||||
}
|
||||
|
||||
// System returns the system buildpacks configuration
|
||||
func (b *Builder) System() dist.System { return b.system }
|
||||
|
||||
// RunImages returns all run image metadata
|
||||
func (b *Builder) RunImages() []RunImageMetadata {
|
||||
return append(b.metadata.RunImages, b.Stack().RunImage)
|
||||
|
@ -440,11 +425,6 @@ func (b *Builder) SetStack(stackConfig builder.StackConfig) {
|
|||
}
|
||||
}
|
||||
|
||||
// SetSystem sets the system buildpacks of the builder
|
||||
func (b *Builder) SetSystem(system dist.System) {
|
||||
b.system = system
|
||||
}
|
||||
|
||||
// SetRunImage sets the run image of the builder
|
||||
func (b *Builder) SetRunImage(runConfig builder.RunConfig) {
|
||||
var runImages []RunImageMetadata
|
||||
|
@ -463,7 +443,7 @@ func (b *Builder) SetValidateMixins(to bool) {
|
|||
}
|
||||
|
||||
// Save saves the builder
|
||||
func (b *Builder) Save(logger logging.Logger, creatorMetadata CreatorMetadata, additionalTags ...string) error {
|
||||
func (b *Builder) Save(logger logging.Logger, creatorMetadata CreatorMetadata) error {
|
||||
if b.saveProhibited {
|
||||
return fmt.Errorf("failed to save builder %s as saving is not allowed", b.Name())
|
||||
}
|
||||
|
@ -575,24 +555,6 @@ func (b *Builder) Save(logger logging.Logger, creatorMetadata CreatorMetadata, a
|
|||
}
|
||||
}
|
||||
|
||||
if len(b.system.Pre.Buildpacks) > 0 || len(b.system.Post.Buildpacks) > 0 {
|
||||
resolvedSystemBp, err := processSystem(b.metadata.Buildpacks, b.system, buildpack.KindBuildpack)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "processing system buildpacks")
|
||||
}
|
||||
|
||||
systemTar, err := b.systemLayer(resolvedSystemBp, tmpDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := b.image.AddLayer(systemTar); err != nil {
|
||||
return errors.Wrap(err, "adding system.tar layer")
|
||||
}
|
||||
if err := dist.SetLabel(b.image, SystemLabel, b.system); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
stackTar, err := b.stackLayer(tmpDir)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -652,10 +614,7 @@ func (b *Builder) Save(logger logging.Logger, creatorMetadata CreatorMetadata, a
|
|||
return errors.Wrap(err, "failed to set working dir")
|
||||
}
|
||||
|
||||
logger.Debugf("Builder creation completed, starting image save")
|
||||
err = b.image.Save(additionalTags...)
|
||||
logger.Debugf("Image save completed")
|
||||
return err
|
||||
return b.image.Save()
|
||||
}
|
||||
|
||||
// Helpers
|
||||
|
@ -807,36 +766,6 @@ func processOrder(modulesOnBuilder []dist.ModuleInfo, order dist.Order, kind str
|
|||
return resolved, nil
|
||||
}
|
||||
|
||||
func processSystem(modulesOnBuilder []dist.ModuleInfo, system dist.System, kind string) (dist.System, error) {
|
||||
resolved := dist.System{}
|
||||
|
||||
// Pre buildpacks
|
||||
for _, bp := range system.Pre.Buildpacks {
|
||||
var (
|
||||
ref dist.ModuleRef
|
||||
err error
|
||||
)
|
||||
if ref, err = resolveRef(modulesOnBuilder, bp, kind); err != nil {
|
||||
return dist.System{}, err
|
||||
}
|
||||
resolved.Pre.Buildpacks = append(resolved.Pre.Buildpacks, ref)
|
||||
}
|
||||
|
||||
// Post buildpacks
|
||||
for _, bp := range system.Post.Buildpacks {
|
||||
var (
|
||||
ref dist.ModuleRef
|
||||
err error
|
||||
)
|
||||
if ref, err = resolveRef(modulesOnBuilder, bp, kind); err != nil {
|
||||
return dist.System{}, err
|
||||
}
|
||||
resolved.Post.Buildpacks = append(resolved.Post.Buildpacks, ref)
|
||||
}
|
||||
|
||||
return resolved, nil
|
||||
}
|
||||
|
||||
func resolveRef(moduleList []dist.ModuleInfo, ref dist.ModuleRef, kind string) (dist.ModuleRef, error) {
|
||||
var matching []dist.ModuleInfo
|
||||
for _, bp := range moduleList {
|
||||
|
@ -1164,29 +1093,6 @@ func orderFileContents(order dist.Order, orderExt dist.Order) (string, error) {
|
|||
return buf.String(), nil
|
||||
}
|
||||
|
||||
func (b *Builder) systemLayer(system dist.System, dest string) (string, error) {
|
||||
contents, err := systemFileContents(system)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
layerTar := filepath.Join(dest, "system.tar")
|
||||
err = layer.CreateSingleFileTar(layerTar, systemPath, contents, b.layerWriterFactory)
|
||||
if err != nil {
|
||||
return "", errors.Wrapf(err, "failed to create system.toml layer tar")
|
||||
}
|
||||
|
||||
return layerTar, nil
|
||||
}
|
||||
|
||||
func systemFileContents(system dist.System) (string, error) {
|
||||
buf := &bytes.Buffer{}
|
||||
tomlData := systemTOML{System: system}
|
||||
if err := toml.NewEncoder(buf).Encode(tomlData); err != nil {
|
||||
return "", errors.Wrapf(err, "failed to marshal system.toml")
|
||||
}
|
||||
return buf.String(), nil
|
||||
}
|
||||
|
||||
func (b *Builder) stackLayer(dest string) (string, error) {
|
||||
buf := &bytes.Buffer{}
|
||||
var err error
|
||||
|
|
|
@ -10,7 +10,6 @@ import (
|
|||
"path"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"slices"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
|
@ -461,18 +460,6 @@ func testBuilder(t *testing.T, when spec.G, it spec.S) {
|
|||
h.AssertOnTarEntry(t, layerTar, "/cnb/order.toml", h.ContentEquals("some content"))
|
||||
})
|
||||
|
||||
it("adds additional tags as requested", func() {
|
||||
h.AssertNil(t, subject.Save(logger, builder.CreatorMetadata{}, "additional-tag-one", "additional-tag-two"))
|
||||
h.AssertEq(t, baseImage.IsSaved(), true)
|
||||
h.AssertEq(t, baseImage.Name(), "some/builder")
|
||||
savedNames := baseImage.SavedNames()
|
||||
slices.Sort(savedNames)
|
||||
h.AssertEq(t, 3, len(savedNames))
|
||||
h.AssertEq(t, "additional-tag-one", savedNames[0])
|
||||
h.AssertEq(t, "additional-tag-two", savedNames[1])
|
||||
h.AssertEq(t, "some/builder", savedNames[2])
|
||||
})
|
||||
|
||||
when("validating order", func() {
|
||||
it.Before(func() {
|
||||
subject.SetLifecycle(mockLifecycle)
|
||||
|
@ -933,35 +920,8 @@ func testBuilder(t *testing.T, when spec.G, it spec.S) {
|
|||
h.AssertTrue(t, strings.Contains(layers[2], h.LayerFileName(ext2v1)))
|
||||
})
|
||||
})
|
||||
|
||||
when("system buildpacks", func() {
|
||||
it.Before(func() {
|
||||
subject.SetLifecycle(mockLifecycle)
|
||||
subject.AddBuildpack(bp1v1)
|
||||
subject.SetSystem(dist.System{
|
||||
Pre: dist.SystemBuildpacks{
|
||||
Buildpacks: []dist.ModuleRef{
|
||||
{ModuleInfo: dist.ModuleInfo{ID: bp1v1.Descriptor().Info().ID}}},
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
it("should write system buildpacks to system.toml)", func() {
|
||||
err := subject.Save(logger, builder.CreatorMetadata{})
|
||||
h.AssertNil(t, err)
|
||||
|
||||
layerTar, err := baseImage.FindLayerWithPath("/cnb/system.toml")
|
||||
h.AssertNil(t, err)
|
||||
h.AssertOnTarEntry(t, layerTar, "/cnb/system.toml", h.ContentEquals(`[system]
|
||||
[system.pre]
|
||||
|
||||
[[system.pre.buildpacks]]
|
||||
id = "buildpack-1-id"
|
||||
version = "buildpack-1-version-1"
|
||||
`))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("#SetLifecycle", func() {
|
||||
it.Before(func() {
|
||||
h.AssertNil(t, subject.Save(logger, builder.CreatorMetadata{}))
|
||||
|
|
|
@ -12,9 +12,10 @@ import (
|
|||
"github.com/buildpacks/pack/pkg/archive"
|
||||
)
|
||||
|
||||
// DefaultLifecycleVersion A snapshot of the latest tested lifecycle version values
|
||||
// A snapshot of the latest tested lifecycle version values
|
||||
const (
|
||||
DefaultLifecycleVersion = "0.20.11"
|
||||
DefaultLifecycleVersion = "0.20.3"
|
||||
DefaultBuildpackAPIVersion = "0.2"
|
||||
)
|
||||
|
||||
// Blob is an interface to wrap opening blobs
|
||||
|
|
|
@ -5,7 +5,6 @@ import "github.com/buildpacks/pack/pkg/dist"
|
|||
const (
|
||||
OrderLabel = "io.buildpacks.buildpack.order"
|
||||
OrderExtensionsLabel = "io.buildpacks.buildpack.order-extensions"
|
||||
SystemLabel = "io.buildpacks.buildpack.system"
|
||||
)
|
||||
|
||||
type Metadata struct {
|
||||
|
|
|
@ -71,13 +71,6 @@ var KnownBuilders = []KnownBuilder{
|
|||
Suggested: true,
|
||||
Trusted: true,
|
||||
},
|
||||
{
|
||||
Vendor: "Paketo Buildpacks",
|
||||
Image: "paketobuildpacks/builder-ubi8-base",
|
||||
DefaultDescription: "Universal Base Image (RHEL8) with buildpacks to build Node.js or Java runtimes. Support also the new extension feature (aka apply Dockerfile)",
|
||||
Suggested: true,
|
||||
Trusted: true,
|
||||
},
|
||||
}
|
||||
|
||||
func IsKnownTrustedBuilder(builderName string) bool {
|
||||
|
|
|
@ -31,7 +31,7 @@ func (v *Version) Equal(other *Version) bool {
|
|||
|
||||
// MarshalText makes Version satisfy the encoding.TextMarshaler interface.
|
||||
func (v *Version) MarshalText() ([]byte, error) {
|
||||
return []byte(v.Original()), nil
|
||||
return []byte(v.Version.Original()), nil
|
||||
}
|
||||
|
||||
// UnmarshalText makes Version satisfy the encoding.TextUnmarshaler interface.
|
||||
|
|
|
@ -25,43 +25,40 @@ import (
|
|||
)
|
||||
|
||||
type BuildFlags struct {
|
||||
Publish bool
|
||||
ClearCache bool
|
||||
DisableSystemBuilpacks bool
|
||||
TrustBuilder bool
|
||||
TrustExtraBuildpacks bool
|
||||
Interactive bool
|
||||
Sparse bool
|
||||
EnableUsernsHost bool
|
||||
DockerHost string
|
||||
CacheImage string
|
||||
Cache cache.CacheOpts
|
||||
AppPath string
|
||||
Builder string
|
||||
Registry string
|
||||
RunImage string
|
||||
Platform string
|
||||
Policy string
|
||||
Network string
|
||||
DescriptorPath string
|
||||
DefaultProcessType string
|
||||
LifecycleImage string
|
||||
Env []string
|
||||
EnvFiles []string
|
||||
Buildpacks []string
|
||||
Extensions []string
|
||||
Volumes []string
|
||||
AdditionalTags []string
|
||||
Workspace string
|
||||
GID int
|
||||
UID int
|
||||
PreviousImage string
|
||||
SBOMDestinationDir string
|
||||
ReportDestinationDir string
|
||||
DateTime string
|
||||
PreBuildpacks []string
|
||||
PostBuildpacks []string
|
||||
InsecureRegistries []string
|
||||
Publish bool
|
||||
ClearCache bool
|
||||
TrustBuilder bool
|
||||
TrustExtraBuildpacks bool
|
||||
Interactive bool
|
||||
Sparse bool
|
||||
DockerHost string
|
||||
CacheImage string
|
||||
Cache cache.CacheOpts
|
||||
AppPath string
|
||||
Builder string
|
||||
Registry string
|
||||
RunImage string
|
||||
Platform string
|
||||
Policy string
|
||||
Network string
|
||||
DescriptorPath string
|
||||
DefaultProcessType string
|
||||
LifecycleImage string
|
||||
Env []string
|
||||
EnvFiles []string
|
||||
Buildpacks []string
|
||||
Extensions []string
|
||||
Volumes []string
|
||||
AdditionalTags []string
|
||||
Workspace string
|
||||
GID int
|
||||
UID int
|
||||
PreviousImage string
|
||||
SBOMDestinationDir string
|
||||
ReportDestinationDir string
|
||||
DateTime string
|
||||
PreBuildpacks []string
|
||||
PostBuildpacks []string
|
||||
}
|
||||
|
||||
// Build an image from source code
|
||||
|
@ -212,15 +209,12 @@ func Build(logger logging.Logger, cfg config.Config, packClient PackClient) *cob
|
|||
CreationTime: dateTime,
|
||||
PreBuildpacks: flags.PreBuildpacks,
|
||||
PostBuildpacks: flags.PostBuildpacks,
|
||||
DisableSystemBuildpacks: flags.DisableSystemBuilpacks,
|
||||
EnableUsernsHost: flags.EnableUsernsHost,
|
||||
LayoutConfig: &client.LayoutConfig{
|
||||
Sparse: flags.Sparse,
|
||||
InputImage: inputImageName,
|
||||
PreviousInputImage: inputPreviousImage,
|
||||
LayoutRepoDir: cfg.LayoutRepositoryDir,
|
||||
},
|
||||
InsecureRegistries: flags.InsecureRegistries,
|
||||
}); err != nil {
|
||||
return errors.Wrap(err, "failed to build")
|
||||
}
|
||||
|
@ -254,7 +248,6 @@ func buildCommandFlags(cmd *cobra.Command, buildFlags *BuildFlags, cfg config.Co
|
|||
cmd.Flags().StringVarP(&buildFlags.AppPath, "path", "p", "", "Path to app dir or zip-formatted file (defaults to current working directory)")
|
||||
cmd.Flags().StringSliceVarP(&buildFlags.Buildpacks, "buildpack", "b", nil, "Buildpack to use. One of:\n a buildpack by id and version in the form of '<buildpack>@<version>',\n path to a buildpack directory (not supported on Windows),\n path/URL to a buildpack .tar or .tgz file, or\n a packaged buildpack image name in the form of '<hostname>/<repo>[:<tag>]'"+stringSliceHelp("buildpack"))
|
||||
cmd.Flags().StringSliceVarP(&buildFlags.Extensions, "extension", "", nil, "Extension to use. One of:\n an extension by id and version in the form of '<extension>@<version>',\n path to an extension directory (not supported on Windows),\n path/URL to an extension .tar or .tgz file, or\n a packaged extension image name in the form of '<hostname>/<repo>[:<tag>]'"+stringSliceHelp("extension"))
|
||||
cmd.Flags().StringArrayVar(&buildFlags.InsecureRegistries, "insecure-registry", []string{}, "List of insecure registries (only available for API >= 0.13)")
|
||||
cmd.Flags().StringVarP(&buildFlags.Builder, "builder", "B", cfg.DefaultBuilder, "Builder image")
|
||||
cmd.Flags().Var(&buildFlags.Cache, "cache",
|
||||
`Cache options used to define cache techniques for build process.
|
||||
|
@ -268,7 +261,6 @@ func buildCommandFlags(cmd *cobra.Command, buildFlags *BuildFlags, cfg config.Co
|
|||
cmd.Flags().StringVar(&buildFlags.DateTime, "creation-time", "", "Desired create time in the output image config. Accepted values are Unix timestamps (e.g., '1641013200'), or 'now'. Platform API version must be at least 0.9 to use this feature.")
|
||||
cmd.Flags().StringVarP(&buildFlags.DescriptorPath, "descriptor", "d", "", "Path to the project descriptor file")
|
||||
cmd.Flags().StringVarP(&buildFlags.DefaultProcessType, "default-process", "D", "", `Set the default process type. (default "web")`)
|
||||
cmd.Flags().BoolVar(&buildFlags.DisableSystemBuilpacks, "disable-system-buildpacks", false, "Disable System Buildpacks")
|
||||
cmd.Flags().StringArrayVarP(&buildFlags.Env, "env", "e", []string{}, "Build-time environment variable, in the form 'VAR=VALUE' or 'VAR'.\nWhen using latter value-less form, value will be taken from current\n environment at the time this command is executed.\nThis flag may be specified multiple times and will override\n individual values defined by --env-file."+stringArrayHelp("env")+"\nNOTE: These are NOT available at image runtime.")
|
||||
cmd.Flags().StringArrayVar(&buildFlags.EnvFiles, "env-file", []string{}, "Build-time environment variables file\nOne variable per line, of the form 'VAR=VALUE' or 'VAR'\nWhen using latter value-less form, value will be taken from current\n environment at the time this command is executed\nNOTE: These are NOT available at image runtime.\"")
|
||||
cmd.Flags().StringVar(&buildFlags.Network, "network", "", "Connect detect and build containers to network")
|
||||
|
@ -298,7 +290,6 @@ This option may set DOCKER_HOST environment variable for the build container if
|
|||
cmd.Flags().StringVar(&buildFlags.ReportDestinationDir, "report-output-dir", "", "Path to export build report.toml.\nOmitting the flag yield no report file.")
|
||||
cmd.Flags().BoolVar(&buildFlags.Interactive, "interactive", false, "Launch a terminal UI to depict the build process")
|
||||
cmd.Flags().BoolVar(&buildFlags.Sparse, "sparse", false, "Use this flag to avoid saving on disk the run-image layers when the application image is exported to OCI layout format")
|
||||
cmd.Flags().BoolVar(&buildFlags.EnableUsernsHost, "userns-host", false, "Enable user namespace isolation for the build containers")
|
||||
if !cfg.Experimental {
|
||||
cmd.Flags().MarkHidden("interactive")
|
||||
cmd.Flags().MarkHidden("sparse")
|
||||
|
|
|
@ -982,31 +982,6 @@ builder = "my-builder"
|
|||
h.AssertError(t, err, "Exporting to OCI layout is currently experimental.")
|
||||
})
|
||||
})
|
||||
|
||||
when("--insecure-registry is provided", func() {
|
||||
it("sets one insecure registry", func() {
|
||||
mockClient.EXPECT().
|
||||
Build(gomock.Any(), EqBuildOptionsWithInsecureRegistries([]string{
|
||||
"foo.bar",
|
||||
})).
|
||||
Return(nil)
|
||||
|
||||
command.SetArgs([]string{"image", "--builder", "my-builder", "--insecure-registry", "foo.bar"})
|
||||
h.AssertNil(t, command.Execute())
|
||||
})
|
||||
|
||||
it("sets more than one insecure registry", func() {
|
||||
mockClient.EXPECT().
|
||||
Build(gomock.Any(), EqBuildOptionsWithInsecureRegistries([]string{
|
||||
"foo.bar",
|
||||
"foo.com",
|
||||
})).
|
||||
Return(nil)
|
||||
|
||||
command.SetArgs([]string{"image", "--builder", "my-builder", "--insecure-registry", "foo.bar", "--insecure-registry", "foo.com"})
|
||||
h.AssertNil(t, command.Execute())
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("export to OCI layout is expected", func() {
|
||||
|
@ -1268,18 +1243,6 @@ func EqBuildOptionsWithLayoutConfig(image, previousImage string, sparse bool, la
|
|||
}
|
||||
}
|
||||
|
||||
func EqBuildOptionsWithInsecureRegistries(insecureRegistries []string) gomock.Matcher {
|
||||
return buildOptionsMatcher{
|
||||
description: fmt.Sprintf("Insercure Registries=%s", insecureRegistries),
|
||||
equals: func(o client.BuildOptions) bool {
|
||||
if len(o.InsecureRegistries) != len(insecureRegistries) {
|
||||
return false
|
||||
}
|
||||
return reflect.DeepEqual(o.InsecureRegistries, insecureRegistries)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
type buildOptionsMatcher struct {
|
||||
equals func(client.BuildOptions) bool
|
||||
description string
|
||||
|
|
|
@ -2,7 +2,6 @@ package commands
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
@ -19,15 +18,13 @@ import (
|
|||
|
||||
// BuilderCreateFlags define flags provided to the CreateBuilder command
|
||||
type BuilderCreateFlags struct {
|
||||
Publish bool
|
||||
AppendImageNameSuffix bool
|
||||
BuilderTomlPath string
|
||||
Registry string
|
||||
Policy string
|
||||
Flatten []string
|
||||
Targets []string
|
||||
Label map[string]string
|
||||
AdditionalTags []string
|
||||
Publish bool
|
||||
BuilderTomlPath string
|
||||
Registry string
|
||||
Policy string
|
||||
Flatten []string
|
||||
Targets []string
|
||||
Label map[string]string
|
||||
}
|
||||
|
||||
// CreateBuilder creates a builder image, based on a builder config
|
||||
|
@ -100,39 +97,18 @@ Creating a custom builder allows you to control what buildpacks are used and wha
|
|||
logger.Infof("Pro tip: use --targets flag OR [[targets]] in builder.toml to specify the desired platform")
|
||||
}
|
||||
|
||||
if !flags.Publish && flags.AppendImageNameSuffix {
|
||||
logger.Warnf("--append-image-name-suffix will be ignored, use combined with --publish")
|
||||
}
|
||||
|
||||
// Create temporary directory for lifecycle downloads when using Docker images
|
||||
var tempDir string
|
||||
if hasDockerLifecycle(builderConfig) {
|
||||
tempDir, err = os.MkdirTemp("", "pack-builder-*")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "creating temporary directory")
|
||||
}
|
||||
defer func() {
|
||||
if cleanupErr := os.RemoveAll(tempDir); cleanupErr != nil {
|
||||
logger.Debugf("Failed to clean up temporary directory %s: %v", tempDir, cleanupErr)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
imageName := args[0]
|
||||
if err := pack.CreateBuilder(cmd.Context(), client.CreateBuilderOptions{
|
||||
RelativeBaseDir: relativeBaseDir,
|
||||
BuildConfigEnv: envMap,
|
||||
BuilderName: imageName,
|
||||
Config: builderConfig,
|
||||
Publish: flags.Publish,
|
||||
AppendImageNameSuffix: flags.AppendImageNameSuffix && flags.Publish,
|
||||
Registry: flags.Registry,
|
||||
PullPolicy: pullPolicy,
|
||||
Flatten: toFlatten,
|
||||
Labels: flags.Label,
|
||||
Targets: multiArchCfg.Targets(),
|
||||
TempDirectory: tempDir,
|
||||
AdditionalTags: flags.AdditionalTags,
|
||||
RelativeBaseDir: relativeBaseDir,
|
||||
BuildConfigEnv: envMap,
|
||||
BuilderName: imageName,
|
||||
Config: builderConfig,
|
||||
Publish: flags.Publish,
|
||||
Registry: flags.Registry,
|
||||
PullPolicy: pullPolicy,
|
||||
Flatten: toFlatten,
|
||||
Labels: flags.Label,
|
||||
Targets: multiArchCfg.Targets(),
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -148,7 +124,6 @@ Creating a custom builder allows you to control what buildpacks are used and wha
|
|||
}
|
||||
cmd.Flags().StringVarP(&flags.BuilderTomlPath, "config", "c", "", "Path to builder TOML file (required)")
|
||||
cmd.Flags().BoolVar(&flags.Publish, "publish", false, "Publish the builder directly to the container registry specified in <image-name>, instead of the daemon.")
|
||||
cmd.Flags().BoolVar(&flags.AppendImageNameSuffix, "append-image-name-suffix", false, "Append an [os]-[arch] suffix to intermediate image tags when creating a multi-arch image; useful when publishing to a registry that doesn't allow overwriting existing tags")
|
||||
cmd.Flags().StringVar(&flags.Policy, "pull-policy", "", "Pull policy to use. Accepted values are always, never, and if-not-present. The default is always")
|
||||
cmd.Flags().StringArrayVar(&flags.Flatten, "flatten", nil, "List of buildpacks to flatten together into a single layer (format: '<buildpack-id>@<buildpack-version>,<buildpack-id>@<buildpack-version>'")
|
||||
cmd.Flags().StringToStringVarP(&flags.Label, "label", "l", nil, "Labels to add to the builder image, in the form of '<name>=<value>'")
|
||||
|
@ -158,7 +133,6 @@ Creating a custom builder allows you to control what buildpacks are used and wha
|
|||
- To specify the distribution version: '--target "linux/arm/v6:ubuntu@14.04"'
|
||||
- To specify multiple distribution versions: '--target "linux/arm/v6:ubuntu@14.04" --target "linux/arm/v6:ubuntu@16.04"'
|
||||
`)
|
||||
cmd.Flags().StringSliceVarP(&flags.AdditionalTags, "tag", "", nil, "Additional tags to push the output image to.\nTags should be in the format 'image:tag' or 'repository/image:tag'."+stringSliceHelp("tag"))
|
||||
|
||||
AddHelpFlag(cmd, "create")
|
||||
return cmd
|
||||
|
@ -168,10 +142,6 @@ func hasExtensions(builderConfig builder.Config) bool {
|
|||
return len(builderConfig.Extensions) > 0 || len(builderConfig.OrderExtensions) > 0
|
||||
}
|
||||
|
||||
func hasDockerLifecycle(builderConfig builder.Config) bool {
|
||||
return buildpack.HasDockerLocator(builderConfig.Lifecycle.URI)
|
||||
}
|
||||
|
||||
func validateCreateFlags(flags *BuilderCreateFlags, cfg config.Config) error {
|
||||
if flags.Publish && flags.Policy == image.PullNever.String() {
|
||||
return errors.Errorf("--publish and --pull-policy never cannot be used together. The --publish flag requires the use of remote images.")
|
||||
|
|
|
@ -20,18 +20,16 @@ import (
|
|||
|
||||
// BuildpackPackageFlags define flags provided to the BuildpackPackage command
|
||||
type BuildpackPackageFlags struct {
|
||||
PackageTomlPath string
|
||||
Format string
|
||||
Policy string
|
||||
BuildpackRegistry string
|
||||
Path string
|
||||
FlattenExclude []string
|
||||
Targets []string
|
||||
Label map[string]string
|
||||
Publish bool
|
||||
Flatten bool
|
||||
AppendImageNameSuffix bool
|
||||
AdditionalTags []string
|
||||
PackageTomlPath string
|
||||
Format string
|
||||
Policy string
|
||||
BuildpackRegistry string
|
||||
Path string
|
||||
FlattenExclude []string
|
||||
Targets []string
|
||||
Label map[string]string
|
||||
Publish bool
|
||||
Flatten bool
|
||||
}
|
||||
|
||||
// BuildpackPackager packages buildpacks
|
||||
|
@ -119,37 +117,31 @@ func BuildpackPackage(logger logging.Logger, cfg config.Config, packager Buildpa
|
|||
|
||||
if len(multiArchCfg.Targets()) == 0 {
|
||||
if isCompositeBP {
|
||||
logger.Infof("Pro tip: use --target flag OR [[targets]] in package.toml to specify the desired platform (os/arch/variant); using os %s", style.Symbol(bpPackageCfg.Platform.OS))
|
||||
logger.Infof("Pro tip: use --targets flag OR [[targets]] in package.toml to specify the desired platform (os/arch/variant); using os %s", style.Symbol(bpPackageCfg.Platform.OS))
|
||||
} else {
|
||||
logger.Infof("Pro tip: use --target flag OR [[targets]] in buildpack.toml to specify the desired platform (os/arch/variant); using os %s", style.Symbol(bpPackageCfg.Platform.OS))
|
||||
logger.Infof("Pro tip: use --targets flag OR [[targets]] in buildpack.toml to specify the desired platform (os/arch/variant); using os %s", style.Symbol(bpPackageCfg.Platform.OS))
|
||||
}
|
||||
} else if !isCompositeBP {
|
||||
// FIXME: Check if we can copy the config files during layers creation.
|
||||
filesToClean, err := multiArchCfg.CopyConfigFiles(bpPath, "buildpack")
|
||||
filesToClean, err := multiArchCfg.CopyConfigFiles(bpPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer clean(filesToClean)
|
||||
}
|
||||
|
||||
if !flags.Publish && flags.AppendImageNameSuffix {
|
||||
logger.Warnf("--append-image-name-suffix will be ignored, use combined with --publish")
|
||||
}
|
||||
|
||||
if err := packager.PackageBuildpack(cmd.Context(), client.PackageBuildpackOptions{
|
||||
RelativeBaseDir: relativeBaseDir,
|
||||
Name: name,
|
||||
Format: flags.Format,
|
||||
Config: bpPackageCfg,
|
||||
Publish: flags.Publish,
|
||||
AppendImageNameSuffix: flags.AppendImageNameSuffix && flags.Publish,
|
||||
PullPolicy: pullPolicy,
|
||||
Registry: flags.BuildpackRegistry,
|
||||
Flatten: flags.Flatten,
|
||||
FlattenExclude: flags.FlattenExclude,
|
||||
Labels: flags.Label,
|
||||
Targets: multiArchCfg.Targets(),
|
||||
AdditionalTags: flags.AdditionalTags,
|
||||
RelativeBaseDir: relativeBaseDir,
|
||||
Name: name,
|
||||
Format: flags.Format,
|
||||
Config: bpPackageCfg,
|
||||
Publish: flags.Publish,
|
||||
PullPolicy: pullPolicy,
|
||||
Registry: flags.BuildpackRegistry,
|
||||
Flatten: flags.Flatten,
|
||||
FlattenExclude: flags.FlattenExclude,
|
||||
Labels: flags.Label,
|
||||
Targets: multiArchCfg.Targets(),
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -171,7 +163,6 @@ func BuildpackPackage(logger logging.Logger, cfg config.Config, packager Buildpa
|
|||
cmd.Flags().StringVarP(&flags.PackageTomlPath, "config", "c", "", "Path to package TOML config")
|
||||
cmd.Flags().StringVarP(&flags.Format, "format", "f", "", `Format to save package as ("image" or "file")`)
|
||||
cmd.Flags().BoolVar(&flags.Publish, "publish", false, `Publish the buildpack directly to the container registry specified in <name>, instead of the daemon (applies to "--format=image" only).`)
|
||||
cmd.Flags().BoolVar(&flags.AppendImageNameSuffix, "append-image-name-suffix", false, "When publishing to a registry that doesn't allow overwrite existing tags use this flag to append a [os]-[arch] suffix to package <name>")
|
||||
cmd.Flags().StringVar(&flags.Policy, "pull-policy", "", "Pull policy to use. Accepted values are always, never, and if-not-present. The default is always")
|
||||
cmd.Flags().StringVarP(&flags.Path, "path", "p", "", "Path to the Buildpack that needs to be packaged")
|
||||
cmd.Flags().StringVarP(&flags.BuildpackRegistry, "buildpack-registry", "r", "", "Buildpack Registry name")
|
||||
|
@ -185,7 +176,6 @@ Targets should be in the format '[os][/arch][/variant]:[distroname@osversion@ano
|
|||
- To specify the distribution version: '--target "linux/arm/v6:ubuntu@14.04"'
|
||||
- To specify multiple distribution versions: '--target "linux/arm/v6:ubuntu@14.04" --target "linux/arm/v6:ubuntu@16.04"'
|
||||
`)
|
||||
cmd.Flags().StringSliceVarP(&flags.AdditionalTags, "tag", "", nil, "Additional tags to push the output image to.\nTags should be in the format 'image:tag' or 'repository/image:tag'."+stringSliceHelp("tag"))
|
||||
if !cfg.Experimental {
|
||||
cmd.Flags().MarkHidden("flatten")
|
||||
cmd.Flags().MarkHidden("flatten-exclude")
|
||||
|
|
|
@ -265,25 +265,6 @@ func testPackageCommand(t *testing.T, when spec.G, it spec.S) {
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("additional tags are specified", func() {
|
||||
it("forwards additional tags to buildpackPackager", func() {
|
||||
expectedTags := []string{"additional-tag-1", "additional-tag-2"}
|
||||
cmd := packageCommand(
|
||||
withBuildpackPackager(fakeBuildpackPackager),
|
||||
)
|
||||
cmd.SetArgs([]string{
|
||||
"my-specific-image",
|
||||
"--tag", expectedTags[0], "--tag", expectedTags[1],
|
||||
})
|
||||
err := cmd.Execute()
|
||||
h.AssertNil(t, err)
|
||||
|
||||
receivedOptions := fakeBuildpackPackager.CreateCalledWithOptions
|
||||
h.AssertEq(t, receivedOptions.AdditionalTags[0], expectedTags[0])
|
||||
h.AssertEq(t, receivedOptions.AdditionalTags[1], expectedTags[1])
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("no config path is specified", func() {
|
||||
|
|
|
@ -2,7 +2,6 @@ package commands
|
|||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
@ -12,7 +11,6 @@ import (
|
|||
"github.com/buildpacks/pack/internal/config"
|
||||
"github.com/buildpacks/pack/internal/style"
|
||||
"github.com/buildpacks/pack/pkg/client"
|
||||
"github.com/buildpacks/pack/pkg/dist"
|
||||
"github.com/buildpacks/pack/pkg/image"
|
||||
"github.com/buildpacks/pack/pkg/logging"
|
||||
)
|
||||
|
@ -21,11 +19,8 @@ import (
|
|||
type ExtensionPackageFlags struct {
|
||||
PackageTomlPath string
|
||||
Format string
|
||||
Targets []string
|
||||
Publish bool
|
||||
Policy string
|
||||
Path string
|
||||
AdditionalTags []string
|
||||
}
|
||||
|
||||
// ExtensionPackager packages extensions
|
||||
|
@ -37,15 +32,9 @@ type ExtensionPackager interface {
|
|||
func ExtensionPackage(logger logging.Logger, cfg config.Config, packager ExtensionPackager, packageConfigReader PackageConfigReader) *cobra.Command {
|
||||
var flags ExtensionPackageFlags
|
||||
cmd := &cobra.Command{
|
||||
Use: "package <name> --config <config-path>",
|
||||
Short: "Package an extension in OCI format",
|
||||
Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
|
||||
Example: "pack extension package /output/file.cnb --path /extracted/from/tgz/folder --format file\npack extension package registry/image-name --path /extracted/from/tgz/folder --format image --publish",
|
||||
Long: "extension package allows users to package (an) extension(s) into OCI format, which can then to be hosted in " +
|
||||
"image repositories or persisted on disk as a '.cnb' file." +
|
||||
"Packaged extensions can be used as inputs to `pack build` (using the `--extension` flag), " +
|
||||
"and they can be included in the configs used in `pack builder create` and `pack extension package`. For more " +
|
||||
"on how to package an extension, see: https://buildpacks.io/docs/buildpack-author-guide/package-a-buildpack/.",
|
||||
Use: "package <name> --config <config-path>",
|
||||
Short: "Package an extension in OCI format",
|
||||
Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
|
||||
RunE: logError(logger, func(cmd *cobra.Command, args []string) error {
|
||||
if err := validateExtensionPackageFlags(&flags); err != nil {
|
||||
return err
|
||||
|
@ -62,13 +51,6 @@ func ExtensionPackage(logger logging.Logger, cfg config.Config, packager Extensi
|
|||
}
|
||||
|
||||
exPackageCfg := pubbldpkg.DefaultExtensionConfig()
|
||||
var exPath string
|
||||
if flags.Path != "" {
|
||||
if exPath, err = filepath.Abs(flags.Path); err != nil {
|
||||
return errors.Wrap(err, "resolving extension path")
|
||||
}
|
||||
exPackageCfg.Extension.URI = exPath
|
||||
}
|
||||
relativeBaseDir := ""
|
||||
if flags.PackageTomlPath != "" {
|
||||
exPackageCfg, err = packageConfigReader.Read(flags.PackageTomlPath)
|
||||
|
@ -92,28 +74,6 @@ func ExtensionPackage(logger logging.Logger, cfg config.Config, packager Extensi
|
|||
}
|
||||
}
|
||||
|
||||
targets, err := processExtensionPackageTargets(flags.Path, packageConfigReader, exPackageCfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
daemon := !flags.Publish && flags.Format == ""
|
||||
multiArchCfg, err := processMultiArchitectureConfig(logger, flags.Targets, targets, daemon)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(multiArchCfg.Targets()) == 0 {
|
||||
logger.Infof("Pro tip: use --target flag OR [[targets]] in buildpack.toml to specify the desired platform (os/arch/variant); using os %s", style.Symbol(exPackageCfg.Platform.OS))
|
||||
} else {
|
||||
// FIXME: Check if we can copy the config files during layers creation.
|
||||
filesToClean, err := multiArchCfg.CopyConfigFiles(exPath, "extension")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer clean(filesToClean)
|
||||
}
|
||||
|
||||
if err := packager.PackageExtension(cmd.Context(), client.PackageBuildpackOptions{
|
||||
RelativeBaseDir: relativeBaseDir,
|
||||
Name: name,
|
||||
|
@ -121,8 +81,6 @@ func ExtensionPackage(logger logging.Logger, cfg config.Config, packager Extensi
|
|||
Config: exPackageCfg,
|
||||
Publish: flags.Publish,
|
||||
PullPolicy: pullPolicy,
|
||||
Targets: multiArchCfg.Targets(),
|
||||
AdditionalTags: flags.AdditionalTags,
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -146,15 +104,6 @@ func ExtensionPackage(logger logging.Logger, cfg config.Config, packager Extensi
|
|||
cmd.Flags().StringVarP(&flags.Format, "format", "f", "", `Format to save package as ("image" or "file")`)
|
||||
cmd.Flags().BoolVar(&flags.Publish, "publish", false, `Publish the extension directly to the container registry specified in <name>, instead of the daemon (applies to "--format=image" only).`)
|
||||
cmd.Flags().StringVar(&flags.Policy, "pull-policy", "", "Pull policy to use. Accepted values are always, never, and if-not-present. The default is always")
|
||||
cmd.Flags().StringVarP(&flags.Path, "path", "p", "", "Path to the Extension that needs to be packaged")
|
||||
cmd.Flags().StringSliceVarP(&flags.Targets, "target", "t", nil,
|
||||
`Target platforms to build for.
|
||||
Targets should be in the format '[os][/arch][/variant]:[distroname@osversion@anotherversion];[distroname@osversion]'.
|
||||
- To specify two different architectures: '--target "linux/amd64" --target "linux/arm64"'
|
||||
- To specify the distribution version: '--target "linux/arm/v6:ubuntu@14.04"'
|
||||
- To specify multiple distribution versions: '--target "linux/arm/v6:ubuntu@14.04" --target "linux/arm/v6:ubuntu@16.04"'
|
||||
`)
|
||||
cmd.Flags().StringSliceVarP(&flags.AdditionalTags, "tag", "", nil, "Additional tags to push the output image to.\nTags should be in the format 'image:tag' or 'repository/image:tag'."+stringSliceHelp("tag"))
|
||||
AddHelpFlag(cmd, "package")
|
||||
return cmd
|
||||
}
|
||||
|
@ -165,20 +114,3 @@ func validateExtensionPackageFlags(p *ExtensionPackageFlags) error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// processExtensionPackageTargets returns the list of targets defined on the extension.toml
|
||||
func processExtensionPackageTargets(path string, packageConfigReader PackageConfigReader, bpPackageCfg pubbldpkg.Config) ([]dist.Target, error) {
|
||||
var targets []dist.Target
|
||||
|
||||
// Read targets from extension.toml
|
||||
pathToExtensionToml := filepath.Join(path, "extension.toml")
|
||||
if _, err := os.Stat(pathToExtensionToml); err == nil {
|
||||
buildpackCfg, err := packageConfigReader.ReadBuildpackDescriptor(pathToExtensionToml)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
targets = buildpackCfg.Targets()
|
||||
}
|
||||
|
||||
return targets, nil
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package commands_test
|
|||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/heroku/color"
|
||||
|
@ -193,58 +192,6 @@ func testExtensionPackageCommand(t *testing.T, when spec.G, it spec.S) {
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("a path is specified", func() {
|
||||
when("no multi-platform", func() {
|
||||
it("creates a default config with the appropriate path", func() {
|
||||
cmd := packageExtensionCommand(withExtensionPackager(fakeExtensionPackager))
|
||||
cmd.SetArgs([]string{"some-name", "-p", ".."})
|
||||
h.AssertNil(t, cmd.Execute())
|
||||
bpPath, _ := filepath.Abs("..")
|
||||
receivedOptions := fakeExtensionPackager.CreateCalledWithOptions
|
||||
h.AssertEq(t, receivedOptions.Config.Extension.URI, bpPath)
|
||||
})
|
||||
})
|
||||
|
||||
when("multi-platform", func() {
|
||||
var targets []dist.Target
|
||||
|
||||
when("single extension", func() {
|
||||
it.Before(func() {
|
||||
targets = []dist.Target{
|
||||
{OS: "linux", Arch: "amd64"},
|
||||
{OS: "windows", Arch: "amd64"},
|
||||
}
|
||||
})
|
||||
|
||||
it("creates a multi-platform extension package", func() {
|
||||
cmd := packageExtensionCommand(withExtensionPackager(fakeExtensionPackager))
|
||||
cmd.SetArgs([]string{"some-name", "-p", "some-path", "--target", "linux/amd64", "--target", "windows/amd64", "--format", "image", "--publish"})
|
||||
h.AssertNil(t, cmd.Execute())
|
||||
h.AssertEq(t, fakeExtensionPackager.CreateCalledWithOptions.Targets, targets)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("additional tags are specified", func() {
|
||||
it("forwards additional tags to PackageExtension", func() {
|
||||
expectedTags := []string{"additional-tag-1", "additional-tag-2"}
|
||||
cmd := packageExtensionCommand(
|
||||
withExtensionPackager(fakeExtensionPackager),
|
||||
)
|
||||
cmd.SetArgs([]string{
|
||||
"my-specific-image",
|
||||
"--tag", expectedTags[0], "--tag", expectedTags[1],
|
||||
})
|
||||
err := cmd.Execute()
|
||||
h.AssertNil(t, err)
|
||||
|
||||
receivedOptions := fakeExtensionPackager.CreateCalledWithOptions
|
||||
h.AssertEq(t, receivedOptions.AdditionalTags[0], expectedTags[0])
|
||||
h.AssertEq(t, receivedOptions.AdditionalTags[1], expectedTags[1])
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("invalid flags", func() {
|
||||
|
@ -302,20 +249,6 @@ func testExtensionPackageCommand(t *testing.T, when spec.G, it spec.S) {
|
|||
h.AssertError(t, cmd.Execute(), "parsing pull policy")
|
||||
})
|
||||
})
|
||||
|
||||
when("--target cannot be parsed", func() {
|
||||
it("errors with a descriptive message", func() {
|
||||
cmd := packageCommand()
|
||||
cmd.SetArgs([]string{
|
||||
"some-image-name", "--config", "/path/to/some/file",
|
||||
"--target", "something/wrong", "--publish",
|
||||
})
|
||||
|
||||
err := cmd.Execute()
|
||||
h.AssertNotNil(t, err)
|
||||
h.AssertError(t, err, "unknown target: 'something/wrong'")
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@ type FakePackageConfigReader struct {
|
|||
|
||||
ReadBuildpackDescriptorCalledWithArg string
|
||||
ReadBuildpackDescriptorReturn dist.BuildpackDescriptor
|
||||
ReadExtensionDescriptorReturn dist.ExtensionDescriptor
|
||||
ReadBuildpackDescriptorReturnError error
|
||||
}
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ func Rebase(logger logging.Logger, cfg config.Config, pack PackClient) *cobra.Co
|
|||
cmd.Flags().StringVar(&opts.PreviousImage, "previous-image", "", "Image to rebase. Set to a particular tag reference, digest reference, or (when performing a daemon build) image ID. Use this flag in combination with <image-name> to avoid replacing the original image.")
|
||||
cmd.Flags().StringVar(&opts.ReportDestinationDir, "report-output-dir", "", "Path to export build report.toml.\nOmitting the flag yield no report file.")
|
||||
cmd.Flags().BoolVar(&opts.Force, "force", false, "Perform rebase operation without target validation (only available for API >= 0.12)")
|
||||
cmd.Flags().StringArrayVar(&opts.InsecureRegistries, "insecure-registry", []string{}, "List of insecure registries (only available for API >= 0.13)")
|
||||
|
||||
AddHelpFlag(cmd, "rebase")
|
||||
return cmd
|
||||
}
|
||||
|
|
|
@ -50,7 +50,6 @@ func testRebaseCommand(t *testing.T, when spec.G, it spec.S) {
|
|||
when("#RebaseCommand", func() {
|
||||
when("no image is provided", func() {
|
||||
it("fails to run", func() {
|
||||
command.SetArgs([]string{})
|
||||
err := command.Execute()
|
||||
h.AssertError(t, err, "accepts 1 arg")
|
||||
})
|
||||
|
@ -81,7 +80,6 @@ func testRebaseCommand(t *testing.T, when spec.G, it spec.S) {
|
|||
AdditionalMirrors: map[string][]string{
|
||||
runImage: {testMirror1, testMirror2},
|
||||
},
|
||||
InsecureRegistries: []string{},
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -124,7 +122,6 @@ func testRebaseCommand(t *testing.T, when spec.G, it spec.S) {
|
|||
h.AssertError(t, command.Execute(), "parsing pull policy")
|
||||
})
|
||||
})
|
||||
|
||||
when("--pull-policy not set", func() {
|
||||
when("no policy set in config", func() {
|
||||
it("uses the default policy", func() {
|
||||
|
@ -161,7 +158,6 @@ func testRebaseCommand(t *testing.T, when spec.G, it spec.S) {
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("image name and previous image are provided", func() {
|
||||
var expectedOpts client.RebaseOptions
|
||||
|
||||
|
@ -186,8 +182,7 @@ func testRebaseCommand(t *testing.T, when spec.G, it spec.S) {
|
|||
AdditionalMirrors: map[string][]string{
|
||||
runImage: {testMirror1, testMirror2},
|
||||
},
|
||||
PreviousImage: previousImage,
|
||||
InsecureRegistries: []string{},
|
||||
PreviousImage: previousImage,
|
||||
}
|
||||
expectedOpts = opts
|
||||
})
|
||||
|
@ -201,35 +196,6 @@ func testRebaseCommand(t *testing.T, when spec.G, it spec.S) {
|
|||
h.AssertNil(t, command.Execute())
|
||||
})
|
||||
})
|
||||
|
||||
when("--insecure-registry is provided", func() {
|
||||
it("sets one insecure registry", func() {
|
||||
opts.PullPolicy = image.PullAlways
|
||||
opts.InsecureRegistries = []string{
|
||||
"foo.bar",
|
||||
}
|
||||
mockClient.EXPECT().
|
||||
Rebase(gomock.Any(), opts).
|
||||
Return(nil)
|
||||
|
||||
command.SetArgs([]string{repoName, "--insecure-registry", "foo.bar"})
|
||||
h.AssertNil(t, command.Execute())
|
||||
})
|
||||
|
||||
it("sets more than one insecure registry", func() {
|
||||
opts.PullPolicy = image.PullAlways
|
||||
opts.InsecureRegistries = []string{
|
||||
"foo.bar",
|
||||
"foo.com",
|
||||
}
|
||||
mockClient.EXPECT().
|
||||
Rebase(gomock.Any(), opts).
|
||||
Return(nil)
|
||||
|
||||
command.SetArgs([]string{repoName, "--insecure-registry", "foo.bar", "--insecure-registry", "foo.com"})
|
||||
h.AssertNil(t, command.Execute())
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ import (
|
|||
|
||||
type FakeImageCreator func(name string, topLayerSha string, identifier imgutil.Identifier) *fakes.Image
|
||||
|
||||
func NewFakeBuilderImage(t *testing.T, tmpDir, name string, stackID, uid, gid string, metadata builder.Metadata, bpLayers dist.ModuleLayers, order dist.Order, exLayers dist.ModuleLayers, orderExtensions dist.Order, system dist.System, creator FakeImageCreator) *fakes.Image {
|
||||
func NewFakeBuilderImage(t *testing.T, tmpDir, name string, stackID, uid, gid string, metadata builder.Metadata, bpLayers dist.ModuleLayers, order dist.Order, exLayers dist.ModuleLayers, orderExtensions dist.Order, creator FakeImageCreator) *fakes.Image {
|
||||
fakeBuilderImage := creator(name, "", nil)
|
||||
|
||||
h.AssertNil(t, fakeBuilderImage.SetLabel("io.buildpacks.stack.id", stackID))
|
||||
|
@ -78,19 +78,6 @@ func NewFakeBuilderImage(t *testing.T, tmpDir, name string, stackID, uid, gid st
|
|||
h.AssertNil(t, tarBuilder.WriteToPath(orderTar, archive.DefaultTarWriterFactory()))
|
||||
h.AssertNil(t, fakeBuilderImage.AddLayer(orderTar))
|
||||
|
||||
if len(system.Pre.Buildpacks) > 0 || len(system.Post.Buildpacks) > 0 {
|
||||
h.AssertNil(t, dist.SetLabel(fakeBuilderImage, "io.buildpacks.buildpack.system", system))
|
||||
systemTarBuilder := archive.TarBuilder{}
|
||||
systemTomlBytes := &bytes.Buffer{}
|
||||
h.AssertNil(t, toml.NewEncoder(systemTomlBytes).Encode(systemTOML{System: system}))
|
||||
|
||||
systemTarBuilder.AddFile("/cnb/system.toml", 0777, archive.NormalizedDateTime, systemTomlBytes.Bytes())
|
||||
|
||||
systemTar := filepath.Join(tmpDir, fmt.Sprintf("system.%s.toml", h.RandString(8)))
|
||||
h.AssertNil(t, systemTarBuilder.WriteToPath(systemTar, archive.DefaultTarWriterFactory()))
|
||||
h.AssertNil(t, fakeBuilderImage.AddLayer(systemTar))
|
||||
}
|
||||
|
||||
return fakeBuilderImage
|
||||
}
|
||||
|
||||
|
@ -98,7 +85,3 @@ type orderTOML struct {
|
|||
Order dist.Order `toml:"order"`
|
||||
OrderExtensions dist.Order `toml:"orderExtensions"`
|
||||
}
|
||||
|
||||
type systemTOML struct {
|
||||
System dist.System `toml:"system"`
|
||||
}
|
||||
|
|
|
@ -4,8 +4,6 @@ import (
|
|||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/buildpacks/pack/pkg/dist"
|
||||
|
||||
gname "github.com/google/go-containerregistry/pkg/name"
|
||||
|
||||
"github.com/buildpacks/pack/internal/style"
|
||||
|
@ -51,24 +49,6 @@ func TranslateRegistry(name string, registryMirrors map[string]string, logger Lo
|
|||
return refName, nil
|
||||
}
|
||||
|
||||
func AppendSuffix(name string, target dist.Target) (string, error) {
|
||||
reference, err := gname.ParseReference(name, gname.WeakValidation)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
suffixPlatformTag := targetToTag(target)
|
||||
if suffixPlatformTag != "" {
|
||||
if reference.Identifier() == "latest" {
|
||||
return fmt.Sprintf("%s:%s", reference.Context(), suffixPlatformTag), nil
|
||||
}
|
||||
if !strings.Contains(reference.Identifier(), ":") {
|
||||
return fmt.Sprintf("%s:%s-%s", reference.Context(), reference.Identifier(), suffixPlatformTag), nil
|
||||
}
|
||||
}
|
||||
return name, nil
|
||||
}
|
||||
|
||||
func getMirror(repo gname.Repository, registryMirrors map[string]string) (string, bool) {
|
||||
mirror, ok := registryMirrors["*"]
|
||||
if ok {
|
||||
|
@ -78,7 +58,3 @@ func getMirror(repo gname.Repository, registryMirrors map[string]string) (string
|
|||
mirror, ok = registryMirrors[repo.RegistryStr()]
|
||||
return mirror, ok
|
||||
}
|
||||
|
||||
func targetToTag(target dist.Target) string {
|
||||
return strings.Join(target.ValuesAsSlice(), "-")
|
||||
}
|
||||
|
|
|
@ -4,8 +4,6 @@ import (
|
|||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/buildpacks/pack/pkg/dist"
|
||||
|
||||
"github.com/sclevine/spec"
|
||||
"github.com/sclevine/spec/report"
|
||||
|
||||
|
@ -81,111 +79,4 @@ func testTranslateRegistry(t *testing.T, when spec.G, it spec.S) {
|
|||
assert.Equal(output, expected)
|
||||
})
|
||||
})
|
||||
|
||||
when("#AppendSuffix", func() {
|
||||
when("[os] is provided", func() {
|
||||
when("[arch]] is provided", func() {
|
||||
when("[arch-variant] is provided", func() {
|
||||
when("tag is provided", func() {
|
||||
it("append [os]-[arch]-[arch-variant] to the given tag", func() {
|
||||
input := "my.registry.com/my-repo/my-image:some-tag"
|
||||
target := dist.Target{
|
||||
OS: "linux",
|
||||
Arch: "amd64",
|
||||
ArchVariant: "v6",
|
||||
}
|
||||
|
||||
result, err := name.AppendSuffix(input, target)
|
||||
assert.Nil(err)
|
||||
assert.Equal(result, "my.registry.com/my-repo/my-image:some-tag-linux-amd64-v6")
|
||||
})
|
||||
})
|
||||
when("tag is not provided", func() {
|
||||
it("add tag: [os]-[arch]-[arch-variant] to the given <image>", func() {
|
||||
input := "my.registry.com/my-repo/my-image"
|
||||
target := dist.Target{
|
||||
OS: "linux",
|
||||
Arch: "amd64",
|
||||
ArchVariant: "v6",
|
||||
}
|
||||
|
||||
result, err := name.AppendSuffix(input, target)
|
||||
assert.Nil(err)
|
||||
assert.Equal(result, "my.registry.com/my-repo/my-image:linux-amd64-v6")
|
||||
})
|
||||
})
|
||||
})
|
||||
when("[arch-variant] is not provided", func() {
|
||||
when("tag is provided", func() {
|
||||
// my.registry.com/my-repo/my-image:some-tag
|
||||
it("append [os]-[arch] to the given tag", func() {
|
||||
input := "my.registry.com/my-repo/my-image:some-tag"
|
||||
target := dist.Target{
|
||||
OS: "linux",
|
||||
Arch: "amd64",
|
||||
}
|
||||
|
||||
result, err := name.AppendSuffix(input, target)
|
||||
assert.Nil(err)
|
||||
assert.Equal(result, "my.registry.com/my-repo/my-image:some-tag-linux-amd64")
|
||||
})
|
||||
})
|
||||
when("tag is NOT provided", func() {
|
||||
// my.registry.com/my-repo/my-image
|
||||
it("add tag: [os]-[arch] to the given <image>", func() {
|
||||
input := "my.registry.com/my-repo/my-image"
|
||||
target := dist.Target{
|
||||
OS: "linux",
|
||||
Arch: "amd64",
|
||||
}
|
||||
|
||||
result, err := name.AppendSuffix(input, target)
|
||||
assert.Nil(err)
|
||||
assert.Equal(result, "my.registry.com/my-repo/my-image:linux-amd64")
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("[arch] is not provided", func() {
|
||||
when("tag is provided", func() {
|
||||
// my.registry.com/my-repo/my-image:some-tag
|
||||
it("append [os] to the given tag", func() {
|
||||
input := "my.registry.com/my-repo/my-image:some-tag"
|
||||
target := dist.Target{
|
||||
OS: "linux",
|
||||
}
|
||||
|
||||
result, err := name.AppendSuffix(input, target)
|
||||
assert.Nil(err)
|
||||
assert.Equal(result, "my.registry.com/my-repo/my-image:some-tag-linux")
|
||||
})
|
||||
})
|
||||
when("tag is not provided", func() {
|
||||
// my.registry.com/my-repo/my-image
|
||||
it("add tag: [os] to the given <image>", func() {
|
||||
input := "my.registry.com/my-repo/my-image"
|
||||
target := dist.Target{
|
||||
OS: "linux",
|
||||
}
|
||||
|
||||
result, err := name.AppendSuffix(input, target)
|
||||
assert.Nil(err)
|
||||
assert.Equal(result, "my.registry.com/my-repo/my-image:linux")
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("[os] is not provided", func() {
|
||||
it("doesn't append anything and return the same <image> name", func() {
|
||||
input := "my.registry.com/my-repo/my-image"
|
||||
target := dist.Target{}
|
||||
|
||||
result, err := name.AppendSuffix(input, target)
|
||||
assert.Nil(err)
|
||||
assert.Equal(result, input)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build unix
|
||||
//go:build linux || darwin
|
||||
// +build linux darwin
|
||||
|
||||
package paths
|
||||
|
||||
|
|
|
@ -177,7 +177,6 @@ func testRegistryCache(t *testing.T, when spec.G, it spec.S) {
|
|||
Email: "john@doe.org",
|
||||
When: time.Now(),
|
||||
},
|
||||
AllowEmptyCommits: true,
|
||||
})
|
||||
h.AssertNil(t, err)
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build !windows
|
||||
// +build !windows
|
||||
|
||||
package sshdialer_test
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build unix
|
||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
|
||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
||||
|
||||
package sshdialer
|
||||
|
||||
|
|
|
@ -272,6 +272,7 @@ func NewSSHClientConfig(url *urlPkg.URL, config Config) (*ssh.ClientConfig, erro
|
|||
ssh.KeyAlgoRSASHA512,
|
||||
ssh.KeyAlgoRSASHA256,
|
||||
ssh.KeyAlgoRSA,
|
||||
ssh.KeyAlgoDSA,
|
||||
},
|
||||
Timeout: sshTimeout * time.Second,
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package sshdialer_test
|
||||
|
||||
|
|
|
@ -369,11 +369,11 @@ func NormalizeHeader(header *tar.Header, normalizeModTime bool) {
|
|||
func IsZip(path string) (bool, error) {
|
||||
r, err := zip.OpenReader(path)
|
||||
|
||||
switch err {
|
||||
case nil:
|
||||
switch {
|
||||
case err == nil:
|
||||
r.Close()
|
||||
return true, nil
|
||||
case zip.ErrFormat:
|
||||
case err == zip.ErrFormat:
|
||||
return false, nil
|
||||
default:
|
||||
return false, err
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
//go:build unix
|
||||
//go:build linux || darwin
|
||||
|
||||
package archive
|
||||
|
||||
|
|
|
@ -452,7 +452,7 @@ func newLayoutImage(target dist.Target) (*layoutImage, error) {
|
|||
return &layoutImage{Image: i}, nil
|
||||
}
|
||||
|
||||
func (b *PackageBuilder) SaveAsImage(repoName string, publish bool, target dist.Target, labels map[string]string, additionalTags ...string) (imgutil.Image, error) {
|
||||
func (b *PackageBuilder) SaveAsImage(repoName string, publish bool, target dist.Target, labels map[string]string) (imgutil.Image, error) {
|
||||
if err := b.validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -491,7 +491,7 @@ func (b *PackageBuilder) SaveAsImage(repoName string, publish bool, target dist.
|
|||
}
|
||||
}
|
||||
|
||||
if err := image.Save(additionalTags...); err != nil {
|
||||
if err := image.Save(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
@ -509,7 +509,7 @@ func validateBuildpacks(mainBP BuildModule, depBPs []BuildModule) error {
|
|||
bpd := bp.Descriptor()
|
||||
for _, orderEntry := range bpd.Order() {
|
||||
for _, groupEntry := range orderEntry.Group {
|
||||
bpFullName, err := groupEntry.FullNameWithVersion()
|
||||
bpFullName, err := groupEntry.ModuleInfo.FullNameWithVersion()
|
||||
if err != nil {
|
||||
return errors.Wrapf(
|
||||
err,
|
||||
|
|
|
@ -10,7 +10,6 @@ import (
|
|||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"testing"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
@ -790,26 +789,6 @@ func testPackageBuilder(t *testing.T, when spec.G, it spec.S) {
|
|||
h.AssertError(t, err, "adding label test.label.fail=true")
|
||||
})
|
||||
|
||||
it("sets additional tags", func() {
|
||||
buildpack1, err := ifakes.NewFakeBuildpack(dist.BuildpackDescriptor{}, 0644)
|
||||
h.AssertNil(t, err)
|
||||
|
||||
builder := buildpack.NewBuilder(mockImageFactory("linux"))
|
||||
builder.SetBuildpack(buildpack1)
|
||||
|
||||
packageImage, err := builder.SaveAsImage("some/package", false, dist.Target{OS: "linux"}, map[string]string{}, "additional-tag-one", "additional-tag-two")
|
||||
h.AssertNil(t, err)
|
||||
|
||||
i, ok := packageImage.(*fakes.Image)
|
||||
h.AssertTrue(t, ok)
|
||||
savedNames := i.SavedNames()
|
||||
slices.Sort(savedNames)
|
||||
h.AssertEq(t, 3, len(savedNames))
|
||||
h.AssertEq(t, "additional-tag-one", savedNames[0])
|
||||
h.AssertEq(t, "additional-tag-two", savedNames[1])
|
||||
h.AssertEq(t, "some/package", savedNames[2])
|
||||
})
|
||||
|
||||
when("flatten is set", func() {
|
||||
var (
|
||||
buildpack1 buildpack.BuildModule
|
||||
|
|
|
@ -36,18 +36,14 @@ func (m *MultiArchConfig) Targets() []dist.Target {
|
|||
return m.expectedTargets
|
||||
}
|
||||
|
||||
// CopyConfigFiles will, given a base directory (which is expected to be the root folder of a single buildpack or an extension),
|
||||
// copy the buildpack.toml or the extension.toml file from the base directory into the corresponding platform root folder for each target.
|
||||
// It will return an array with all the platform root folders where the buildpack.toml or the extension.toml file was copied.
|
||||
// Whether to copy the buildpack or the extension TOML file is determined by the buildpackType parameter.
|
||||
func (m *MultiArchConfig) CopyConfigFiles(baseDir string, buildpackType string) ([]string, error) {
|
||||
// CopyConfigFiles will, given a base directory (which is expected to be the root folder of a single buildpack),
|
||||
// copy the buildpack.toml file from the base directory into the corresponding platform root folder for each target.
|
||||
// It will return an array with all the platform root folders where the buildpack.toml file was copied.
|
||||
func (m *MultiArchConfig) CopyConfigFiles(baseDir string) ([]string, error) {
|
||||
var filesToClean []string
|
||||
if buildpackType == "" {
|
||||
buildpackType = KindBuildpack
|
||||
}
|
||||
targets := dist.ExpandTargetsDistributions(m.Targets()...)
|
||||
for _, target := range targets {
|
||||
path, err := CopyConfigFile(baseDir, target, buildpackType)
|
||||
path, err := CopyConfigFile(baseDir, target)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -58,19 +54,11 @@ func (m *MultiArchConfig) CopyConfigFiles(baseDir string, buildpackType string)
|
|||
return filesToClean, nil
|
||||
}
|
||||
|
||||
// CopyConfigFile will copy the buildpack.toml or the extension.toml file, based on the buildpackType parameter,
|
||||
// from the base directory into the corresponding platform folder
|
||||
// CopyConfigFile will copy the buildpack.toml file from the base directory into the corresponding platform folder
|
||||
// for the specified target and desired distribution version.
|
||||
func CopyConfigFile(baseDir string, target dist.Target, buildpackType string) (string, error) {
|
||||
var path string
|
||||
var err error
|
||||
|
||||
func CopyConfigFile(baseDir string, target dist.Target) (string, error) {
|
||||
if ok, platformRootFolder := PlatformRootFolder(baseDir, target); ok {
|
||||
if buildpackType == KindExtension {
|
||||
path, err = copyExtensionTOML(baseDir, platformRootFolder)
|
||||
} else {
|
||||
path, err = copyBuildpackTOML(baseDir, platformRootFolder)
|
||||
}
|
||||
path, err := copyBuildpackTOML(baseDir, platformRootFolder)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -132,9 +120,6 @@ func copyBuildpackTOML(src string, dest string) (string, error) {
|
|||
return copyFile(src, dest, "buildpack.toml")
|
||||
}
|
||||
|
||||
func copyExtensionTOML(src string, dest string) (string, error) {
|
||||
return copyFile(src, dest, "extension.toml")
|
||||
}
|
||||
func copyFile(src, dest, fileName string) (string, error) {
|
||||
filePath := filepath.Join(dest, fileName)
|
||||
fileToCopy, err := os.Create(filePath)
|
||||
|
|
|
@ -30,7 +30,6 @@ func testMultiArchConfig(t *testing.T, when spec.G, it spec.S) {
|
|||
logger *logging.LogWithWriters
|
||||
multiArchConfig *buildpack.MultiArchConfig
|
||||
targetsFromBuildpack []dist.Target
|
||||
targetsFromExtension []dist.Target
|
||||
targetsFromFlags []dist.Target
|
||||
tmpDir string
|
||||
)
|
||||
|
@ -110,38 +109,13 @@ func testMultiArchConfig(t *testing.T, when spec.G, it spec.S) {
|
|||
})
|
||||
|
||||
it("copies the buildpack.toml to each target platform folder", func() {
|
||||
paths, err := multiArchConfig.CopyConfigFiles(rootFolder, "buildpack")
|
||||
paths, err := multiArchConfig.CopyConfigFiles(rootFolder)
|
||||
h.AssertNil(t, err)
|
||||
h.AssertEq(t, len(paths), 2)
|
||||
h.AssertPathExists(t, filepath.Join(rootFolder, "linux", "amd64", "buildpack.toml"))
|
||||
h.AssertPathExists(t, filepath.Join(rootFolder, "linux", "arm64", "v8", "buildpack.toml"))
|
||||
})
|
||||
})
|
||||
|
||||
when("extension root folder exists", func() {
|
||||
var rootFolder string
|
||||
|
||||
it.Before(func() {
|
||||
rootFolder = filepath.Join(tmpDir, "some-extension")
|
||||
targetsFromExtension = []dist.Target{{OS: "linux", Arch: "amd64"}, {OS: "linux", Arch: "arm64", ArchVariant: "v8"}}
|
||||
multiArchConfig, err = buildpack.NewMultiArchConfig(targetsFromExtension, []dist.Target{}, logger)
|
||||
h.AssertNil(t, err)
|
||||
|
||||
// dummy multi-platform extension structure
|
||||
os.MkdirAll(filepath.Join(rootFolder, "linux", "amd64"), 0755)
|
||||
os.MkdirAll(filepath.Join(rootFolder, "linux", "arm64", "v8"), 0755)
|
||||
_, err = os.Create(filepath.Join(rootFolder, "extension.toml"))
|
||||
h.AssertNil(t, err)
|
||||
})
|
||||
|
||||
it("copies the extension.toml to each target platform folder", func() {
|
||||
paths, err := multiArchConfig.CopyConfigFiles(rootFolder, "extension")
|
||||
h.AssertNil(t, err)
|
||||
h.AssertEq(t, len(paths), 2)
|
||||
h.AssertPathExists(t, filepath.Join(rootFolder, "linux", "amd64", "extension.toml"))
|
||||
h.AssertPathExists(t, filepath.Join(rootFolder, "linux", "arm64", "v8", "extension.toml"))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("#PlatformRootFolder", func() {
|
||||
|
|
|
@ -3,8 +3,8 @@ package cache
|
|||
import (
|
||||
"context"
|
||||
|
||||
cerrdefs "github.com/containerd/errdefs"
|
||||
"github.com/docker/docker/api/types/image"
|
||||
"github.com/docker/docker/client"
|
||||
"github.com/google/go-containerregistry/pkg/name"
|
||||
)
|
||||
|
||||
|
@ -33,7 +33,7 @@ func (c *ImageCache) Clear(ctx context.Context) error {
|
|||
_, err := c.docker.ImageRemove(ctx, c.Name(), image.RemoveOptions{
|
||||
Force: true,
|
||||
})
|
||||
if err != nil && !cerrdefs.IsNotFound(err) {
|
||||
if err != nil && !client.IsErrNotFound(err) {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
|
|
@ -28,7 +28,7 @@ func TestImageCache(t *testing.T) {
|
|||
|
||||
func testImageCache(t *testing.T, when spec.G, it spec.S) {
|
||||
when("#NewImageCache", func() {
|
||||
var dockerClient client.APIClient
|
||||
var dockerClient client.CommonAPIClient
|
||||
|
||||
it.Before(func() {
|
||||
var err error
|
||||
|
@ -76,7 +76,7 @@ func testImageCache(t *testing.T, when spec.G, it spec.S) {
|
|||
|
||||
when("#Type", func() {
|
||||
var (
|
||||
dockerClient client.APIClient
|
||||
dockerClient client.CommonAPIClient
|
||||
)
|
||||
|
||||
it.Before(func() {
|
||||
|
@ -97,7 +97,7 @@ func testImageCache(t *testing.T, when spec.G, it spec.S) {
|
|||
when("#Clear", func() {
|
||||
var (
|
||||
imageName string
|
||||
dockerClient client.APIClient
|
||||
dockerClient client.CommonAPIClient
|
||||
subject *cache.ImageCache
|
||||
ctx context.Context
|
||||
)
|
||||
|
|
|
@ -9,10 +9,9 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/GoogleContainerTools/kaniko/pkg/util/proc"
|
||||
"github.com/docker/docker/client"
|
||||
"github.com/google/go-containerregistry/pkg/name"
|
||||
|
||||
cerrdefs "github.com/containerd/errdefs"
|
||||
|
||||
"github.com/buildpacks/pack/internal/config"
|
||||
"github.com/buildpacks/pack/internal/paths"
|
||||
"github.com/buildpacks/pack/pkg/logging"
|
||||
|
@ -110,7 +109,7 @@ func (c *VolumeCache) Name() string {
|
|||
|
||||
func (c *VolumeCache) Clear(ctx context.Context) error {
|
||||
err := c.docker.VolumeRemove(ctx, c.Name(), true)
|
||||
if err != nil && !cerrdefs.IsNotFound(err) {
|
||||
if err != nil && !client.IsErrNotFound(err) {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
|
|
@ -34,7 +34,7 @@ func TestVolumeCache(t *testing.T) {
|
|||
|
||||
func testCache(t *testing.T, when spec.G, it spec.S) {
|
||||
var (
|
||||
dockerClient client.APIClient
|
||||
dockerClient client.CommonAPIClient
|
||||
outBuf bytes.Buffer
|
||||
logger logging.Logger
|
||||
)
|
||||
|
@ -298,7 +298,7 @@ func testCache(t *testing.T, when spec.G, it spec.S) {
|
|||
when("#Clear", func() {
|
||||
var (
|
||||
volumeName string
|
||||
dockerClient client.APIClient
|
||||
dockerClient client.CommonAPIClient
|
||||
subject *cache.VolumeCache
|
||||
ctx context.Context
|
||||
)
|
||||
|
|
|
@ -140,9 +140,6 @@ type BuildOptions struct {
|
|||
// Launch a terminal UI to depict the build process
|
||||
Interactive bool
|
||||
|
||||
// Disable System Buildpacks present in the builder
|
||||
DisableSystemBuildpacks bool
|
||||
|
||||
// List of buildpack images or archives to add to a builder.
|
||||
// These buildpacks may overwrite those on the builder if they
|
||||
// share both an ID and Version with a buildpack on the builder.
|
||||
|
@ -228,11 +225,6 @@ type BuildOptions struct {
|
|||
|
||||
// Configuration to export to OCI layout format
|
||||
LayoutConfig *LayoutConfig
|
||||
|
||||
// Enable user namespace isolation for the build containers
|
||||
EnableUsernsHost bool
|
||||
|
||||
InsecureRegistries []string
|
||||
}
|
||||
|
||||
func (b *BuildOptions) Layout() bool {
|
||||
|
@ -305,7 +297,7 @@ type layoutPathConfig struct {
|
|||
func (c *Client) Build(ctx context.Context, opts BuildOptions) error {
|
||||
var pathsConfig layoutPathConfig
|
||||
|
||||
if RunningInContainer() && (opts.PullPolicy != image.PullAlways) {
|
||||
if RunningInContainer() && !(opts.PullPolicy == image.PullAlways) {
|
||||
c.logger.Warnf("Detected pack is running in a container; if using a shared docker host, failing to pull build inputs from a remote registry is insecure - " +
|
||||
"other tenants may have compromised build inputs stored in the daemon." +
|
||||
"This configuration is insecure and may become unsupported in the future." +
|
||||
|
@ -368,11 +360,9 @@ func (c *Client) Build(ctx context.Context, opts BuildOptions) error {
|
|||
ctx,
|
||||
builderRef.Name(),
|
||||
image.FetchOptions{
|
||||
Daemon: true,
|
||||
Target: requestedTarget,
|
||||
PullPolicy: opts.PullPolicy,
|
||||
InsecureRegistries: opts.InsecureRegistries,
|
||||
},
|
||||
Daemon: true,
|
||||
Target: requestedTarget,
|
||||
PullPolicy: opts.PullPolicy},
|
||||
)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "failed to fetch builder image '%s'", builderRef.Name())
|
||||
|
@ -394,10 +384,9 @@ func (c *Client) Build(ctx context.Context, opts BuildOptions) error {
|
|||
}
|
||||
|
||||
fetchOptions := image.FetchOptions{
|
||||
Daemon: !opts.Publish,
|
||||
PullPolicy: opts.PullPolicy,
|
||||
Target: targetToUse,
|
||||
InsecureRegistries: opts.InsecureRegistries,
|
||||
Daemon: !opts.Publish,
|
||||
PullPolicy: opts.PullPolicy,
|
||||
Target: targetToUse,
|
||||
}
|
||||
runImageName := c.resolveRunImage(opts.RunImage, imgRegistry, builderRef.Context().RegistryStr(), bldr.DefaultRunImage(), opts.AdditionalMirrors, opts.Publish, fetchOptions)
|
||||
|
||||
|
@ -416,14 +405,10 @@ func (c *Client) Build(ctx context.Context, opts BuildOptions) error {
|
|||
pathsConfig.targetRunImagePath = targetRunImagePath
|
||||
pathsConfig.hostRunImagePath = hostRunImagePath
|
||||
}
|
||||
|
||||
runImage, warnings, err := c.validateRunImage(ctx, runImageName, fetchOptions, bldr.StackID)
|
||||
runImage, err := c.validateRunImage(ctx, runImageName, fetchOptions, bldr.StackID)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "invalid run-image '%s'", runImageName)
|
||||
}
|
||||
for _, warning := range warnings {
|
||||
c.logger.Warn(warning)
|
||||
}
|
||||
|
||||
var runMixins []string
|
||||
if _, err := dist.GetLabel(runImage, stack.MixinsLabel, &runMixins); err != nil {
|
||||
|
@ -440,11 +425,6 @@ func (c *Client) Build(ctx context.Context, opts BuildOptions) error {
|
|||
return err
|
||||
}
|
||||
|
||||
system, err := c.processSystem(bldr.System(), fetchedBPs, opts.DisableSystemBuildpacks)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Default mode: if the TrustBuilder option is not set, trust the known trusted builders.
|
||||
if opts.TrustBuilder == nil {
|
||||
opts.TrustBuilder = builder.IsKnownTrustedBuilder
|
||||
|
@ -493,10 +473,9 @@ func (c *Client) Build(ctx context.Context, opts BuildOptions) error {
|
|||
ctx,
|
||||
lifecycleImageName,
|
||||
image.FetchOptions{
|
||||
Daemon: true,
|
||||
PullPolicy: opts.PullPolicy,
|
||||
Target: targetToUse,
|
||||
InsecureRegistries: opts.InsecureRegistries,
|
||||
Daemon: true,
|
||||
PullPolicy: opts.PullPolicy,
|
||||
Target: targetToUse,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
|
@ -571,8 +550,6 @@ func (c *Client) Build(ctx context.Context, opts BuildOptions) error {
|
|||
fetchedExs,
|
||||
usingPlatformAPI.LessThan("0.12"),
|
||||
opts.RunImage,
|
||||
system,
|
||||
opts.DisableSystemBuildpacks,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -588,7 +565,7 @@ func (c *Client) Build(ctx context.Context, opts BuildOptions) error {
|
|||
if targetToUse.OS == "windows" {
|
||||
return fmt.Errorf("builder contains image extensions which are not supported for Windows builds")
|
||||
}
|
||||
if opts.PullPolicy != image.PullAlways {
|
||||
if !(opts.PullPolicy == image.PullAlways) {
|
||||
return fmt.Errorf("pull policy must be 'always' when builder contains image extensions")
|
||||
}
|
||||
}
|
||||
|
@ -666,8 +643,6 @@ func (c *Client) Build(ctx context.Context, opts BuildOptions) error {
|
|||
CreationTime: opts.CreationTime,
|
||||
Layout: opts.Layout(),
|
||||
Keychain: c.keychain,
|
||||
EnableUsernsHost: opts.EnableUsernsHost,
|
||||
InsecureRegistries: opts.InsecureRegistries,
|
||||
}
|
||||
|
||||
switch {
|
||||
|
@ -830,7 +805,7 @@ func (c *Client) Build(ctx context.Context, opts BuildOptions) error {
|
|||
if err = c.lifecycleExecutor.Execute(ctx, lifecycleOpts); err != nil {
|
||||
return fmt.Errorf("executing lifecycle: %w", err)
|
||||
}
|
||||
return c.logImageNameAndSha(ctx, opts.Publish, imageRef, opts.InsecureRegistries)
|
||||
return c.logImageNameAndSha(ctx, opts.Publish, imageRef)
|
||||
}
|
||||
|
||||
func usesContainerdStorage(docker DockerClient) bool {
|
||||
|
@ -964,24 +939,22 @@ func (c *Client) getBuilder(img imgutil.Image) (*builder.Builder, error) {
|
|||
return bldr, nil
|
||||
}
|
||||
|
||||
func (c *Client) validateRunImage(context context.Context, name string, opts image.FetchOptions, expectedStack string) (runImage imgutil.Image, warnings []string, err error) {
|
||||
func (c *Client) validateRunImage(context context.Context, name string, opts image.FetchOptions, expectedStack string) (imgutil.Image, error) {
|
||||
if name == "" {
|
||||
return nil, nil, errors.New("run image must be specified")
|
||||
return nil, errors.New("run image must be specified")
|
||||
}
|
||||
img, err := c.imageFetcher.Fetch(context, name, opts)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
return nil, err
|
||||
}
|
||||
stackID, err := img.Label("io.buildpacks.stack.id")
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if stackID != expectedStack {
|
||||
warnings = append(warnings, "deprecated usage of stack")
|
||||
return nil, fmt.Errorf("run-image stack id '%s' does not match builder stack '%s'", stackID, expectedStack)
|
||||
}
|
||||
|
||||
return img, warnings, err
|
||||
return img, nil
|
||||
}
|
||||
|
||||
func (c *Client) validateMixins(additionalBuildpacks []buildpack.BuildModule, bldr *builder.Builder, runImageName string, runMixins []string) error {
|
||||
|
@ -1599,10 +1572,8 @@ func (c *Client) createEphemeralBuilder(
|
|||
extensions []buildpack.BuildModule,
|
||||
validateMixins bool,
|
||||
runImage string,
|
||||
system dist.System,
|
||||
disableSystem bool,
|
||||
) (*builder.Builder, error) {
|
||||
if !ephemeralBuilderNeeded(env, order, buildpacks, orderExtensions, extensions, runImage) && !disableSystem {
|
||||
if !ephemeralBuilderNeeded(env, order, buildpacks, orderExtensions, extensions, runImage) {
|
||||
return builder.New(rawBuilderImage, rawBuilderImage.Name(), builder.WithoutSave())
|
||||
}
|
||||
|
||||
|
@ -1634,7 +1605,6 @@ func (c *Client) createEphemeralBuilder(
|
|||
}
|
||||
|
||||
bldr.SetValidateMixins(validateMixins)
|
||||
bldr.SetSystem(system)
|
||||
|
||||
if err := bldr.Save(c.logger, builder.CreatorMetadata{Version: c.version}); err != nil {
|
||||
return nil, err
|
||||
|
@ -1684,13 +1654,13 @@ func randString(n int) string {
|
|||
return string(b)
|
||||
}
|
||||
|
||||
func (c *Client) logImageNameAndSha(ctx context.Context, publish bool, imageRef name.Reference, insecureRegistries []string) error {
|
||||
func (c *Client) logImageNameAndSha(ctx context.Context, publish bool, imageRef name.Reference) error {
|
||||
// The image name and sha are printed in the lifecycle logs, and there is no need to print it again, unless output is suppressed.
|
||||
if !logging.IsQuiet(c.logger) {
|
||||
return nil
|
||||
}
|
||||
|
||||
img, err := c.imageFetcher.Fetch(ctx, imageRef.Name(), image.FetchOptions{Daemon: !publish, PullPolicy: image.PullNever, InsecureRegistries: insecureRegistries})
|
||||
img, err := c.imageFetcher.Fetch(ctx, imageRef.Name(), image.FetchOptions{Daemon: !publish, PullPolicy: image.PullNever})
|
||||
if err != nil {
|
||||
return fmt.Errorf("fetching built image: %w", err)
|
||||
}
|
||||
|
|
|
@ -56,10 +56,8 @@ func testBuild(t *testing.T, when spec.G, it spec.S) {
|
|||
fakeLifecycle *ifakes.FakeLifecycle
|
||||
defaultBuilderStackID = "some.stack.id"
|
||||
defaultWindowsBuilderStackID = "some.windows.stack.id"
|
||||
builderImageWithSystem *fakes.Image
|
||||
defaultBuilderImage *fakes.Image
|
||||
defaultWindowsBuilderImage *fakes.Image
|
||||
builderImageWithSystemName = "example.com/default/builder-with-system:tag"
|
||||
defaultBuilderName = "example.com/default/builder:tag"
|
||||
defaultWindowsBuilderName = "example.com/windows-default/builder:tag"
|
||||
defaultRunImageName = "default/run"
|
||||
|
@ -85,18 +83,14 @@ func testBuild(t *testing.T, when spec.G, it spec.S) {
|
|||
tmpDir, err = os.MkdirTemp("", "build-test")
|
||||
h.AssertNil(t, err)
|
||||
|
||||
defaultBuilderImage = newFakeBuilderImage(t, tmpDir, defaultBuilderName, defaultBuilderStackID, defaultRunImageName, builder.DefaultLifecycleVersion, newLinuxImage, false)
|
||||
defaultBuilderImage = newFakeBuilderImage(t, tmpDir, defaultBuilderName, defaultBuilderStackID, defaultRunImageName, builder.DefaultLifecycleVersion, newLinuxImage)
|
||||
h.AssertNil(t, defaultBuilderImage.SetLabel("io.buildpacks.stack.mixins", `["mixinA", "build:mixinB", "mixinX", "build:mixinY"]`))
|
||||
fakeImageFetcher.LocalImages[defaultBuilderImage.Name()] = defaultBuilderImage
|
||||
if withExtensionsLabel {
|
||||
h.AssertNil(t, defaultBuilderImage.SetLabel("io.buildpacks.buildpack.order-extensions", `[{"group":[{"id":"some-extension-id","version":"some-extension-version"}]}]`))
|
||||
}
|
||||
|
||||
builderImageWithSystem = newFakeBuilderImage(t, tmpDir, builderImageWithSystemName, defaultBuilderStackID, defaultRunImageName, builder.DefaultLifecycleVersion, newLinuxImage, true)
|
||||
h.AssertNil(t, builderImageWithSystem.SetLabel("io.buildpacks.stack.mixins", `["mixinA", "build:mixinB", "mixinX", "build:mixinY"]`))
|
||||
fakeImageFetcher.LocalImages[builderImageWithSystem.Name()] = builderImageWithSystem
|
||||
|
||||
defaultWindowsBuilderImage = newFakeBuilderImage(t, tmpDir, defaultWindowsBuilderName, defaultWindowsBuilderStackID, defaultWindowsRunImageName, builder.DefaultLifecycleVersion, newWindowsImage, false)
|
||||
defaultWindowsBuilderImage = newFakeBuilderImage(t, tmpDir, defaultWindowsBuilderName, defaultWindowsBuilderStackID, defaultWindowsRunImageName, builder.DefaultLifecycleVersion, newWindowsImage)
|
||||
h.AssertNil(t, defaultWindowsBuilderImage.SetLabel("io.buildpacks.stack.mixins", `["mixinA", "build:mixinB", "mixinX", "build:mixinY"]`))
|
||||
fakeImageFetcher.LocalImages[defaultWindowsBuilderImage.Name()] = defaultWindowsBuilderImage
|
||||
if withExtensionsLabel {
|
||||
|
@ -148,7 +142,6 @@ func testBuild(t *testing.T, when spec.G, it spec.S) {
|
|||
|
||||
it.After(func() {
|
||||
h.AssertNilE(t, defaultBuilderImage.Cleanup())
|
||||
h.AssertNilE(t, builderImageWithSystem.Cleanup())
|
||||
h.AssertNilE(t, fakeDefaultRunImage.Cleanup())
|
||||
h.AssertNilE(t, fakeMirror1.Cleanup())
|
||||
h.AssertNilE(t, fakeMirror2.Cleanup())
|
||||
|
@ -243,7 +236,6 @@ func testBuild(t *testing.T, when spec.G, it spec.S) {
|
|||
defaultRunImageName,
|
||||
"0.3.0",
|
||||
newLinuxImage,
|
||||
false,
|
||||
)
|
||||
h.AssertNil(t, builderWithoutLifecycleImageOrCreator.SetLabel("io.buildpacks.stack.mixins", `["mixinA", "build:mixinB", "mixinX", "build:mixinY"]`))
|
||||
fakeImageFetcher.LocalImages[builderWithoutLifecycleImageOrCreator.Name()] = builderWithoutLifecycleImageOrCreator
|
||||
|
@ -482,7 +474,6 @@ func testBuild(t *testing.T, when spec.G, it spec.S) {
|
|||
nil,
|
||||
nil,
|
||||
nil,
|
||||
dist.System{},
|
||||
newLinuxImage,
|
||||
)
|
||||
|
||||
|
@ -540,14 +531,14 @@ func testBuild(t *testing.T, when spec.G, it spec.S) {
|
|||
h.AssertNil(t, fakeRunImage.SetLabel("io.buildpacks.stack.id", "other.stack"))
|
||||
})
|
||||
|
||||
it("warning", func() {
|
||||
err := subject.Build(context.TODO(), BuildOptions{
|
||||
it("errors", func() {
|
||||
h.AssertError(t, subject.Build(context.TODO(), BuildOptions{
|
||||
Image: "some/app",
|
||||
Builder: defaultBuilderName,
|
||||
RunImage: "custom/run",
|
||||
})
|
||||
h.AssertNil(t, err)
|
||||
h.AssertContains(t, outBuf.String(), "Warning: deprecated usage of stack")
|
||||
}),
|
||||
"invalid run-image 'custom/run': run-image stack id 'other.stack' does not match builder stack 'some.stack.id'",
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
|
@ -2013,7 +2004,6 @@ api = "0.2"
|
|||
defaultRunImageName,
|
||||
"0.3.0",
|
||||
newLinuxImage,
|
||||
false,
|
||||
)
|
||||
h.AssertNil(t, builderWithoutLifecycleImageOrCreator.SetLabel("io.buildpacks.stack.mixins", `["mixinA", "build:mixinB", "mixinX", "build:mixinY"]`))
|
||||
fakeImageFetcher.LocalImages[builderWithoutLifecycleImageOrCreator.Name()] = builderWithoutLifecycleImageOrCreator
|
||||
|
@ -2582,7 +2572,6 @@ api = "0.2"
|
|||
nil,
|
||||
nil,
|
||||
nil,
|
||||
dist.System{},
|
||||
newLinuxImage,
|
||||
)
|
||||
|
||||
|
@ -2635,7 +2624,6 @@ api = "0.2"
|
|||
nil,
|
||||
nil,
|
||||
nil,
|
||||
dist.System{},
|
||||
newLinuxImage,
|
||||
)
|
||||
|
||||
|
@ -2692,7 +2680,6 @@ api = "0.2"
|
|||
nil,
|
||||
nil,
|
||||
nil,
|
||||
dist.System{},
|
||||
newLinuxImage,
|
||||
)
|
||||
|
||||
|
@ -2751,7 +2738,6 @@ api = "0.2"
|
|||
nil,
|
||||
nil,
|
||||
nil,
|
||||
dist.System{},
|
||||
newLinuxImage,
|
||||
)
|
||||
|
||||
|
@ -2778,7 +2764,7 @@ api = "0.2"
|
|||
when("use creator with extensions", func() {
|
||||
when("lifecycle is old", func() {
|
||||
it("false", func() {
|
||||
oldLifecycleBuilder := newFakeBuilderImage(t, tmpDir, "example.com/old-lifecycle-builder:tag", defaultBuilderStackID, defaultRunImageName, "0.18.0", newLinuxImage, false)
|
||||
oldLifecycleBuilder := newFakeBuilderImage(t, tmpDir, "example.com/old-lifecycle-builder:tag", defaultBuilderStackID, defaultRunImageName, "0.18.0", newLinuxImage)
|
||||
defer oldLifecycleBuilder.Cleanup()
|
||||
fakeImageFetcher.LocalImages[oldLifecycleBuilder.Name()] = oldLifecycleBuilder
|
||||
|
||||
|
@ -2794,7 +2780,7 @@ api = "0.2"
|
|||
|
||||
when("lifecycle is new", func() {
|
||||
it("true", func() {
|
||||
newLifecycleBuilder := newFakeBuilderImage(t, tmpDir, "example.com/new-lifecycle-builder:tag", defaultBuilderStackID, defaultRunImageName, "0.19.0", newLinuxImage, false)
|
||||
newLifecycleBuilder := newFakeBuilderImage(t, tmpDir, "example.com/new-lifecycle-builder:tag", defaultBuilderStackID, defaultRunImageName, "0.19.0", newLinuxImage)
|
||||
defer newLifecycleBuilder.Cleanup()
|
||||
fakeImageFetcher.LocalImages[newLifecycleBuilder.Name()] = newLifecycleBuilder
|
||||
|
||||
|
@ -3334,49 +3320,6 @@ api = "0.2"
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
when("there are system buildpacks", func() {
|
||||
assertSystemEquals := func(content string) {
|
||||
t.Helper()
|
||||
|
||||
systemLayer, err := builderImageWithSystem.FindLayerWithPath("/cnb/system.toml")
|
||||
h.AssertNil(t, err)
|
||||
h.AssertOnTarEntry(t, systemLayer, "/cnb/system.toml", h.ContentEquals(content))
|
||||
}
|
||||
|
||||
it("uses the system buildpacks defined in the builder", func() {
|
||||
h.AssertNil(t, subject.Build(context.TODO(), BuildOptions{
|
||||
Image: "some/app",
|
||||
Builder: builderImageWithSystemName,
|
||||
}))
|
||||
h.AssertEq(t, fakeLifecycle.Opts.Builder.Name(), builderImageWithSystem.Name())
|
||||
h.AssertTrue(t, len(fakeLifecycle.Opts.Builder.System().Pre.Buildpacks) == 1)
|
||||
h.AssertTrue(t, len(fakeLifecycle.Opts.Builder.System().Post.Buildpacks) == 1)
|
||||
assertSystemEquals(`[system]
|
||||
[system.pre]
|
||||
|
||||
[[system.pre.buildpacks]]
|
||||
id = "buildpack.1.id"
|
||||
version = "buildpack.1.version"
|
||||
[system.post]
|
||||
|
||||
[[system.post.buildpacks]]
|
||||
id = "buildpack.2.id"
|
||||
version = "buildpack.2.version"
|
||||
`)
|
||||
})
|
||||
|
||||
it("removes system buildpacks from builder when --disable-system-buildpacks", func() {
|
||||
h.AssertNil(t, subject.Build(context.TODO(), BuildOptions{
|
||||
Image: "some/app",
|
||||
Builder: builderImageWithSystemName,
|
||||
DisableSystemBuildpacks: true,
|
||||
}))
|
||||
h.AssertEq(t, fakeLifecycle.Opts.Builder.Name(), builderImageWithSystem.Name())
|
||||
h.AssertTrue(t, len(fakeLifecycle.Opts.Builder.System().Pre.Buildpacks) == 0)
|
||||
h.AssertTrue(t, len(fakeLifecycle.Opts.Builder.System().Post.Buildpacks) == 0)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -3484,7 +3427,7 @@ func newWindowsImage(name, topLayerSha string, identifier imgutil.Identifier) *f
|
|||
return result
|
||||
}
|
||||
|
||||
func newFakeBuilderImage(t *testing.T, tmpDir, builderName, defaultBuilderStackID, runImageName, lifecycleVersion string, osImageCreator ifakes.FakeImageCreator, withSystem bool) *fakes.Image {
|
||||
func newFakeBuilderImage(t *testing.T, tmpDir, builderName, defaultBuilderStackID, runImageName, lifecycleVersion string, osImageCreator ifakes.FakeImageCreator) *fakes.Image {
|
||||
var supportedBuildpackAPIs builder.APISet
|
||||
for _, v := range api.Buildpack.Supported {
|
||||
supportedBuildpackAPIs = append(supportedBuildpackAPIs, v)
|
||||
|
@ -3493,29 +3436,6 @@ func newFakeBuilderImage(t *testing.T, tmpDir, builderName, defaultBuilderStackI
|
|||
for _, v := range api.Platform.Supported {
|
||||
supportedPlatformAPIs = append(supportedPlatformAPIs, v)
|
||||
}
|
||||
|
||||
system := dist.System{}
|
||||
if withSystem {
|
||||
system.Pre.Buildpacks = append(system.Pre.Buildpacks, []dist.ModuleRef{
|
||||
{
|
||||
Optional: false,
|
||||
ModuleInfo: dist.ModuleInfo{
|
||||
ID: "buildpack.1.id",
|
||||
Version: "buildpack.1.version",
|
||||
},
|
||||
},
|
||||
}...)
|
||||
system.Post.Buildpacks = append(system.Post.Buildpacks, []dist.ModuleRef{
|
||||
{
|
||||
Optional: false,
|
||||
ModuleInfo: dist.ModuleInfo{
|
||||
ID: "buildpack.2.id",
|
||||
Version: "buildpack.2.version",
|
||||
},
|
||||
},
|
||||
}...)
|
||||
}
|
||||
|
||||
return ifakes.NewFakeBuilderImage(t,
|
||||
tmpDir,
|
||||
builderName,
|
||||
|
@ -3622,7 +3542,6 @@ func newFakeBuilderImage(t *testing.T, tmpDir, builderName, defaultBuilderStackI
|
|||
},
|
||||
}},
|
||||
}},
|
||||
system,
|
||||
osImageCreator,
|
||||
)
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue