From d10bea155ddc97a4d136fe64092443e30cb05fb3 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Thu, 6 Jun 2024 10:03:22 +0200 Subject: [PATCH 1/2] feat: expose runtime markers --- envbuilder.go | 13 ++++++++++++- envbuilder_internal_test.go | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/envbuilder.go b/envbuilder.go index 7e88cbee..0c245f2c 100644 --- a/envbuilder.go +++ b/envbuilder.go @@ -259,11 +259,15 @@ func Run(ctx context.Context, options Options) error { var ( buildParams *devcontainer.Compiled scripts devcontainer.LifecycleScripts + + devcontainerPath string ) if options.DockerfilePath == "" { // Only look for a devcontainer if a Dockerfile wasn't specified. // devcontainer is a standard, so it's reasonable to be the default. - devcontainerPath, devcontainerDir, err := findDevcontainerJSON(options) + var devcontainerDir string + var err error + devcontainerPath, devcontainerDir, err = findDevcontainerJSON(options) if err != nil { options.Logger(notcodersdk.LogLevelError, "Failed to locate devcontainer.json: %s", err.Error()) options.Logger(notcodersdk.LogLevelError, "Falling back to the default image...") @@ -661,6 +665,13 @@ func Run(ctx context.Context, options Options) error { maps.Copy(containerEnv, buildParams.ContainerEnv) maps.Copy(remoteEnv, buildParams.RemoteEnv) + // Set Envbuilder runtime markers + containerEnv["ENVBUILDER"] = "true" + if devcontainerPath != "" { + containerEnv["DEVCONTAINER"] = "true" + containerEnv["DEVCONTAINER_CONFIG"] = devcontainerPath + } + for _, env := range []map[string]string{containerEnv, remoteEnv} { envKeys := make([]string, 0, len(env)) for key := range env { diff --git a/envbuilder_internal_test.go b/envbuilder_internal_test.go index 967e15d0..6ca5fc12 100644 --- a/envbuilder_internal_test.go +++ b/envbuilder_internal_test.go @@ -27,7 +27,7 @@ func TestFindDevcontainerJSON(t *testing.T) { require.Error(t, err) }) - t.Run("devcontainers.json is missing", func(t *testing.T) { + t.Run("devcontainer.json is missing", func(t *testing.T) { t.Parallel() // given From 9f9ad16ac762c181e4041e105c450502361de340 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Thu, 6 Jun 2024 10:16:47 +0200 Subject: [PATCH 2/2] unit test --- integration/integration_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/integration/integration_test.go b/integration/integration_test.go index 7628b8bc..8733788d 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -680,7 +680,10 @@ func TestContainerEnv(t *testing.T) { output := execContainer(t, ctr, "cat /env") require.Contains(t, strings.TrimSpace(output), - `FROM_CONTAINER_ENV=bar + `DEVCONTAINER=true +DEVCONTAINER_CONFIG=/workspaces/empty/.devcontainer/devcontainer.json +ENVBUILDER=true +FROM_CONTAINER_ENV=bar FROM_DOCKERFILE=foo FROM_REMOTE_ENV=baz PATH=/usr/local/bin:/bin:/go/bin:/opt