state; } public function start(): void { $this->transitionTo(InstallRunState::Running); } public function succeed(): void { $this->transitionTo(InstallRunState::Succeeded); } public function fail(): void { $this->transitionTo(InstallRunState::Failed); } public function cancel(): void { $this->transitionTo(InstallRunState::Cancelled); } public function retry(): void { $this->transitionTo(InstallRunState::Ready); } private function transitionTo(InstallRunState $next): void { if (!$this->state->canTransitionTo($next)) { throw new InvalidInstallRunTransition(sprintf( 'Install run "%s" cannot transition from "%s" to "%s".', $this->id, $this->state->value, $next->value )); } $this->state = $next; } }