pkgcontext

package
v0.0.0-...-f6d69f8 Latest Latest
Warning

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

Go to latest
Published: Apr 22, 2026 License: GPL-3.0 Imports: 39 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrDependencyHasNoTagsOrReleases = errors.New("dependency does not publish tags or releases")
View Source
var ErrNotRemotePackage = errors.New("remote repository does not declare a package")

ErrNotRemotePackage describes a repository that does not contain a package definition file

Functions

func CleanInvalidRepository

func CleanInvalidRepository(path string) error

CleanInvalidRepository removes a repository if it fails validation

func DiagnoseRepository

func DiagnoseRepository(path string) (diagnosis string, healthy bool)

DiagnoseRepository provides detailed diagnostic information about a repository

func RepairRepository

func RepairRepository(path string) error

RepairRepository attempts to repair a corrupted repository

func ValidateRepository

func ValidateRepository(path string) (valid bool, err error)

ValidateRepository performs checks on a git repository to ensure it's in a healthy state

func ValidateRepositoryWithRefs

func ValidateRepositoryWithRefs(path string, requiredRefs []string) (valid bool, err error)

ValidateRepositoryWithRefs performs validation and also checks if specific refs exist

func WrapGitError

func WrapGitError(err error, meta versioning.DependencyMeta) error

WrapGitError provides concise, helpful error messages for Git operations

Types

type BuildLockfileController

type BuildLockfileController interface {
	LockfileController
	RecordBuildToLockfile(compilerVersion, compilerPreset, entry, output string)
}

BuildLockfileController extends LockfileController with build recording behavior.

type BuildOptions

type BuildOptions struct {
	Name      string
	Ensure    bool
	DryRun    bool
	Relative  bool
	BuildFile string
	Trigger   chan build.Problems
}

type DependencyLock

type DependencyLock interface {
	GetLockedVersion(meta versioning.DependencyMeta) versioning.DependencyMeta
	GetPreviousDependency(meta versioning.DependencyMeta) (lockfile.LockedDependency, bool)
	RecordResolution(meta versioning.DependencyMeta, resolution lockfile.DependencyResolution, transitive bool, requiredBy string) error
	RecordLocalDependency(meta versioning.DependencyMeta) error
	PruneMissing(currentDeps []versioning.DependencyMeta)
	RecordRuntime(version, platform, runtimeType string, files []lockfile.LockedFileInfo)
	RecordBuild(record lockfile.BuildRecord)
	Save() error
	ForceUpdate()
	HasLockfile() bool
	GetLockfile() *lockfile.Lockfile
}

DependencyLock abstracts lockfile-aware dependency resolution for package flows.

type DependencyUpdateRequest

type DependencyUpdateRequest struct {
	Enabled    bool
	Force      bool
	Target     string
	TargetMeta versioning.DependencyMeta
}

DependencyUpdateRequest describes how an ensure/update flow should refresh direct dependencies.

func (DependencyUpdateRequest) HasTarget

func (request DependencyUpdateRequest) HasTarget() bool

func (DependencyUpdateRequest) Matches

func (request DependencyUpdateRequest) Matches(meta versioning.DependencyMeta) bool

func (DependencyUpdateRequest) ShouldForceDependency

func (request DependencyUpdateRequest) ShouldForceDependency(meta versioning.DependencyMeta, direct bool) bool

type GitMultiAuth

type GitMultiAuth struct {
	HTTP transport.AuthMethod
	SSH  transport.AuthMethod
}

GitMultiAuth stores separate auth methods for HTTPS and SSH remotes.

func (*GitMultiAuth) Name

func (a *GitMultiAuth) Name() string

Name satisfies transport.AuthMethod.

func (*GitMultiAuth) String

func (a *GitMultiAuth) String() string

String satisfies transport.AuthMethod.

type GitRepositoryHealth

type GitRepositoryHealth struct{}

GitRepositoryHealth is the default repository health checker backed by package helpers.

func (GitRepositoryHealth) Repair

func (GitRepositoryHealth) Repair(path string) error

func (GitRepositoryHealth) Validate

func (GitRepositoryHealth) Validate(path string) (bool, error)

type GitRepositoryStore

type GitRepositoryStore struct{}

GitRepositoryStore is the default repository store backed by go-git.

func (GitRepositoryStore) Clone

