8000 fix: allow setting MagicDir in Options by johnstcn · Pull Request #337 · coder/envbuilder · GitHub
[go: up one dir, main page]

Skip to content

fix: allow setting MagicDir in Options #337

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Sep 9, 2024
Merged
Prev Previous commit
Next Next commit
rm unnecessary test
  • Loading branch information
johnstcn committed Sep 6, 2024
commit 61029cf2106b1bb22ce87919c5863f443e167e27
105 changes: 0 additions & 105 deletions integration/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1599,111 +1599,6 @@ COPY --from=prebuild /the-future/hello.txt /the-future/hello.txt
require.Equal(t, "hello from the past\nhello from the future\n/the-past/hello.txt", strings.TrimSpace(out))
})

t.Run("MultistageRunCopyMinimal", func(t *testing.T) {
t.Parallel()

srv := gittest.CreateGitServer(t, gittest.Options{
Files: map[string]string{
"Dockerfile": fmt.Sprintf(`
FROM %[1]s AS a
RUN date > /date.txt
FROM %[1]s
COPY --from=a /date.txt /date.txt
`, testImageAlpine),
},
})

// Given: an empty registry
testReg := setupInMemoryRegistry(t, setupInMemoryRegistryOpts{})
testRepo := testReg + "/test"
ref, err := name.ParseReference(testRepo + ":latest")
require.NoError(t, err)
_, err = remote.Image(ref)
require.ErrorContains(t, err, "NAME_UNKNOWN", "expected image to not be present before build + push")

// When: we run envbuilder with GET_CACHED_IMAGE
_, err = runEnvbuilder(t, runOpts{env: []string{
envbuilderEnv("GIT_URL", srv.URL),
envbuilderEnv("CACHE_REPO", testRepo),
envbuilderEnv("GET_CACHED_IMAGE", "1"),
envbuilderEnv("DOCKERFILE_PATH", "Dockerfile"),
envbuilderEnv("VERBOSE", "1"),
}})
require.ErrorContains(t, err, "error probing build cache: uncached RUN command")
// Then: it should fail to build the image and nothing should be pushed
_, err = remote.Image(ref)
require.ErrorContains(t, err, "NAME_UNKNOWN", "expected image to not be present before build + push")

// When: we run envbuilder with PUSH_IMAGE set
_, err = runEnvbuilder(t, runOpts{env: []string{
envbuilderEnv("GIT_URL", srv.URL),
envbuilderEnv("CACHE_REPO", testRepo),
envbuilderEnv("PUSH_IMAGE", "1"),
envbuilderEnv("DOCKERFILE_PATH", "Dockerfile"),
envbuilderEnv("VERBOSE", "1"),
}})
require.NoError(t, err)

// Then: the image should be pushed
_, err = remote.Image(ref)
require.NoError(t, err, "expected image to be present after build + push")

// Then: re-running envbuilder with GET_CACHED_IMAGE should succeed
ctrID, err := runEnvbuilder(t, runOpts{env: []string{
envbuilderEnv("GIT_URL", srv.URL),
envbuilderEnv("CACHE_REPO", testRepo),
envbuilderEnv("GET_CACHED_IMAGE", "1"),
envbuilderEnv("DOCKERFILE_PATH", "Dockerfile"),
envbuilderEnv("VERBOSE", "1"),
}})
require.NoError(t, err)

// Then: the cached image ref should be emitted in the container logs
ctx, cancel := context.WithCancel(context.Background())
t.Cleanup(cancel)
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
require.NoError(t, err)
defer cli.Close()
logs, err := cli.ContainerLogs(ctx, ctrID, container.LogsOptions{
ShowStdout: true,
ShowStderr: true,
})
require.NoError(t, err)
defer logs.Close()
logBytes, err := io.ReadAll(logs)
require.NoError(t, err)
require.Regexp(t, `ENVBUILDER_CACHED_IMAGE=(\S+)`, string(logBytes))

// When: we pull the image we just built
rc, err := cli.ImagePull(ctx, ref.String(), image.PullOptions{})
require.NoError(t, err)
t.Cleanup(func() { _ = rc.Close() })
_, err = io.ReadAll(rc)
require.NoError(t, err)

// When: we run the image we just built
ctr, err := cli.ContainerCreate(ctx, &container.Config{
Image: ref.String(),
Entrypoint: []string{"sleep", "infinity"},
Labels: map[string]string{
testContainerLabel: "true",
},
}, nil, nil, nil, "")
require.NoError(t, err)
t.Cleanup(func() {
_ = cli.ContainerRemove(ctx, ctr.ID, container.RemoveOptions{
RemoveVolumes: true,
Force: true,
})
})
err = cli.ContainerStart(ctx, ctr.ID, container.StartOptions{})
require.NoError(t, err)

// Then: The files from the image are present.
out := execContainer(t, ctr.ID, "/bin/sh -c 'cat /date.txt'")
require.NotEmpty(t, strings.TrimSpace(out))
})

t.Run("MultistgeCacheMissAfterChange", func(t *testing.T) {
t.Parallel()
dockerfilePrebuildContents := fmt.Sprintf(`
Expand Down
0