Documentation
¶
Index ¶
- Variables
- func CleanInvalidRepository(path string) error
- func DiagnoseRepository(path string) (diagnosis string, healthy bool)
- func RepairRepository(path string) error
- func ValidateRepository(path string) (valid bool, err error)
- func ValidateRepositoryWithRefs(path string, requiredRefs []string) (valid bool, err error)
- func WrapGitError(err error, meta versioning.DependencyMeta) error
- type BuildLockfileController
- type BuildOptions
- type DependencyLock
- type DependencyUpdateRequest
- type GitMultiAuth
- type GitRepositoryHealth
- type GitRepositoryStore
- type LockfileController
- type LockfileInitializer
- type LockfileUpdater
- type NewPackageContextOptions
- type PackageContext
- func (pcx *PackageContext) Build(ctx context.Context, options BuildOptions) (problems build.Problems, result build.Result, err error)
- func (pcx *PackageContext) BuildWatch(ctx context.Context, options BuildOptions) (err error)
- func (pcx *PackageContext) EnsureDependencies(ctx context.Context, forceUpdate bool) (err error)
- func (pcx *PackageContext) EnsureDependenciesCached() error
- func (pcx PackageContext) EnsureDependencyCached(meta versioning.DependencyMeta, forceUpdate bool) (repo *git.Repository, err error)
- func (pcx PackageContext) EnsureDependencyFromCache(meta versioning.DependencyMeta, path string, forceUpdate bool) (repo *git.Repository, err error)
- func (pcx *PackageContext) EnsurePackage(meta versioning.DependencyMeta, forceUpdate bool) error
- func (pcx *PackageContext) EnsurePackageWithParent(meta versioning.DependencyMeta, forceUpdate bool, parentRepo string) error
- func (pcx *PackageContext) EnsureProject(ctx context.Context, request DependencyUpdateRequest) (bool, error)
- func (pcx *PackageContext) ForceUpdateLockfile()
- func (pcx *PackageContext) GatherPlugins() (pluginDeps []versioning.DependencyMeta, err error)
- func (pcx *PackageContext) GetLockfile() *lockfile.Lockfile
- func (pcx *PackageContext) GetResolvedCommit(dependencyPath string) (string, error)
- func (pcx *PackageContext) HasLockfile() bool
- func (pcx *PackageContext) HasLockfileResolver() bool
- func (pcx *PackageContext) InitLockfileResolver(sampctlVersion string) error
- func (pcx *PackageContext) Install(ctx context.Context, targets []versioning.DependencyString, development bool) (err error)
- func (pcx *PackageContext) RecordBuildToLockfile(compilerVersion, compilerPreset, entry, output string)
- func (pcx *PackageContext) Run(ctx context.Context, output io.Writer, input io.Reader) error
- func (pcx *PackageContext) RunPrepare(ctx context.Context) (err error)
- func (pcx *PackageContext) RunWatch(ctx context.Context) (err error)
- func (pcx *PackageContext) SaveLockfile() error
- func (pcx *PackageContext) TagTaglessDependencies(ctx context.Context, forceUpdate bool) (bool, error)
- func (pcx *PackageContext) Uninstall(targets []versioning.DependencyString, development bool) (err error)
- func (pcx *PackageContext) UpdateDependencyReferences(ctx context.Context, request DependencyUpdateRequest) (bool, error)
- func (pcx *PackageContext) UpdateLockfile(ctx context.Context, request DependencyUpdateRequest) error
- type PackageExecutionState
- type PackageLockfileState
- func (state *PackageLockfileState) ForceUpdateLockfile()
- func (state *PackageLockfileState) GetLockfile() *lockfile.Lockfile
- func (state *PackageLockfileState) HasLockfile() bool
- func (state *PackageLockfileState) HasLockfileResolver() bool
- func (state *PackageLockfileState) LockedVersion(meta versioning.DependencyMeta, forceUpdate bool) versioning.DependencyMeta
- func (state *PackageLockfileState) PreviousDependency(meta versioning.DependencyMeta) (lockfile.LockedDependency, bool)
- func (state *PackageLockfileState) PruneMissingDependencies(current []versioning.DependencyMeta)
- func (state *PackageLockfileState) RecordBuild(record lockfile.BuildRecord)
- func (state *PackageLockfileState) RecordDependencyResolution(meta versioning.DependencyMeta, resolution lockfile.DependencyResolution, ...) error
- func (state *PackageLockfileState) RecordLocalDependency(meta versioning.DependencyMeta) error
- func (state *PackageLockfileState) RecordRuntime(version string, platform string, runtimeType string, ...)
- func (state *PackageLockfileState) SaveLockfile() error
- func (state *PackageLockfileState) SetLockfileResolver(resolver DependencyLock)
- type PackageResolvedState
- type PackageServices
- type RepositoryHealth
- type RepositoryStore
- type RuntimeEnvironment
- type RuntimeProvisioner
Constants ¶
This section is empty.
Variables ¶
var ErrDependencyHasNoTagsOrReleases = errors.New("dependency does not publish tags or releases")
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 ¶
CleanInvalidRepository removes a repository if it fails validation
func DiagnoseRepository ¶
DiagnoseRepository provides detailed diagnostic information about a repository
func RepairRepository ¶
RepairRepository attempts to repair a corrupted repository
func ValidateRepository ¶
ValidateRepository performs checks on a git repository to ensure it's in a healthy state
func ValidateRepositoryWithRefs ¶
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 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
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 ¶
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 ¶
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 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 ¶
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.
Source Files
¶
- auth.go
- build.go
- cache.go
- context_state.go
- dependency_repo.go
- dependency_update.go
- ensure.go
- ensure_latest.go
- ensure_package.go
- ensure_resources.go
- ensure_runtime.go
- git_errors.go
- install.go
- interfaces.go
- lockfile_integrity.go
- lockfile_resolution.go
- lockfile_update.go
- paths.go
- pkgcontext.go
- repo_validation.go
- run.go
- runtime_environment.go
- runtime_provisioner.go
- tag_tagless.go
- uninstall.go
- url_scheme_handlers.go
- watch_helpers.go