diff --git a/cmd/devcontainer/src/runtime/compose/tests.rs b/cmd/devcontainer/src/runtime/compose/tests.rs
index f50046eaf..d886d6c82 100644
--- a/cmd/devcontainer/src/runtime/compose/tests.rs
+++ b/cmd/devcontainer/src/runtime/compose/tests.rs
@@ -64,6 +64,22 @@ fn compose_project_name_defaults_to_workspace_devcontainer() {
let _ = fs::remove_dir_all(root);
}
+#[test]
+fn compose_project_name_defaults_to_compose_working_dir_basename() {
+ let root = unique_temp_dir("devcontainer-compose-test");
+ let compose_file = root.join("docker-compose.yml");
+ fs::create_dir_all(&root).expect("compose dir");
+ fs::write(&compose_file, "services:\n app:\n image: alpine:3.20\n").expect("compose");
+
+ let project_name = compose_project_name(&[compose_file]).expect("project name");
+
+ assert_eq!(
+ project_name,
+ root.file_name().unwrap().to_string_lossy().to_lowercase()
+ );
+ let _ = fs::remove_dir_all(root);
+}
+
#[test]
fn compose_name_from_file_reads_top_level_name() {
let root = unique_temp_dir("devcontainer-compose-test");
diff --git a/cmd/devcontainer/src/runtime/container/uid_update.rs b/cmd/devcontainer/src/runtime/container/uid_update.rs
index 496ba4882..9bd3c454c 100644
--- a/cmd/devcontainer/src/runtime/container/uid_update.rs
+++ b/cmd/devcontainer/src/runtime/container/uid_update.rs
@@ -16,6 +16,8 @@ use super::super::paths::unique_temp_path;
const UID_UPDATE_IMAGE_INSPECT_FORMAT: &str =
"{{.Config.User}}\n{{.Os}}/{{.Architecture}}{{if .Variant}}/{{.Variant}}{{end}}";
+const UID_UPDATE_IMAGE_INSPECT_FORMAT_NO_VARIANT: &str =
+ "{{.Config.User}}\n{{.Os}}/{{.Architecture}}";
#[derive(Debug, Eq, PartialEq)]
struct UidUpdateDetails {
@@ -263,13 +265,44 @@ fn inspect_image_details_for_uid_update_once(
)?;
if result.status_code != 0 {
let error = engine::stderr_or_stdout(&result);
+ if is_missing_variant_template_error(&error) {
+ return inspect_image_details_without_variant(args, image_name);
+ }
if is_missing_local_image_inspect_error(&error) {
return Ok(None);
}
return Err(error);
}
- let mut lines = result.stdout.lines();
+ parse_image_inspect_details(&result.stdout)
+}
+
+fn inspect_image_details_without_variant(
+ args: &[String],
+ image_name: &str,
+) -> Result