(path, command string, project *types.Project)
| 244 | } |
| 245 | |
| 246 | func (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 | |
| 281 | type ProviderMetadata struct { |
| 282 | Description string `json:"description"` |
no test coverage detected