(containerDetails: ContainerDetails, devContainerConfig: SubstitutedConfig<DevContainerConfig>, featuresConfig: FeaturesConfig | undefined, idLabels: string[] | undefined, output: Log)
| 438 | export const imageMetadataLabel = 'devcontainer.metadata'; |
| 439 | |
| 440 | export function getImageMetadataFromContainer(containerDetails: ContainerDetails, devContainerConfig: SubstitutedConfig<DevContainerConfig>, featuresConfig: FeaturesConfig | undefined, idLabels: string[] | undefined, output: Log): SubstitutedConfig<ImageMetadataEntry[]> { |
| 441 | if (!(containerDetails.Config.Labels || {})[imageMetadataLabel]) { |
| 442 | return getDevcontainerMetadata({ config: [], raw: [], substitute: devContainerConfig.substitute }, devContainerConfig, featuresConfig); |
| 443 | } |
| 444 | const metadata = internalGetImageMetadata(containerDetails, devContainerConfig.substitute, output); |
| 445 | const hasIdLabels = !!idLabels && Object.keys(envListToObj(idLabels)) |
| 446 | .every(label => (containerDetails.Config.Labels || {})[label]); |
| 447 | if (hasIdLabels) { |
| 448 | return { |
| 449 | config: [ |
| 450 | ...metadata.config, |
| 451 | pick(devContainerConfig.config, pickUpdateableConfigProperties), |
| 452 | ].filter(config => Object.keys(config).length), |
| 453 | raw: [ |
| 454 | ...metadata.raw, |
| 455 | pick(devContainerConfig.raw, pickUpdateableConfigProperties), |
| 456 | ].filter(config => Object.keys(config).length), |
| 457 | substitute: metadata.substitute, |
| 458 | }; |
| 459 | } |
| 460 | return getDevcontainerMetadata(metadata, devContainerConfig, featuresConfig); |
| 461 | } |
| 462 | |
| 463 | export function getImageMetadata(imageDetails: ImageDetails, substitute: SubstituteConfig, output: Log) { |
| 464 | return internalGetImageMetadata(imageDetails, substitute, output); |
no test coverage detected