func (GitRepositoryStore) Clone(path string, isBare bool, opts *git.CloneOptions) (*git.Repository, error)

func (GitRepositoryStore) Open

func (GitRepositoryStore) Open(path string) (*git.Repository, error)

type LockfileController

type LockfileController interface {
	SaveLockfile() error
	HasLockfile() bool
	ForceUpdateLockfile()
	HasLockfileResolver() bool
	GetLockfile() *lockfile.Lockfile
}

LockfileController exposes the command-facing lockfile behavior supported by PackageContext.

type LockfileInitializer

type LockfileInitializer interface {
	InitLockfileResolver(sampctlVersion string) error
}

LockfileInitializer initializes lockfile resolution for a package context.

type LockfileUpdater

type LockfileUpdater interface {
	UpdateLockfile(ctx context.Context, request DependencyUpdateRequest) error
}

LockfileUpdater updates lockfile contents without installing dependencies into the working tree.

type NewPackageContextOptions

type NewPackageContextOptions struct {
	GitHub         *github.Client
	Auth           transport.AuthMethod
	Parent         bool
	Dir            string
	Platform       string
	CacheDir       string
	Vendor         string
	Init           bool
	UseLockfile    bool
	AppVersion     string
	RemotePackages pawnpackage.RemotePackageFetcher
	RepoStore      RepositoryStore
	RepoHealth     RepositoryHealth
	RuntimeEnv     RuntimeEnvironment
	RuntimeProv    RuntimeProvisioner
}

type PackageContext

type PackageContext struct {
	Package pawnpackage.Package // the package this context wraps

	PackageServices
	PackageResolvedState
	PackageExecutionState
	PackageLockfileState
}

PackageContext stores state for a package during its lifecycle.

func NewPackageContext

func NewPackageContext(options NewPackageContextOptions) (pcx *PackageContext, err error)

NewPackageContext attempts to parse a directory as a Package by looking for a `pawn.json` or `pawn.yaml` file and unmarshalling it - additional parameters are required to specify whether or not the package is a "parent package" and where the vendor directory is.

func NewPackageContextWithLockfile

func NewPackageContextWithLockfile(options NewPackageContextOptions) (pcx *PackageContext, err error)

NewPackageContextWithLockfile creates a PackageContext with lockfile support enabled.

func (*PackageContext) Build

func (pcx *PackageContext) Build(
	ctx context.Context,
	options BuildOptions,
) (
	problems build.Problems,
	result build.Result,
	err error,
)

Build compiles a package, dependencies are ensured and a list of paths are sent to the compiler.

func (*PackageContext) BuildWatch

func (pcx *PackageContext) BuildWatch(ctx context.Context, options BuildOptions) (err error)

BuildWatch runs the Build code on file changes

func (*PackageContext) EnsureDependencies

func (pcx *PackageContext) EnsureDependencies(ctx context.Context, forceUpdate bool) (err error)

EnsureDependencies traverses package dependencies and ensures they are up to date.

func (*PackageContext) EnsureDependenciesCached

func (pcx *PackageContext) EnsureDependenciesCached() error

EnsureDependenciesCached will recursively visit a parent package dependencies in the cache, pulling them if they do not exist yet.

func (PackageContext) EnsureDependencyCached

func (pcx PackageContext) EnsureDependencyCached(
	meta versioning.DependencyMeta,
	forceUpdate bool,
) (repo *git.Repository, err error)

EnsureDependencyCached clones a package to path using the default branch

func (PackageContext) EnsureDependencyFromCache

func (pcx PackageContext) EnsureDependencyFromCache(
	meta versioning.DependencyMeta,
	path string,
	forceUpdate bool,
) (repo *git.Repository, err error)

EnsureDependencyFromCache ensures the repository at `path` is up to date

func (*PackageContext) EnsurePackage

func (pcx *PackageContext) EnsurePackage(meta versioning.DependencyMeta, forceUpdate bool) error

EnsurePackage will make sure a vendor directory contains the specified package. If the package is not present, it will clone it at the correct version tag, sha1 or HEAD. If the package is present, it will ensure the directory contains the correct version. When lockfile support is enabled, it uses locked versions for reproducibility.

func (*PackageContext) EnsurePackageWithParent

func (pcx *PackageContext) EnsurePackageWithParent(meta versioning.DependencyMeta, forceUpdate bool, parentRepo string) error

