in packages/package.go [569:640]
func (p *Package) Validate() error {
if ValidationDisabled {
return nil
}
if p.FormatVersion == "" {
return fmt.Errorf("no format_version set: %v", p)
}
_, err := semver.StrictNewVersion(p.FormatVersion)
if err != nil {
return fmt.Errorf("invalid package version: %s, %s", p.FormatVersion, err)
}
p.versionSemVer, err = semver.StrictNewVersion(p.Version)
if err != nil {
return err
}
if p.Release == "" {
p.Release = releaseForSemVerCompat(p.versionSemVer)
}
if p.Title == nil || *p.Title == "" {
return fmt.Errorf("no title set for package: %s", p.Name)
}
if p.Description == "" {
return fmt.Errorf("no description set")
}
j := 0
for i, c := range p.Categories {
if _, ok := Categories[c]; !ok {
p.logger.Warn("package uses an unknown category, will be ignored",
zap.String("package", p.Name),
zap.String("version", p.Version),
zap.String("category", c))
continue
}
p.Categories[j] = p.Categories[i]
j += 1
}
p.Categories = p.Categories[:j]
fs, err := p.fs()
if err != nil {
return err
}
defer fs.Close()
for _, i := range p.Icons {
_, err := fs.Stat(i.Src)
if err != nil {
return err
}
}
for _, s := range p.Screenshots {
_, err := fs.Stat(s.Src)
if err != nil {
return err
}
}
err = p.validateVersionConsistency()
if err != nil {
return fmt.Errorf("version in manifest file is not consistent with path: %w", err)
}
return p.ValidateDataStreams()
}