func()

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()
}