@@ -7,6 +7,9 @@ terraform {
7
7
source = " kreuzwerker/docker"
8
8
version = " ~> 3.0.0"
9
9
}
10
+ envbuilder = {
11
+ source = " coder/envbuilder"
12
+ }
10
13
}
11
14
}
12
15
@@ -336,33 +339,49 @@ resource "docker_image" "envbuilder" {
336
339
keep_locally = true
337
340
}
338
341
342
+ locals {
343
+ cache_repo = " us-central1-docker.pkg.dev/coder-dogfood-v2/envbuilder-cache/coder-dogfood"
344
+ envbuilder_env = {
345
+ " CODER_AGENT_TOKEN" : coder_agent.dev.token,
346
+ " CODER_AGENT_URL" : data.coder_workspace.me.access_url,
347
+ " ENVBUILDER_GIT_USERNAME" : data.coder_external_auth.github.access_token,
348
+ # "ENVBUILDER_GIT_URL" : data.coder_parameter.devcontainer_repo.value, # The provider sets this via the `git_url` property.
349
+ " ENVBUILDER_DEVCONTAINER_DIR" : data.coder_parameter.devcontainer_dir.value,
350
+ " ENVBUILDER_INIT_SCRIPT" : coder_agent.dev.init_script,
351
+ " ENVBUILDER_FALLBACK_IMAGE" : " codercom/oss-dogfood:latest" , # This image runs if builds fail
352
+ " ENVBUILDER_PUSH_IMAGE" : " true" , # Push the image to the remote cache
353
+ # "ENVBUILDER_CACHE_REPO" : local.cache_repo, # The provider sets this via the `cache_repo` property.
354
+ " ENVBUILDER_DOCKER_CONFIG_BASE64" : data.local_sensitive_file.envbuilder_cache_dockerconfigjson.content_base64,
355
+ " USE_CAP_NET_ADMIN" : " true" ,
356
+ # Set git commit details correctly
357
+ " GIT_AUTHOR_NAME" : coalesce (data. coder_workspace_owner . me . full_name , data. coder_workspace_owner . me . name ),
358
+ " GIT_AUTHOR_EMAIL" : data.coder_workspace_owner.me.email,
359
+ " GIT_COMMITTER_NAME" : coalesce (data. coder_workspace_owner . me . full_name , data. coder_workspace_owner . me . name ),
360
+ " GIT_COMMITTER_EMAIL" : data.coder_workspace_owner.me.email,
361
+ }
362
+ }
363
+
364
+ # Check for the presence of a prebuilt image in the cache repo
365
+ # that we can use instead.
366
+ resource "envbuilder_cached_image" "cached" {
367
+ count = data. coder_workspace . me . start_count
368
+ builder_image = docker_image. envbuilder . name
369
+ git_url = data. coder_parameter . devcontainer_repo . value
370
+ cache_repo = local. cache_repo
371
+ extra_env = local. envbuilder_env
372
+ }
373
+
339
374
resource "docker_container" "workspace" {
340
375
count = data. coder_workspace . me . start_count
341
- image = docker_image . envbuilder . name
376
+ image = envbuilder_cached_image . cached . 0 . image
342
377
name = local. container_name
343
378
# Hostname makes the shell more user friendly: coder@my-workspace:~$
344
379
hostname = data. coder_workspace . me . name
345
380
# CPU limits are unnecessary since Docker will load balance automatically
346
381
memory = 32768
347
382
runtime = " sysbox-runc"
348
- env = [
349
- " CODER_AGENT_TOKEN=${ coder_agent . dev . token } " ,
350
- " CODER_AGENT_URL=${ data . coder_workspace . me . access_url } " ,
351
- " ENVBUILDER_GIT_USERNAME=${ data . coder_external_auth . github . access_token } " ,
352
- " ENVBUILDER_GIT_URL=${ data . coder_parameter . devcontainer_repo . value } " ,
353
- " ENVBUILDER_DEVCONTAINER_DIR=${ data . coder_parameter . devcontainer_dir . value } " ,
354
- " ENVBUILDER_INIT_SCRIPT=${ coder_agent . dev . init_script } " ,
355
- " ENVBUILDER_FALLBACK_IMAGE=codercom/oss-dogfood:latest" , # This image runs if builds fail
356
- # "ENVBUILDER_PUSH_IMAGE=1", # Push the image to the remote cache
357
- " ENVBUILDER_CACHE_REPO=us-central1-docker.pkg.dev/coder-dogfood-v2/envbuilder-cache/coder-dogfood" ,
358
- " ENVBUILDER_DOCKER_CONFIG_BASE64=${ data . local_sensitive_file . envbuilder_cache_dockerconfigjson . content_base64 } " ,
359
- " USE_CAP_NET_ADMIN=true" ,
360
- # Set git commit details correctly
361
- " GIT_AUTHOR_NAME=${ coalesce (data. coder_workspace_owner . me . full_name , data. coder_workspace_owner . me . name )} " ,
362
- " GIT_AUTHOR_EMAIL=${ data . coder_workspace_owner . me . email } " ,
363
- " GIT_COMMITTER_NAME=${ coalesce (data. coder_workspace_owner . me . full_name , data. coder_workspace_owner . me . name )} " ,
364
- " GIT_COMMITTER_EMAIL=${ data . coder_workspace_owner . me . email } " ,
365
- ]
383
+ # Use environment computed from the provider
384
+ env = envbuilder_cached_image. cached . 0 . env
366
385
host {
367
386
host = " host.docker.internal"
368
387
ip = " host-gateway"
@@ -401,7 +420,7 @@ resource "docker_container" "workspace" {
401
420
402
421
resource "coder_metadata" "container_info" {
403
422
count = data. coder_workspace . me . start_count
404
- resource_id = docker_container . workspace [ 0 ] . id
423
+ resource_id = coder_agent . dev . id
405
424
item {
406
425
key = " memory"
407
426
value = docker_container. workspace [0 ]. memory
0 commit comments