(name string)
| 112 | } |
| 113 | |
| 114 | func LoadFile(name string) (chart.Charter, error) { |
| 115 | if fi, err := os.Stat(name); err != nil { |
| 116 | return nil, err |
| 117 | } else if fi.IsDir() { |
| 118 | return nil, errors.New("cannot load a directory") |
| 119 | } |
| 120 | |
| 121 | raw, err := os.Open(name) |
| 122 | if err != nil { |
| 123 | return nil, err |
| 124 | } |
| 125 | defer raw.Close() |
| 126 | |
| 127 | err = archive.EnsureArchive(name, raw) |
| 128 | if err != nil { |
| 129 | return nil, err |
| 130 | } |
| 131 | |
| 132 | files, err := archive.LoadArchiveFiles(raw) |
| 133 | if err != nil { |
| 134 | if errors.Is(err, gzip.ErrHeader) { |
| 135 | return nil, fmt.Errorf("file '%s' does not appear to be a valid chart file (details: %w)", name, err) |
| 136 | } |
| 137 | return nil, errors.New("unable to load chart archive") |
| 138 | } |
| 139 | |
| 140 | for _, f := range files { |
| 141 | if f.Name == "Chart.yaml" { |
| 142 | c := new(chartBase) |
| 143 | if err := yaml.Unmarshal(f.Data, c); err != nil { |
| 144 | return c, fmt.Errorf("cannot load Chart.yaml: %w", err) |
| 145 | } |
| 146 | switch c.APIVersion { |
| 147 | case c2.APIVersionV1, c2.APIVersionV2, "": |
| 148 | return c2load.Load(name) |
| 149 | case c3.APIVersionV3: |
| 150 | return c3load.Load(name) |
| 151 | default: |
| 152 | return nil, errors.New("unsupported chart version") |
| 153 | } |
| 154 | } |
| 155 | } |
| 156 | |
| 157 | return nil, errors.New("unable to detect chart version, no Chart.yaml found") |
| 158 | } |
| 159 | |
| 160 | // LoadArchive loads from a reader containing a compressed tar archive. |
| 161 | func LoadArchive(in io.Reader) (chart.Charter, error) { |
no test coverage detected
searching dependent graphs…