Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Add `read-configuration` subcommand to output a merged devcontainer configuration

Ouverte
#210 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
35/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
docker, go
Domaine
cli, tooling

Piste de recherche

Commencez par l’invocation proposée read-configuration --include-merged-configuration et les deux scripts devcontainers CLI référencés. Suivez la façon dont Envbuilder lit le devcontainer.json du projet et traite les features, puis comparez le résultat avec la sortie d’exemple. Le travail est terminé lorsque la commande émet une configuration fusionnée contenant les paramètres du projet et les contributions des features.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Note: If we implement option 1 from https://github.com/coder/envbuilder/issues/211, we could punt this feature for the time being.

This feature is a pre-requisite for generating a computed devcontainer.json for use by e.g. coder modules. This can help resolve issues like https://github.com/coder/envbuilder/issues/68 where a list of extensions needs to be available during installation of vscode, code-server, etc.

This commands main purpose is to output a merged configuration based on the projects devcontainer.json as well as configuration introduced by features.

A logical approach would be to mimic @devcontainer/cli output. Doing so would make envbuilder a versatile tool for interpreting devcontainer features, and potentially a drop-in single binary alternative.

Here's an example output from @devcontainer/cli when run against the microsoft/vscode repo.

devcontainer read-configuration --include-merged-configuration --log-format json --workspace-folder /tmp/envbuilder/vscode
{
	"configuration": {
		"name": "Code - OSS",
		"build": {"dockerfile": "Dockerfile"},
		"features": {"ghcr.io/devcontainers/features/desktop-lite:1": {}},
		"containerEnv": {"DISPLAY": ""},
		"overrideCommand": false,
		"privileged": true,
		"mounts": [
			{"source": "vscode-dev", "target": "/vscode-dev", "type": "volume"}
		],
		"postCreateCommand": "./.devcontainer/post-create.sh",
		"customizations": {
			"vscode": {
				"settings": {
					"resmon.show.battery": false,
					"resmon.show.cpufreq": false
				},
				"extensions": [
					"dbaeumer.vscode-eslint",
					"EditorConfig.EditorConfig",
					"GitHub.vscode-pull-request-github",
					"ms-vscode.vscode-github-issue-notebooks",
					"ms-vscode.vscode-selfhost-test-provider",
					"mutantdino.resourcemonitor"
				]
			}
		},
		"forwardPorts": [6080, 5901],
		"portsAttributes": {
			"5901": {"label": "VNC TCP port", "onAutoForward": "silent"},
			"6080": {"label": "VNC web client (noVNC)", "onAutoForward": "silent"}
		},
		"hostRequirements": {"memory": "9gb"},
		"configFilePath": {
			"$mid": 1,
			"fsPath": "/tmp/envbuilder/vscode/.devcontainer/devcontainer.json",
			"path": "/tmp/envbuilder/vscode/.devcontainer/devcontainer.json",
			"scheme": "vscode-fileHost"
		}
	},
	"workspace": {
		"workspaceFolder": "/workspaces/vscode",
		"workspaceMount": "type=bind,source=/tmp/envbuilder/vscode,target=/workspaces/vscode"
	},
	"featuresConfiguration": {
		"featureSets": [
			{
				"sourceInformation": {
					"type": "oci",
					"manifest": {
						"schemaVersion": 2,
						"mediaType": "application/vnd.oci.image.manifest.v1+json",
						"config": {
							"mediaType": "application/vnd.devcontainers",
							"digest": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
							"size": 0
						},
						"layers": [
							{
								"mediaType": "application/vnd.devcontainers.layer.v1+tar",
								"digest": "sha256:9b79df4771f1f348da15db16e84ae640164027b2ea89ea86643394c6c2ff4dad",
								"size": 28160,
								"annotations": {
									"org.opencontainers.image.title": "devcontainer-feature-desktop-lite.tgz"
								}
							}
						],
						"annotations": {"com.github.package.type": "devcontainer_feature"}
					},
					"manifestDigest": "sha256:e7dc4d37ab9e3d6e7ebb221bac741f5bfe07dae47025399d038b17af2ed8ddb7",
					"featureRef": {
						"id": "desktop-lite",
						"owner": "devcontainers",
						"namespace": "devcontainers/features",
						"registry": "ghcr.io",
						"resource": "ghcr.io/devcontainers/features/desktop-lite",
						"path": "devcontainers/features/desktop-lite",
						"version": "1",
						"tag": "1"
					},
					"userFeatureId": "ghcr.io/devcontainers/features/desktop-lite:1",
					"userFeatureIdWithoutVersion": "ghcr.io/devcontainers/features/desktop-lite"
				},
				"features": [
					{
						"id": "desktop-lite",
						"version": "1.0.8",
						"name": "Light-weight Desktop",
						"documentationURL": "https://github.com/devcontainers/features/tree/main/src/desktop-lite",
						"description": "Adds a lightweight Fluxbox based desktop to the container that can be accessed using a VNC viewer or the web. GUI-based commands executed from the built-in VS code terminal will open on the desktop automatically.",
						"options": {
							"version": {
								"type": "string",
								"proposals": ["latest"],
								"default": "latest",
								"description": "Currently Unused!"
							},
							"noVncVersion": {
								"type": "string",
								"proposals": ["1.2.0"],
								"default": "1.2.0",
								"description": "NoVnc Version"
							},
							"password": {
								"type": "string",
								"proposals": ["vscode", "codespaces", "password"],
								"default": "vscode",
								"description": "Enter a password for desktop connections"
							},
							"webPort": {
								"type": "string",
								"proposals": ["6080"],
								"default": "6080",
								"description": "Enter a port for the VNC web client"
							},
							"vncPort": {
								"type": "string",
								"proposals": ["5901"],
								"default": "5901",
								"description": "Enter a port for the desktop VNC server"
							}
						},
						"init": true,
						"entrypoint": "/usr/local/share/desktop-init.sh",
						"containerEnv": {"DISPLAY": ":1"},
						"installsAfter": ["ghcr.io/devcontainers/features/common-utils"],
						"included": true,
						"value": {},
						"cachePath": "/tmp/devcontainercli-coder/container-features/0.60.0-1716804265094/desktop-lite_0",
						"consecutiveId": "desktop-lite_0"
					}
				],
				"internalVersion": "2",
				"computedDigest": "sha256:e7dc4d37ab9e3d6e7ebb221bac741f5bfe07dae47025399d038b17af2ed8ddb7"
			}
		],
		"dstFolder": "/tmp/devcontainercli-coder/container-features/0.60.0-1716804265094"
	},
	"mergedConfiguration": {
		"name": "Code - OSS",
		"build": {"dockerfile": "Dockerfile"},
		"features": {"ghcr.io/devcontainers/features/desktop-lite:1": {}},
		"containerEnv": {"DISPLAY": ""},
		"overrideCommand": false,
		"privileged": true,
		"mounts": [
			{"source": "vscode-dev", "target": "/vscode-dev", "type": "volume"}
		],
		"forwardPorts": [6080, 5901],
		"portsAttributes": {
			"5901": {"label": "VNC TCP port", "onAutoForward": "silent"},
			"6080": {"label": "VNC web client (noVNC)", "onAutoForward": "silent"}
		},
		"hostRequirements": {"cpus": 0, "memory": "9663676416"},
		"configFilePath": {
			"$mid": 1,
			"fsPath": "/tmp/envbuilder/vscode/.devcontainer/devcontainer.json",
			"path": "/tmp/envbuilder/vscode/.devcontainer/devcontainer.json",
			"scheme": "vscode-fileHost"
		},
		"init": true,
		"entrypoints": ["/usr/local/share/desktop-init.sh"],
		"customizations": {
			"vscode": [
				{"extensions": ["dbaeumer.vscode-eslint"]},
				{"extensions": ["dbaeumer.vscode-eslint"]},
				{"extensions": ["dbaeumer.vscode-eslint"]},
				{
					"settings": {
						"resmon.show.battery": false,
						"resmon.show.cpufreq": false
					},
					"extensions": [
						"dbaeumer.vscode-eslint",
						"EditorConfig.EditorConfig",
						"GitHub.vscode-pull-request-github",
						"ms-vscode.vscode-github-issue-notebooks",
						"ms-vscode.vscode-selfhost-test-provider",
						"mutantdino.resourcemonitor"
					]
				}
			]
		},
		"onCreateCommands": [],
		"updateContentCommands": [],
		"postCreateCommands": ["./.devcontainer/post-create.sh"],
		"postStartCommands": [],
		"postAttachCommands": [],
		"remoteUser": "node",
		"remoteEnv": {}
	}
}

