MCPcopy
hub / github.com/docker/compose / getPluginMetadata

Method getPluginMetadata

pkg/compose/plugins.go:246–279  ·  view source on GitHub ↗
(path, command string, project *types.Project)

Source from the content-addressed store, hash-verified

244}
245
246func (s *composeService) getPluginMetadata(path, command string, project *types.Project) ProviderMetadata {
247 cmd := exec.Command(path, "compose", "metadata")
248 err := s.prepareShellOut(context.Background(), project.Environment, cmd)
249 if err != nil {
250 logrus.Debugf("failed to prepare plugin metadata command: %v", err)
251 return ProviderMetadata{}
252 }
253 stdout := &bytes.Buffer{}
254 cmd.Stdout = stdout
255
256 if err := cmd.Run(); err != nil {
257 logrus.Debugf("failed to start plugin metadata command: %v", err)
258 return ProviderMetadata{}
259 }
260
261 var metadata ProviderMetadata
262 if err := json.Unmarshal(stdout.Bytes(), &metadata); err != nil {
263 output, _ := io.ReadAll(stdout)
264 logrus.Debugf("failed to decode plugin metadata: %v - %s", err, output)
265 return ProviderMetadata{}
266 }
267 // Save metadata into docker home directory to be used by Docker LSP tool
268 // Just log the error as it's not a critical error for the main flow
269 metadataDir := filepath.Join(config.Dir(), providerMetadataDirectory)
270 if err := os.MkdirAll(metadataDir, 0o700); err == nil {
271 metadataFilePath := filepath.Join(metadataDir, command+".json")
272 if err := os.WriteFile(metadataFilePath, stdout.Bytes(), 0o600); err != nil {
273 logrus.Debugf("failed to save plugin metadata: %v", err)
274 }
275 } else {
276 logrus.Debugf("failed to create plugin metadata directory: %v", err)
277 }
278 return metadata
279}
280
281type ProviderMetadata struct {
282 Description string `json:"description"`

Callers 1

setupPluginCommandMethod · 0.95

Calls 6

prepareShellOutMethod · 0.95
CommandMethod · 0.80
BytesMethod · 0.80
MkdirAllMethod · 0.80
WriteFileMethod · 0.80
DirMethod · 0.45

Tested by

no test coverage detected