config

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Aug 28, 2026 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ClampPort added in v0.9.0

func ClampPort(s string) string

ClampPort ensures a port string represents a valid TCP port (1024–65535). If the value exceeds 65535, it subtracts 65535 repeatedly until it fits, then floors at 1024 to stay out of the privileged range. Pure arithmetic — no I/O. Port availability is handled by ResolveAvailablePorts.

func DockerAllocatedPorts added in v0.9.0

func DockerAllocatedPorts() map[int]struct{}

DockerAllocatedPorts returns the set of host ports currently published by running docker containers. Degrades gracefully: any error (docker absent, daemon down) yields an empty set, falling back to net.Listen-only probing.

func EnsureBuildDir added in v0.4.0

func EnsureBuildDir(buildDir string) error

EnsureBuildDir creates the build context directory if it doesn't exist.

func ResolveAvailablePort added in v0.9.0

func ResolveAvailablePort(preferred string, taken map[int]struct{}) string

resolveAvailablePort returns preferred if it's free, otherwise scans upward (up to 100 attempts) for the next available port.

Privileged-range fix (2026-05-15): single-digit TMUX panes produce ports like 489/450 (pane "4" + "89"/"50"), which are below 1024 — the kernel only lets root bind there. `net.Listen` from a user-mode `cell` fails with EACCES, and `isPortAvailable` can't distinguish that from EADDRINUSE → every candidate looks "unavailable" → fallback to the conflicting port. Bump <1024 to ≥1024 BEFORE the scan so dockerd's bind actually succeeds (dockerd is root but the host already has the port allocated to another container, which is the real collision we need to detect).

func ResolveBuildDir added in v0.4.0

func ResolveBuildDir(cwd, configDir string, projectConfigExists bool) string

ResolveBuildDir returns the build context directory. When projectConfigExists is true, returns cwd/.devcell (project-local). Otherwise falls back to configDir (global).

Types

type Config

type Config struct {
	Bunk          string
	AppName       string
	CellName      string
	CellHome      string
	ConfigDir     string
	BuildDir      string // build context dir: .devcell/ when project config exists, else ConfigDir
	ImageTag      string
	Image         string
	ContainerName string
	Hostname      string
	PortPrefix    string
	VNCPort       string
	RDPPort       string
	BaseDir       string
	HostUser      string
	HostHome      string
	LocalMode     bool // DEVCELL_LOCAL_MODE=true — always rebuild image on run
}

Config holds all runtime variables resolved from environment and cwd.

func Load

func Load(cwd string, getenv func(string) string) Config

Load resolves all config fields from cwd and an environment lookup function. Pure — no os.* calls inside.

func LoadFromOS

func LoadFromOS() (Config, error)

LoadFromOS resolves config using the real OS environment and working directory.

func (*Config) ResolveAvailablePorts added in v0.3.0

func (c *Config) ResolveAvailablePorts()

ResolveAvailablePorts checks whether VNCPort and RDPPort are free and replaces them with nearby available ports when they are already bound.

Jump to

Keyboard shortcuts

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