dependency

package
v1.74.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 18, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package dependency provides a checker for validating package dependencies. It verifies that required dependencies exist, are enabled, and satisfy version constraints.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Checker

type Checker struct {
	// contains filtered or unexported fields
}

Checker validates package dependencies against version constraints and enabled state. It checks that all required dependencies:

  1. Exist (not nil from Getter)
  2. Are enabled (IsEnabled() returns true)
  3. Satisfy version constraints

Optional dependencies are skipped if missing but still validated if present.

func NewChecker

func NewChecker(getter Getter, dependencies map[string]Dependency) *Checker

NewChecker creates a new dependency checker.

Parameters:

  • getter: Interface to retrieve dependency information by name
  • dependencies: Map of package names to their version constraints and optional flags

Example:

dependencies := map[string]Dependency{
    "database": {
        Constraint: semver.MustParseConstraint(">=1.0.0"),
        Optional:   false,
    },
    "cache": {
        Constraint: semver.MustParseConstraint(">=2.0.0"),
        Optional:   true,  // Package can work without cache
    },
}
checker := NewChecker(getter, dependencies)

func (*Checker) Check

func (c *Checker) Check() checker.Result

Check evaluates all dependencies and returns whether the package should be enabled.

Validation logic:

  1. For each dependency in the map: a. Retrieve dependency node via Getter b. If not found: - Optional dependency: skip to next - Required dependency: return disabled with reason c. If found but disabled: - Return disabled (even for optional deps if present) d. Validate version constraint: - If version doesn't satisfy constraint: return disabled
  2. If all checks pass: return enabled

Returns:

  • Result{Enabled: false, Reason: "..."} if any required dependency fails validation
  • Result{Enabled: true} if all dependencies satisfy constraints

Note: Optional dependencies are only skipped if completely missing. If an optional dependency exists, it must still be enabled and satisfy version constraints.

type Dependency

type Dependency struct {
	// Constraint specifies the required version range (e.g., ">=1.21, <2.0").
	// Uses semantic versioning constraints from github.com/Masterminds/semver/v3.
	Constraint *semver.Constraints

	// Optional indicates whether this dependency is optional.
	// If true, missing or disabled dependency will not prevent package enablement.
	// If false, dependency must exist, be enabled, and satisfy version constraint.
	Optional bool
}

Dependency defines a version constraint requirement for a package dependency.

type Getter

type Getter interface {
	// IsEnabled checks if the module enabled, returning nil means module does not exist
	IsEnabled(name string) *bool
}

Getter retrieves dependency information by name. Implementations should return nil if the dependency doesn't exist.

Example implementation:

func (s *Scheduler) GetDependency(name string) Node {
    s.mu.Lock()
    defer s.mu.Unlock()
    return s.nodes[name]
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL