Bootstrapper
class Bootstrapper
Constants
| protected RUNTIME_PROCESS_MARKER |
|
Properties
| static protected Config|null | $configuration | ||
| static protected Filesystem|null | $filesystem | ||
| static protected string|null | $runtimePath | The path to the disposable runtime copy of the workbench. |
Methods
Bootstrap the testbench environment.
Get the configuration attributes as an array.
Get the cached configuration instance.
Get the filesystem instance.
No description
Resolve the directory that owns the active testbench.yaml file.
Determine if the given path contains a testbench configuration file.
Create a disposable runtime copy of the skeleton directory.
Copy the package or workbench environment file into the runtime copy.
Determine the active Testbench environment file name.
Resolve the runtime base path for the current process.
Delete the disposable runtime copy.
Delete a runtime copy while tolerating sibling cleanup races.
Determine if a runtime directory exists.
Determine if the given PID is an orphaned serve process.
Determine whether a process identity matches a Testbench serve runtime.
Read the command line for a process.
Read the OS identity of the process incarnation.
Kill a process and all its descendants.
Collect all descendant PIDs of the given PID in depth-first order.
Build a map of PID → direct child PIDs by scanning /proc once.
Register shutdown handlers to purge configured files and directories.
Flush all static state.
Details
at line 35
static void
bootstrap()
Bootstrap the testbench environment.
at line 63
static array
getConfig()
Get the configuration attributes as an array.
at line 73
static Config|null
getConfiguration()
Get the cached configuration instance.
at line 81
static protected Filesystem
getFilesystem()
Get the filesystem instance.
at line 90
static protected void
loadConfigFromYaml(string $workingPath, string|null $filename = 'testbench.yaml', array $defaults = [])
No description
at line 98
static protected string
resolveConfigurationPath(string $workingPath)
Resolve the directory that owns the active testbench.yaml file.
at line 108
static protected bool
hasConfigurationFile(string $workingPath, string $filename = 'testbench.yaml')
Determine if the given path contains a testbench configuration file.
at line 127
static protected string
createRuntimeCopy(string $sourcePath, string $workingPath)
Create a disposable runtime copy of the skeleton directory.
Tests write generated files (make:provider, make:model, etc.) and mutate bootstrap/providers.php into the app's basePath. By copying the skeleton to a temp directory and using that as BASE_PATH, the committed skeleton stays clean. The copy is deleted on shutdown.
at line 207
static protected void
copyPackageEnvironmentFile(Filesystem $filesystem, string $runtimePath, string $workingPath)
Copy the package or workbench environment file into the runtime copy.
at line 223
static protected string
testbenchEnvironmentFile()
Determine the active Testbench environment file name.
at line 235
static protected string
resolveRuntimeBasePath(string $sourcePath, string $workingPath)
Resolve the runtime base path for the current process.
at line 250
static protected void
deleteRuntimeCopy()
Delete the disposable runtime copy.
at line 269
static protected void
deleteRuntimeDirectory(string $directory)
Delete a runtime copy while tolerating sibling cleanup races.
Multiple same-token Testbench children can bootstrap at once and purge the same stale runtime copy. If another child wins the race, the missing directory is the desired postcondition; if the directory remains, the original filesystem failure is still surfaced.
at line 305
static protected bool
runtimeDirectoryExists(Filesystem $filesystem, string $directory)
Determine if a runtime directory exists.
at line 317
static protected bool
isOrphanedServeProcess(int $pid, string $runtimeDir)
Determine if the given PID is an orphaned serve process.
A process is considered an orphaned serve process only when its parent is init and its PID, command, and process incarnation all match the runtime directory.
at line 352
static protected bool
matchesServeProcessIdentity(int $pid, string $runtimeDir)
Determine whether a process identity matches a Testbench serve runtime.
at line 405
static protected string|null
processCommand(int $pid)
Read the command line for a process.
at line 433
static protected string|null
processStartIdentity(int $pid)
Read the OS identity of the process incarnation.
Linux exposes the start clock tick exactly. macOS lstart has one-second
resolution, which is sufficient alongside the PID and validated command.
at line 468
static protected void
killProcessTree(int $pid)
Kill a process and all its descendants.
Collects the full descendant tree first (single /proc scan), then kills leaves before parents to avoid re-parenting races where killing a parent causes its children to be adopted by init before we can find them.
at line 493
static protected array
collectDescendants(int $rootPid)
Collect all descendant PIDs of the given PID in depth-first order.
Scans /proc once to build a PID→children map, then walks the subtree. Returns PIDs in parent-before-children order.
at line 517
static protected array
buildChildrenMap()
Build a map of PID → direct child PIDs by scanning /proc once.
at line 562
static protected void
registerPurgeFiles()
Register shutdown handlers to purge configured files and directories.
at line 593
static void
flushState()
Flush all static state.