diff --git a/internal/config/plugin_installer.go b/internal/config/plugin_installer.go index ea14e42b44..d6f7e2c901 100644 --- a/internal/config/plugin_installer.go +++ b/internal/config/plugin_installer.go @@ -155,11 +155,32 @@ func (pr PluginRepository) Fetch(out io.Writer) PluginPackages { return PluginPackages{} } defer resp.Body.Close() + + // Handle cases when plugin repo is not available + statusCode := resp.StatusCode + if statusCode == http.StatusForbidden { + fmt.Fprintf(out, "Skipped: %s\n", pr) + fmt.Fprintf(out, " Reason: Access to plugin repository is forbidden (Status Code: %d)\n", statusCode) + return PluginPackages{} + } + if statusCode == http.StatusNotFound { + fmt.Fprintf(out, "Skipped: %s\n", pr) + fmt.Fprintf(out, " Reason: Plugin repository not found (Status Code: %d)\n", statusCode) + return PluginPackages{} + } + if statusCode != http.StatusOK { + fmt.Fprintf(out, "Skipped: %s\n", pr) + fmt.Fprintf(out, " Reason: Unexpected status (Status Code: %d)\n", statusCode) + return PluginPackages{} + } + decoder := json5.NewDecoder(resp.Body) var plugins PluginPackages if err := decoder.Decode(&plugins); err != nil { - fmt.Fprintln(out, "Failed to decode repository data:\n", err) + fmt.Fprintf(out, "Skipped: %s\n", pr) + fmt.Fprintf(out, " Reason: Failed to decode repository data:\n") + fmt.Fprintf(out, " %s\n", err) return PluginPackages{} } if len(plugins) > 0 {