Under .configuration the only new field is .configuration.configFilePath. Otherwise this is the project devcontainer.json as-is. The rest: .workspace, .featuresConfiguration and .mergedConfiguration are all added by read-configuration (and the merged config flag).

For this issue, we're mainly interested in implementing .mergedConfiguration.

Reference:

Logs (for reference)
{"type":"text","level":3,"timestamp":1716804265041,"text":"@devcontainers/cli 0.60.0. Node.js v18.20.2. linux 5.19.17-051917-generic x64."}
{"type":"start","level":2,"timestamp":1716804265041,"text":"Run: git rev-parse --show-cdup"}
{"type":"stop","level":2,"timestamp":1716804265049,"text":"Run: git rev-parse --show-cdup","startTimestamp":1716804265041}
{"type":"start","level":2,"timestamp":1716804265050,"text":"Run: docker ps -q -a --filter label=devcontainer.local_folder=/tmp/envbuilder/vscode --filter label=devcontainer.config_file=/tmp/envbuilder/vscode/.devcontainer/devcontainer.json"}
{"type":"stop","level":2,"timestamp":1716804265072,"text":"Run: docker ps -q -a --filter label=devcontainer.local_folder=/tmp/envbuilder/vscode --filter label=devcontainer.config_file=/tmp/envbuilder/vscode/.devcontainer/devcontainer.json","startTimestamp":1716804265050}
{"type":"start","level":2,"timestamp":1716804265072,"text":"Run: docker ps -q -a --filter label=devcontainer.local_folder=/tmp/envbuilder/vscode"}
{"type":"stop","level":2,"timestamp":1716804265094,"text":"Run: docker ps -q -a --filter label=devcontainer.local_folder=/tmp/envbuilder/vscode","startTimestamp":1716804265072}
{"type":"text","level":1,"timestamp":1716804265095,"text":"workspace root: /tmp/envbuilder/vscode"}
{"type":"text","level":1,"timestamp":1716804265095,"text":"configPath: /tmp/envbuilder/vscode/.devcontainer/devcontainer.json"}
{"type":"text","level":1,"timestamp":1716804265096,"text":"--- Processing User Features ----"}
{"type":"text","level":1,"timestamp":1716804265096,"text":"[* user-provided] ghcr.io/devcontainers/features/desktop-lite:1"}
{"type":"text","level":3,"timestamp":1716804265096,"text":"Resolving Feature dependencies for 'ghcr.io/devcontainers/features/desktop-lite:1'..."}
{"type":"text","level":2,"timestamp":1716804265097,"text":"* Processing feature: ghcr.io/devcontainers/features/desktop-lite:1"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"> input: ghcr.io/devcontainers/features/desktop-lite:1"}
{"type":"text","level":1,"timestamp":1716804265097,"text":">"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"> resource: ghcr.io/devcontainers/features/desktop-lite"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"> id: desktop-lite"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"> owner: devcontainers"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"> namespace: devcontainers/features"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"> registry: ghcr.io"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"> path: devcontainers/features/desktop-lite"}
{"type":"text","level":1,"timestamp":1716804265097,"text":">"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"> version: 1"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"> tag?: 1"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"> digest?: undefined"}
{"type":"text","level":1,"timestamp":1716804265097,"text":"manifest url: https://ghcr.io/v2/devcontainers/features/desktop-lite/manifests/sha256:e7dc4d37ab9e3d6e7ebb221bac741f5bfe07dae47025399d038b17af2ed8ddb7"}
{"type":"text","level":1,"timestamp":1716804265322,"text":"[httpOci] Attempting to authenticate via 'Bearer' auth."}
{"type":"text","level":1,"timestamp":1716804265324,"text":"[httpOci] No authentication credentials found for registry 'ghcr.io' via docker config or credential helper."}
{"type":"text","level":1,"timestamp":1716804265324,"text":"[httpOci] No authentication credentials found for registry 'ghcr.io'. Accessing anonymously."}
{"type":"text","level":1,"timestamp":1716804265324,"text":"[httpOci] Attempting to fetch bearer token from:  https://ghcr.io/token?service=ghcr.io&scope=repository:devcontainers/features/desktop-lite:pull"}
{"type":"text","level":1,"timestamp":1716804265766,"text":"[httpOci] 200 on reattempt after auth: https://ghcr.io/v2/devcontainers/features/desktop-lite/manifests/sha256:e7dc4d37ab9e3d6e7ebb221bac741f5bfe07dae47025399d038b17af2ed8ddb7"}
{"type":"text","level":1,"timestamp":1716804265767,"text":"> input: ghcr.io/devcontainers/features/desktop-lite:1"}
{"type":"text","level":1,"timestamp":1716804265767,"text":">"}
{"type":"text","level":1,"timestamp":1716804265767,"text":"> resource: ghcr.io/devcontainers/features/desktop-lite"}
{"type":"text","level":1,"timestamp":1716804265767,"text":"> id: desktop-lite"}
{"type":"text","level":1,"timestamp":1716804265767,"text":"> owner: devcontainers"}
{"type":"text","level":1,"timestamp":1716804265767,"text":"> namespace: devcontainers/features"}
{"type":"text","level":1,"timestamp":1716804265767,"text":"> registry: ghcr.io"}
{"type":"text","level":1,"timestamp":1716804265767,"text":"> path: devcontainers/features/desktop-lite"}
{"type":"text","level":1,"timestamp":1716804265767,"text":">"}
{"type":"text","level":1,"timestamp":1716804265767,"text":"> version: 1"}
{"type":"text","level":1,"timestamp":1716804265767,"text":"> tag?: 1"}
{"type":"text","level":1,"timestamp":1716804265767,"text":"> digest?: undefined"}
{"type":"text","level":1,"timestamp":1716804265768,"text":"blob url: https://ghcr.io/v2/devcontainers/features/desktop-lite/blobs/sha256:9b79df4771f1f348da15db16e84ae640164027b2ea89ea86643394c6c2ff4dad"}
{"type":"text","level":1,"timestamp":1716804265769,"text":"[httpOci] Applying cachedAuthHeader for registry ghcr.io..."}
{"type":"text","level":1,"timestamp":1716804266117,"text":"[httpOci] 200 (Cached): https://ghcr.io/v2/devcontainers/features/desktop-lite/blobs/sha256:9b79df4771f1f348da15db16e84ae640164027b2ea89ea86643394c6c2ff4dad"}
{"type":"text","level":1,"timestamp":1716804266125,"text":"./ : Directory"}
{"type":"text","level":1,"timestamp":1716804266128,"text":"./NOTES.md : File"}
{"type":"text","level":1,"timestamp":1716804266129,"text":"./README.md : File"}
{"type":"text","level":1,"timestamp":1716804266129,"text":"./devcontainer-feature.json : File"}
{"type":"text","level":1,"timestamp":1716804266129,"text":"./install.sh : File"}
{"type":"text","level":1,"timestamp":1716804266135,"text":"Files extracted from blob: ./NOTES.md, ./README.md, ./devcontainer-feature.json, ./install.sh"}
{"type":"text","level":1,"timestamp":1716804266138,"text":"Found metadata file 'devcontainer-feature.json' in blob"}
{"type":"text","level":2,"timestamp":1716804266139,"text":"* Processing feature: ghcr.io/devcontainers/features/common-utils"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"> input: ghcr.io/devcontainers/features/common-utils"}
{"type":"text","level":1,"timestamp":1716804266139,"text":">"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"> resource: ghcr.io/devcontainers/features/common-utils"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"> id: common-utils"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"> owner: devcontainers"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"> namespace: devcontainers/features"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"> registry: ghcr.io"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"> path: devcontainers/features/common-utils"}
{"type":"text","level":1,"timestamp":1716804266139,"text":">"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"> version: latest"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"> tag?: latest"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"> digest?: undefined"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"manifest url: https://ghcr.io/v2/devcontainers/features/common-utils/manifests/latest"}
{"type":"text","level":1,"timestamp":1716804266139,"text":"[httpOci] Applying cachedAuthHeader for registry ghcr.io..."}
{"type":"text","level":1,"timestamp":1716804266380,"text":"[httpOci] 200 (Cached): https://ghcr.io/v2/devcontainers/features/common-utils/manifests/latest"}
{"type":"text","level":1,"timestamp":1716804266380,"text":"> input: ghcr.io/devcontainers/features/common-utils"}
{"type":"text","level":1,"timestamp":1716804266380,"text":">"}
{"type":"text","level":1,"timestamp":1716804266380,"text":"> resource: ghcr.io/devcontainers/features/common-utils"}
{"type":"text","level":1,"timestamp":1716804266380,"text":"> id: common-utils"}
{"type":"text","level":1,"timestamp":1716804266380,"text":"> owner: devcontainers"}
{"type":"text","level":1,"timestamp":1716804266380,"text":"> namespace: devcontainers/features"}
{"type":"text","level":1,"timestamp":1716804266380,"text":"> registry: ghcr.io"}
{"type":"text","level":1,"timestamp":1716804266380,"text":"> path: devcontainers/features/common-utils"}
{"type":"text","level":1,"timestamp":1716804266380,"text":">"}
{"type":"text","level":1,"timestamp":1716804266380,"text":"> version: latest"}
{"type":"text","level":1,"timestamp":1716804266380,"text":"> tag?: latest"}
{"type":"text","level":1,"timestamp":1716804266380,"text":"> digest?: undefined"}
{"type":"text","level":1,"timestamp":1716804266381,"text":"[* resolved worklist] ghcr.io/devcontainers/features/desktop-lite:1"}
{"type":"text","level":1,"timestamp":1716804266381,"text":"[\n  {\n    \"type\": \"user-provided\",\n    \"userFeatureId\": \"ghcr.io/devcontainers/features/desktop-lite:1\",\n    \"options\": {},\n    \"dependsOn\": [],\n    \"installsAfter\": [\n      {\n        \"type\": \"resolved\",\n        \"userFeatureId\": \"ghcr.io/devcontainers/features/common-utils\",\n        \"options\": {},\n        \"featureSet\": {\n          \"sourceInformation\": {\n            \"type\": \"oci\",\n            \"manifest\": {\n              \"schemaVersion\": 2,\n              \"mediaType\": \"application/vnd.oci.image.manifest.v1+json\",\n              \"config\": {\n                \"mediaType\": \"application/vnd.devcontainers\",\n                \"digest\": \"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n                \"size\": 0\n              },\n              \"layers\": [\n                {\n                  \"mediaType\": \"application/vnd.devcontainers.layer.v1+tar\",\n                  \"digest\": \"sha256:d846c58d563c29194c84f0af63fcfdef7b9c27982e9c974e0eff94c48fb89c4b\",\n                  \"size\": 47104,\n                  \"annotations\": {\n                    \"org.opencontainers.image.title\": \"devcontainer-feature-common-utils.tgz\"\n                  }\n                }\n              ],\n              \"annotations\": {\n                \"dev.containers.metadata\": \"{\\\"id\\\":\\\"common-utils\\\",\\\"version\\\":\\\"2.4.3\\\",\\\"name\\\":\\\"Common Utilities\\\",\\\"documentationURL\\\":\\\"https://github.com/devcontainers/features/tree/main/src/common-utils\\\",\\\"description\\\":\\\"Installs a set of common command line utilities, Oh My Zsh!, and sets up a non-root user.\\\",\\\"options\\\":{\\\"installZsh\\\":{\\\"type\\\":\\\"boolean\\\",\\\"default\\\":true,\\\"description\\\":\\\"Install ZSH?\\\"},\\\"configureZshAsDefaultShell\\\":{\\\"type\\\":\\\"boolean\\\",\\\"default\\\":false,\\\"description\\\":\\\"Change default shell to ZSH?\\\"},\\\"installOhMyZsh\\\":{\\\"type\\\":\\\"boolean\\\",\\\"default\\\":true,\\\"description\\\":\\\"Install Oh My Zsh!?\\\"},\\\"installOhMyZshConfig\\\":{\\\"type\\\":\\\"boolean\\\",\\\"default\\\":true,\\\"description\\\":\\\"Allow installing the default dev container .zshrc templates?\\\"},\\\"upgradePackages\\\":{\\\"type\\\":\\\"boolean\\\",\\\"default\\\":true,\\\"description\\\":\\\"Upgrade OS packages?\\\"},\\\"username\\\":{\\\"type\\\":\\\"string\\\",\\\"proposals\\\":[\\\"devcontainer\\\",\\\"vscode\\\",\\\"codespace\\\",\\\"none\\\",\\\"automatic\\\"],\\\"default\\\":\\\"automatic\\\",\\\"description\\\":\\\"Enter name of a non-root user to configure or none to skip\\\"},\\\"userUid\\\":{\\\"type\\\":\\\"string\\\",\\\"proposals\\\":[\\\"1001\\\",\\\"automatic\\\"],\\\"default\\\":\\\"automatic\\\",\\\"description\\\":\\\"Enter UID for non-root user\\\"},\\\"userGid\\\":{\\\"type\\\":\\\"string\\\",\\\"proposals\\\":[\\\"1001\\\",\\\"automatic\\\"],\\\"default\\\":\\\"automatic\\\",\\\"description\\\":\\\"Enter GID for non-root user\\\"},\\\"nonFreePackages\\\":{\\\"type\\\":\\\"boolean\\\",\\\"default\\\":false,\\\"description\\\":\\\"Add packages from non-free Debian repository? (Debian only)\\\"}}}\",\n                \"com.github.package.type\": \"devcontainer_feature\"\n              }\n            },\n            \"manifestDigest\": \"sha256:e9e1d402031416ed5fc500f242c27ffa1043a27b5ba612e6596ea62503c8ae70\",\n            \"featureRef\": {\n              \"id\": \"common-utils\",\n              \"owner\": \"devcontainers\",\n              \"namespace\": \"devcontainers/features\",\n              \"registry\": \"ghcr.io\",\n              \"resource\": \"ghcr.io/devcontainers/features/common-utils\",\n              \"path\": \"devcontainers/features/common-utils\",\n              \"version\": \"latest\",\n              \"tag\": \"latest\"\n            },\n            \"userFeatureId\": \"ghcr.io/devcontainers/features/common-utils\",\n            \"userFeatureIdWithoutVersion\": \"ghcr.io/devcontainers/features/common-utils\"\n          },\n          \"features\": [\n            {\n              \"id\": \"common-utils\",\n              \"included\": true,\n              \"value\": {}\n            }\n          ]\n        },\n        \"dependsOn\": [],\n        \"installsAfter\": [],\n        \"roundPriority\": 0,\n        \"featureIdAliases\": [\n          \"common-utils\"\n        ]\n      }\n    ],\n    \"roundPriority\": 0,\n    \"featureSet\": {\n      \"sourceInformation\": {\n        \"type\": \"oci\",\n        \"manifest\": {\n          \"schemaVersion\": 2,\n          \"mediaType\": \"application/vnd.oci.image.manifest.v1+json\",\n          \"config\": {\n            \"mediaType\": \"application/vnd.devcontainers\",\n            \"digest\": \"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n            \"size\": 0\n          },\n          \"layers\": [\n            {\n              \"mediaType\": \"application/vnd.devcontainers.layer.v1+tar\",\n              \"digest\": \"sha256:9b79df4771f1f348da15db16e84ae640164027b2ea89ea86643394c6c2ff4dad\",\n              \"size\": 28160,\n              \"annotations\": {\n                \"org.opencontainers.image.title\": \"devcontainer-feature-desktop-lite.tgz\"\n              }\n            }\n          ],\n          \"annotations\": {\n            \"com.github.package.type\": \"devcontainer_feature\"\n          }\n        },\n        \"manifestDigest\": \"sha256:e7dc4d37ab9e3d6e7ebb221bac741f5bfe07dae47025399d038b17af2ed8ddb7\",\n        \"featureRef\": {\n          \"id\": \"desktop-lite\",\n          \"owner\": \"devcontainers\",\n          \"namespace\": \"devcontainers/features\",\n          \"registry\": \"ghcr.io\",\n          \"resource\": \"ghcr.io/devcontainers/features/desktop-lite\",\n          \"path\": \"devcontainers/features/desktop-lite\",\n          \"version\": \"1\",\n          \"tag\": \"1\"\n        },\n        \"userFeatureId\": \"ghcr.io/devcontainers/features/desktop-lite:1\",\n        \"userFeatureIdWithoutVersion\": \"ghcr.io/devcontainers/features/desktop-lite\"\n      },\n      \"features\": [\n        {\n          \"id\": \"desktop-lite\",\n          \"included\": true,\n          \"value\": {},\n          \"version\": \"1.0.8\",\n          \"name\": \"Light-weight Desktop\",\n          \"documentationURL\": \"https://github.com/devcontainers/features/tree/main/src/desktop-lite\",\n          \"description\": \"Adds a lightweight Fluxbox based desktop to the container that can be accessed using a VNC viewer or the web. GUI-based commands executed from the built-in VS code terminal will open on the desktop automatically.\",\n          \"options\": {\n            \"version\": {\n              \"type\": \"string\",\n              \"proposals\": [\n                \"latest\"\n              ],\n              \"default\": \"latest\",\n              \"description\": \"Currently Unused!\"\n            },\n            \"noVncVersion\": {\n              \"type\": \"string\",\n              \"proposals\": [\n                \"1.2.0\"\n              ],\n              \"default\": \"1.2.0\",\n              \"description\": \"NoVnc Version\"\n            },\n            \"password\": {\n              \"type\": \"string\",\n              \"proposals\": [\n                \"vscode\",\n                \"codespaces\",\n                \"password\"\n              ],\n              \"default\": \"vscode\",\n              \"description\": \"Enter a password for desktop connections\"\n            },\n            \"webPort\": {\n              \"type\": \"string\",\n              \"proposals\": [\n                \"6080\"\n              ],\n              \"default\": \"6080\",\n              \"description\": \"Enter a port for the VNC web client\"\n            },\n            \"vncPort\": {\n              \"type\": \"string\",\n              \"proposals\": [\n                \"5901\"\n              ],\n              \"default\": \"5901\",\n              \"description\": \"Enter a port for the desktop VNC server\"\n            }\n          },\n          \"init\": true,\n          \"entrypoint\": \"/usr/local/share/desktop-init.sh\",\n          \"containerEnv\": {\n            \"DISPLAY\": \":1\"\n          },\n          \"installsAfter\": [\n            \"ghcr.io/devcontainers/features/common-utils\"\n          ]\n        }\n      ]\n    },\n    \"featureIdAliases\": [\n      \"desktop-lite\"\n    ]\n  }\n]"}
{"type":"text","level":1,"timestamp":1716804266382,"text":"[raw worklist]: ghcr.io/devcontainers/features/desktop-lite:1"}
{"type":"text","level":3,"timestamp":1716804266382,"text":"Soft-dependency 'ghcr.io/devcontainers/features/common-utils' is not required.  Removing from installation order..."}
{"type":"text","level":1,"timestamp":1716804266382,"text":"[worklist-without-dangling-soft-deps]: ghcr.io/devcontainers/features/desktop-lite:1"}
{"type":"text","level":1,"timestamp":1716804266382,"text":"Starting round-based Feature install order calculation from worklist..."}
{"type":"text","level":1,"timestamp":1716804266382,"text":"\n[round] ghcr.io/devcontainers/features/desktop-lite:1"}
{"type":"text","level":1,"timestamp":1716804266382,"text":"[round-candidates] ghcr.io/devcontainers/features/desktop-lite:1 (0)"}
{"type":"text","level":1,"timestamp":1716804266382,"text":"[round-after-filter-priority] (maxPriority=0) ghcr.io/devcontainers/features/desktop-lite:1 (0)"}
{"type":"text","level":1,"timestamp":1716804266383,"text":"[round-after-comparesTo] ghcr.io/devcontainers/features/desktop-lite:1"}
{"type":"text","level":1,"timestamp":1716804266383,"text":"--- Fetching User Features ----"}
{"type":"text","level":2,"timestamp":1716804266383,"text":"* Fetching feature: desktop-lite_0_oci"}
{"type":"text","level":1,"timestamp":1716804266383,"text":"Fetching from OCI"}
{"type":"text","level":1,"timestamp":1716804266384,"text":"blob url: https://ghcr.io/v2/devcontainers/features/desktop-lite/blobs/sha256:9b79df4771f1f348da15db16e84ae640164027b2ea89ea86643394c6c2ff4dad"}
{"type":"text","level":1,"timestamp":1716804266384,"text":"[httpOci] Applying cachedAuthHeader for registry ghcr.io..."}
{"type":"text","level":1,"timestamp":1716804266615,"text":"[httpOci] 200 (Cached): https://ghcr.io/v2/devcontainers/features/desktop-lite/blobs/sha256:9b79df4771f1f348da15db16e84ae640164027b2ea89ea86643394c6c2ff4dad"}
{"type":"text","level":1,"timestamp":1716804266617,"text":"./ : Directory"}
{"type":"text","level":1,"timestamp":1716804266617,"text":"./NOTES.md : File"}
{"type":"text","level":1,"timestamp":1716804266618,"text":"./README.md : File"}
{"type":"text","level":1,"timestamp":1716804266618,"text":"./devcontainer-feature.json : File"}
{"type":"text","level":1,"timestamp":1716804266618,"text":"./install.sh : File"}
{"type":"text","level":1,"timestamp":1716804266621,"text":"Files extracted from blob: ./NOTES.md, ./README.md, ./devcontainer-feature.json, ./install.sh"}
{"type":"text","level":2,"timestamp":1716804266623,"text":"* Fetched feature: desktop-lite_0_oci version 1.0.8"}
{"type":"start","level":2,"timestamp":1716804266682,"text":"Run: docker inspect --type image mcr.microsoft.com/devcontainers/typescript-node:18-bookworm"}
{"type":"stop","level":2,"timestamp":1716804266705,"text":"Run: docker inspect --type image mcr.microsoft.com/devcontainers/typescript-node:18-bookworm","startTimestamp":1716804266682}
{"type":"text","level":1,"timestamp":1716804266706,"text":"> input: mcr.microsoft.com/devcontainers/typescript-node:18-bookworm"}
{"type":"text","level":1,"timestamp":1716804266706,"text":">"}
{"type":"text","level":1,"timestamp":1716804266706,"text":"> resource: mcr.microsoft.com/devcontainers/typescript-node"}
{"type":"text","level":1,"timestamp":1716804266706,"text":"> id: typescript-node"}
{"type":"text","level":1,"timestamp":1716804266706,"text":"> owner: devcontainers"}
{"type":"text","level":1,"timestamp":1716804266706,"text":"> namespace: devcontainers"}
{"type":"text","level":1,"timestamp":1716804266706,"text":"> registry: mcr.microsoft.com"}
{"type":"text","level":1,"timestamp":1716804266706,"text":"> path: devcontainers/typescript-node"}
{"type":"text","level":1,"timestamp":1716804266706,"text":">"}
{"type":"text","level":1,"timestamp":1716804266706,"text":"> version: 18-bookworm"}
{"type":"text","level":1,"timestamp":1716804266706,"text":"> tag?: 18-bookworm"}
{"type":"text","level":1,"timestamp":1716804266706,"text":"> digest?: undefined"}
{"type":"text","level":1,"timestamp":1716804266706,"text":"manifest url: https://mcr.microsoft.com/v2/devcontainers/typescript-node/manifests/18-bookworm"}
{"type":"text","level":1,"timestamp":1716804266932,"text":"[httpOci] 404 (NoAuth): https://mcr.microsoft.com/v2/devcontainers/typescript-node/manifests/18-bookworm"}
{"type":"text","level":1,"timestamp":1716804266932,"text":"Did not fetch target with expected mimetype 'application/vnd.docker.distribution.manifest.v2+json': {\"errors\":[{\"code\":\"MANIFEST_UNKNOWN\",\"message\":\"OCI index found, but accept header does not support OCI indexes\"}]}\n"}
{"type":"text","level":1,"timestamp":1716804267105,"text":"[httpOci] 200 (NoAuth): https://mcr.microsoft.com/v2/devcontainers/typescript-node/manifests/18-bookworm"}
{"type":"text","level":1,"timestamp":1716804267105,"text":"Fetched: {\n    \"schemaVersion\": 2,\n    \"mediaType\": \"application/vnd.oci.image.index.v1+json\",\n    \"manifests\": [\n        {\n            \"mediaType\": \"application/vnd.oci.image.manifest.v1+json\",\n            \"digest\": \"sha256:a3193b69f2d1f0ce6d6511b85c913579c17f4e7fe0ad8fb71c3d53c717580f6b\",\n            \"size\": 4485,\n            \"platform\": {\n                \"architecture\": \"amd64\",\n                \"os\": \"linux\"\n            }\n        },\n        {\n            \"mediaType\": \"application/vnd.oci.image.manifest.v1+json\",\n            \"digest\": \"sha256:e9a4f6e413715d8989a0fa381b6b3fb3144d15d729367cb0fd4cda6b3e4544e9\",\n            \"size\": 4485,\n            \"platform\": {\n                \"architecture\": \"arm64\",\n                \"os\": \"linux\"\n            }\n        },\n        {\n            \"mediaType\": \"application/vnd.oci.image.manifest.v1+json\",\n            \"digest\": \"sha256:73d619643bd152d04f7fa9f777f2825633a529e278e5c2bdc2e438feecf15daa\",\n            \"size\": 566,\n            \"annotations\": {\n                \"vnd.docker.reference.digest\": \"sha256:a3193b69f2d1f0ce6d6511b85c913579c17f4e7fe0ad8fb71c3d53c717580f6b\",\n                \"vnd.docker.reference.type\": \"attestation-manifest\"\n            },\n            \"platform\": {\n                \"architecture\": \"unknown\",\n                \"os\": \"unknown\"\n            }\n        },\n        {\n            \"mediaType\": \"application/vnd.oci.image.manifest.v1+json\",\n            \"digest\": \"sha256:3375f4eed28c1b8a3082b8a0d9d6f0e3ed74c32d67a2e319e22a84ed97c289c7\",\n            \"size\": 566,\n            \"annotations\": {\n                \"vnd.docker.reference.digest\": \"sha256:e9a4f6e413715d8989a0fa381b6b3fb3144d15d729367cb0fd4cda6b3e4544e9\",\n                \"vnd.docker.reference.type\": \"attestation-manifest\"\n            },\n            \"platform\": {\n                \"architecture\": \"unknown\",\n                \"os\": \"unknown\"\n            }\n        }\n    ]\n}"}
{"type":"text","level":1,"timestamp":1716804267426,"text":"[httpOci] 200 (NoAuth): https://mcr.microsoft.com/v2/devcontainers/typescript-node/manifests/sha256:a3193b69f2d1f0ce6d6511b85c913579c17f4e7fe0ad8fb71c3d53c717580f6b"}
{"type":"text","level":1,"timestamp":1716804267426,"text":"blob url: https://mcr.microsoft.com/v2/devcontainers/typescript-node/blobs/sha256:e01bfe3472dd64911ad4c13469b9400de923cdc3fc11367aef217cf5bab01988"}
{"type":"text","level":1,"timestamp":1716804267944,"text":"[httpOci] 200 (NoAuth): https://mcr.microsoft.com/v2/devcontainers/typescript-node/blobs/sha256:e01bfe3472dd64911ad4c13469b9400de923cdc3fc11367aef217cf5bab01988"}
Langage dominant
Go
Étoiles
300
Forks
64
Merge moyen
20 min
PR mergées (30 j)
1

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de coder/envbuilder

Toutes les issues de coder/envbuilder

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.