EnsurePackageWithParent ensures a package and records it as a transitive dependency.

func (*PackageContext) EnsureProject

func (pcx *PackageContext) EnsureProject(ctx context.Context, request DependencyUpdateRequest) (bool, error)

EnsureProject applies the full project ensure flow used by user-facing commands. It updates direct dependency references when requested, ensures dependency/runtime files, and persists the lockfile when lockfile support is enabled.

func (*PackageContext) ForceUpdateLockfile

func (pcx *PackageContext) ForceUpdateLockfile()

ForceUpdateLockfile resets the lockfile state so fresh versions are resolved.

func (*PackageContext) GatherPlugins

func (pcx *PackageContext) GatherPlugins() (pluginDeps []versioning.DependencyMeta, err error)

GatherPlugins iterates the AllPlugins list and appends them to the runtime dependencies list

func (*PackageContext) GetLockfile

func (pcx *PackageContext) GetLockfile() *lockfile.Lockfile

GetLockfile returns the current in-memory lockfile, if one is active.

func (*PackageContext) GetResolvedCommit

func (pcx *PackageContext) GetResolvedCommit(dependencyPath string) (string, error)

GetResolvedCommit returns the resolved commit SHA for a dependency path

func (*PackageContext) HasLockfile

func (pcx *PackageContext) HasLockfile() bool

HasLockfile returns true if the package has a lockfile

func (*PackageContext) HasLockfileResolver

func (pcx *PackageContext) HasLockfileResolver() bool

HasLockfileResolver reports whether lockfile support is enabled for the package context.

func (*PackageContext) InitLockfileResolver

func (pcx *PackageContext) InitLockfileResolver(sampctlVersion string) error

InitLockfileResolver initializes the lockfile resolver for an existing PackageContext. This can be called after NewPackageContext if lockfile support wasn't enabled initially.

func (*PackageContext) Install

func (pcx *PackageContext) Install(
	ctx context.Context,
	targets []versioning.DependencyString,
	development bool,
) (err error)

Install adds a new dependency to an existing local parent package

func (*PackageContext) RecordBuildToLockfile

func (pcx *PackageContext) RecordBuildToLockfile(compilerVersion, compilerPreset, entry, output string)

func (*PackageContext) Run

func (pcx *PackageContext) Run(ctx context.Context, output io.Writer, input io.Reader) error

Run will create a temporary server runtime and run the package output AMX as a gamemode using the runtime configuration in the package info.

func (*PackageContext) RunPrepare

func (pcx *PackageContext) RunPrepare(ctx context.Context) (err error)

RunPrepare prepares the context directory for executing the server.

func (*PackageContext) RunWatch

func (pcx *PackageContext) RunWatch(ctx context.Context) (err error)

RunWatch runs the Run code on file changes.

func (*PackageContext) SaveLockfile

func (pcx *PackageContext) SaveLockfile() error

SaveLockfile saves the lockfile if it was modified during dependency resolution

func (*PackageContext) TagTaglessDependencies

func (pcx *PackageContext) TagTaglessDependencies(ctx context.Context, forceUpdate bool) (bool, error)

TagTaglessDependencies preserves the legacy helper name for updating direct dependency references during an ensure/update flow.

func (*PackageContext) Uninstall

func (pcx *PackageContext) Uninstall(
	targets []versioning.DependencyString,
	development bool,
) (err error)

Uninstall removes a dependency from a package and attempts to delete the contents

func (*PackageContext) UpdateDependencyReferences

func (pcx *PackageContext) UpdateDependencyReferences(
	ctx context.Context,
	request DependencyUpdateRequest,
) (bool, error)

UpdateDependencyReferences rewrites direct dependency constraints for an explicit update request.

func (*PackageContext) UpdateLockfile

func (pcx *PackageContext) UpdateLockfile(ctx context.Context, request DependencyUpdateRequest) error

UpdateLockfile refreshes lockfile dependency entries without installing dependencies into the working tree.

type PackageExecutionState

type PackageExecutionState struct {
	Runtime     string
	Container   bool
	AppVersion  string
	BuildName   string
	ForceBuild  bool
	ForceEnsure bool
	NoCache     bool
	BuildFile   string
	Relative    bool
}

type PackageLockfileState

type PackageLockfileState struct {
	UseLockfile bool
	// contains filtered or unexported fields
}

