Skip to content

Commit 0b5a3d5

Browse files
committed
feat: add build secrets option
1 parent 86653d5 commit 0b5a3d5

File tree

3 files changed

+46
-13
lines changed

3 files changed

+46
-13
lines changed

internal/provider/cached_image_resource.go

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ type CachedImageResourceModel struct {
5151
// Optional "inputs".
5252
BaseImageCacheDir types.String `tfsdk:"base_image_cache_dir"`
5353
BuildContextPath types.String `tfsdk:"build_context_path"`
54+
BuildSecrets types.Map `tfsdk:"build_secrets"`
5455
CacheTTLDays types.Int64 `tfsdk:"cache_ttl_days"`
5556
DevcontainerDir types.String `tfsdk:"devcontainer_dir"`
5657
DevcontainerJSONPath types.String `tfsdk:"devcontainer_json_path"`

internal/provider/helpers.go

+15
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,21 @@ func optionsFromDataModel(data CachedImageResourceModel) (eboptions.Options, dia
4747
opts.BuildContextPath = data.BuildContextPath.ValueString()
4848
}
4949

50+
if !data.BuildSecrets.IsNull() {
51+
providerOpts["ENVBUILDER_BUILD_SECRETS"] = true
52+
53+
// Depending on use case, users might want to provide build secrets as a map or a list of strings.
54+
// The string list option is supported by extra_env, so we support the map option here. Envbuilder
55+
// expects a list of strings, so we convert the map to a list of strings here.
56+
buildSecretMap := tfutil.TFMapToStringMap(data.BuildSecrets)
57+
buildSecretSlice := make([]string, 0, len(buildSecretMap))
58+
for k, v := range buildSecretMap {
59+
buildSecretSlice = append(buildSecretSlice, fmt.Sprintf("%s=%s", k, v))
60+
}
61+
62+
opts.BuildSecrets = buildSecretSlice
63+
}
64+
5065
if !data.CacheTTLDays.IsNull() {
5166
providerOpts["ENVBUILDER_CACHE_TTL_DAYS"] = true
5267
opts.CacheTTLDays = data.CacheTTLDays.ValueInt64()

internal/provider/provider_internal_test.go

+30-13
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,15 @@ func Test_optionsFromDataModel(t *testing.T) {
3535
{
3636
name: "all options without extra_env",
3737
data: CachedImageResourceModel{
38-
BuilderImage: basetypes.NewStringValue("envbuilder:latest"),
39-
CacheRepo: basetypes.NewStringValue("localhost:5000/cache"),
40-
GitURL: basetypes.NewStringValue("[email protected]/devcontainer.git"),
41-
BaseImageCacheDir: basetypes.NewStringValue("/tmp/cache"),
42-
BuildContextPath: basetypes.NewStringValue("."),
38+
BuilderImage: basetypes.NewStringValue("envbuilder:latest"),
39+
CacheRepo: basetypes.NewStringValue("localhost:5000/cache"),
40+
GitURL: basetypes.NewStringValue("[email protected]/devcontainer.git"),
41+
BaseImageCacheDir: basetypes.NewStringValue("/tmp/cache"),
42+
BuildContextPath: basetypes.NewStringValue("."),
43+
BuildSecrets: basetypes.NewMapValueMust(basetypes.StringType{}, map[string]attr.Value{
44+
"FOO": basetypes.NewStringValue("bar"),
45+
"BAZ": basetypes.NewStringValue("qux"),
46+
}),
4347
CacheTTLDays: basetypes.NewInt64Value(7),
4448
DevcontainerDir: basetypes.NewStringValue(".devcontainer"),
4549
DevcontainerJSONPath: basetypes.NewStringValue(".devcontainer/devcontainer.json"),
@@ -66,6 +70,7 @@ func Test_optionsFromDataModel(t *testing.T) {
6670
GitURL: "[email protected]/devcontainer.git",
6771
BaseImageCacheDir: "/tmp/cache",
6872
BuildContextPath: ".",
73+
BuildSecrets: []string{"FOO=bar", "BAZ=qux"},
6974
CacheTTLDays: 7,
7075
DevcontainerDir: ".devcontainer",
7176
DevcontainerJSONPath: ".devcontainer/devcontainer.json",
@@ -91,15 +96,20 @@ func Test_optionsFromDataModel(t *testing.T) {
9196
name: "extra env override",
9297
data: CachedImageResourceModel{
9398
BuilderImage: basetypes.NewStringValue("envbuilder:latest"),
94-
CacheRepo: basetypes.NewStringValue("localhost:5000/cache"),
95-
GitURL: basetypes.NewStringValue("[email protected]/devcontainer.git"),
99+
BuildSecrets: basetypes.NewMapValueMust(basetypes.StringType{}, map[string]attr.Value{
100+
"FOO": basetypes.NewStringValue("bar"),
101+
}),
102+
CacheRepo: basetypes.NewStringValue("localhost:5000/cache"),
103+
GitURL: basetypes.NewStringValue("[email protected]/devcontainer.git"),
96104
ExtraEnv: extraEnvMap(t,
97105
"CODER_AGENT_TOKEN", "token",
98106
"CODER_AGENT_URL", "http://coder",
99107
"FOO", "bar",
108+
"ENVBUILDER_BUILD_SECRETS", "FOO=bar,BAZ=qux",
100109
),
101110
},
102111
expectOpts: eboptions.Options{
112+
BuildSecrets: []string{"FOO=bar", "BAZ=qux"},
103113
CacheRepo: "localhost:5000/cache",
104114
GitURL: "[email protected]/devcontainer.git",
105115
RemoteRepoBuildMode: true,
@@ -110,11 +120,14 @@ func Test_optionsFromDataModel(t *testing.T) {
110120
{
111121
name: "extra_env override warnings",
112122
data: CachedImageResourceModel{
113-
BuilderImage: basetypes.NewStringValue("envbuilder:latest"),
114-
CacheRepo: basetypes.NewStringValue("localhost:5000/cache"),
115-
GitURL: basetypes.NewStringValue("[email protected]/devcontainer.git"),
116-
BaseImageCacheDir: basetypes.NewStringValue("/tmp/cache"),
117-
BuildContextPath: basetypes.NewStringValue("."),
123+
BuilderImage: basetypes.NewStringValue("envbuilder:latest"),
124+
CacheRepo: basetypes.NewStringValue("localhost:5000/cache"),
125+
GitURL: basetypes.NewStringValue("[email protected]/devcontainer.git"),
126+
BaseImageCacheDir: basetypes.NewStringValue("/tmp/cache"),
127+
BuildContextPath: basetypes.NewStringValue("."),
128+
BuildSecrets: basetypes.NewMapValueMust(basetypes.StringType{}, map[string]attr.Value{
129+
"FOO": basetypes.NewStringValue("bar"),
130+
}),
118131
CacheTTLDays: basetypes.NewInt64Value(7),
119132
DevcontainerDir: basetypes.NewStringValue(".devcontainer"),
120133
DevcontainerJSONPath: basetypes.NewStringValue(".devcontainer/devcontainer.json"),
@@ -136,6 +149,7 @@ func Test_optionsFromDataModel(t *testing.T) {
136149
Verbose: basetypes.NewBoolValue(true),
137150
WorkspaceFolder: basetypes.NewStringValue("workspace"),
138151
ExtraEnv: extraEnvMap(t,
152+
"ENVBUILDER_BUILD_SECRETS", "FOO=bar,BAZ=qux",
139153
"ENVBUILDER_CACHE_REPO", "override",
140154
"ENVBUILDER_GIT_URL", "override",
141155
"ENVBUILDER_BASE_IMAGE_CACHE_DIR", "override",
@@ -169,6 +183,7 @@ func Test_optionsFromDataModel(t *testing.T) {
169183
// overridden
170184
BaseImageCacheDir: "override",
171185
BuildContextPath: "override",
186+
BuildSecrets: []string{"FOO=bar", "BAZ=qux"},
172187
CacheTTLDays: 8,
173188
DevcontainerDir: "override",
174189
DevcontainerJSONPath: "override",
@@ -189,7 +204,7 @@ func Test_optionsFromDataModel(t *testing.T) {
189204
Verbose: false,
190205
WorkspaceFolder: "override",
191206
},
192-
expectNumWarningDiags: 23,
207+
expectNumWarningDiags: 24,
193208
},
194209
{
195210
name: "extra_env override errors",
@@ -295,6 +310,7 @@ func Test_computeEnvFromOptions(t *testing.T) {
295310
BaseImageCacheDir: "string",
296311
BinaryPath: "string",
297312
BuildContextPath: "string",
313+
BuildSecrets: []string{"FOO=bar", "BAZ=qux"},
298314
CacheRepo: "string",
299315
CacheTTLDays: 1,
300316
CoderAgentSubsystem: []string{"one", "two"},
@@ -339,6 +355,7 @@ func Test_computeEnvFromOptions(t *testing.T) {
339355
"ENVBUILDER_BASE_IMAGE_CACHE_DIR": "string",
340356
"ENVBUILDER_BINARY_PATH": "string",
341357
"ENVBUILDER_BUILD_CONTEXT_PATH": "string",
358+
"ENVBUILDER_BUILD_SECRETS": "FOO=bar,BAZ=qux",
342359
"ENVBUILDER_CACHE_REPO": "string",
343360
"ENVBUILDER_CACHE_TTL_DAYS": "1",
344361
"ENVBUILDER_DEVCONTAINER_DIR": "string",

0 commit comments

Comments
 (0)