func (*PackageLockfileState) ForceUpdateLockfile

func (state *PackageLockfileState) ForceUpdateLockfile()

func (*PackageLockfileState) GetLockfile

func (state *PackageLockfileState) GetLockfile() *lockfile.Lockfile

func (*PackageLockfileState) HasLockfile

func (state *PackageLockfileState) HasLockfile() bool

func (*PackageLockfileState) HasLockfileResolver

func (state *PackageLockfileState) HasLockfileResolver() bool

func (*PackageLockfileState) LockedVersion

func (state *PackageLockfileState) LockedVersion(meta versioning.DependencyMeta, forceUpdate bool) versioning.DependencyMeta

func (*PackageLockfileState) PreviousDependency

func (state *PackageLockfileState) PreviousDependency(meta versioning.DependencyMeta) (lockfile.LockedDependency, bool)

func (*PackageLockfileState) PruneMissingDependencies

func (state *PackageLockfileState) PruneMissingDependencies(current []versioning.DependencyMeta)

func (*PackageLockfileState) RecordBuild

func (state *PackageLockfileState) RecordBuild(record lockfile.BuildRecord)

func (*PackageLockfileState) RecordDependencyResolution

func (state *PackageLockfileState) RecordDependencyResolution(
	meta versioning.DependencyMeta,
	resolution lockfile.DependencyResolution,
	transitive bool,
	requiredBy string,
) error

func (*PackageLockfileState) RecordLocalDependency

func (state *PackageLockfileState) RecordLocalDependency(meta versioning.DependencyMeta) error

func (*PackageLockfileState) RecordRuntime

func (state *PackageLockfileState) RecordRuntime(
	version string,
	platform string,
	runtimeType string,
	files []lockfile.LockedFileInfo,
)

func (*PackageLockfileState) SaveLockfile

func (state *PackageLockfileState) SaveLockfile() error

func (*PackageLockfileState) SetLockfileResolver

func (state *PackageLockfileState) SetLockfileResolver(resolver DependencyLock)

type PackageResolvedState

type PackageResolvedState struct {
	AllDependencies []versioning.DependencyMeta
	AllPlugins      []versioning.DependencyMeta
	AllIncludePaths []string
	ActualRuntime   runtimecfg.Runtime
	ActualBuild     build.Config
}

type PackageServices

type PackageServices struct {
	GitHub         *github.Client
	GitAuth        transport.AuthMethod
	Platform       string
	CacheDir       string
	RemotePackages pawnpackage.RemotePackageFetcher
	RepoStore      RepositoryStore
	RepoHealth     RepositoryHealth
	RuntimeEnv     RuntimeEnvironment
	RuntimeProv    RuntimeProvisioner
}

type RepositoryHealth

type RepositoryHealth interface {
	Validate(path string) (bool, error)
	Repair(path string) error
}

RepositoryHealth abstracts repository validation and repair operations.

type RepositoryStore

type RepositoryStore interface {
	Open(path string) (*git.Repository, error)
	Clone(path string, isBare bool, opts *git.CloneOptions) (*git.Repository, error)
}

RepositoryStore abstracts repository open/clone operations used by package flows.

type RuntimeEnvironment

type RuntimeEnvironment interface {
	Run(ctx context.Context, cfg runtimecfg.Runtime, options runtimepkg.RunOptions) error
	PrepareRuntimeDirectory(cacheDir, version, platform, scriptfiles string) error
	CopyFileToRuntime(cacheDir, version, amxFile string) error
	Ensure(ctx context.Context, gh *github.Client, cfg *runtimecfg.Runtime, noCache bool) error
	GenerateConfig(cfg *runtimecfg.Runtime) error
}

RuntimeEnvironment abstracts runtime preparation and execution for package runs.

type RuntimeProvisioner

type RuntimeProvisioner interface {
	EnsurePackageLayout(workingDir string, isOpenMP bool) error
	EnsureBinaries(ctx context.Context, cacheDir string, cfg runtimecfg.Runtime) (*runtimepkg.RuntimeManifestInfo, error)
	EnsurePlugins(request runtimepkg.EnsurePluginsRequest) error
}

RuntimeProvisioner abstracts runtime layout/binary/plugin provisioning for ensure flows.

Jump to

Keyboard shortcuts

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