resolveComposerMetadata(); if ($meta === null) { $this->error('Unable to determine version/build from composer.json.'); return self::FAILURE; } $version = $meta['version']; $build = $meta['build']; Setting::updateOrCreate( ['key' => 'version'], ['value' => $version], ); Setting::updateOrCreate( ['key' => 'build'], ['value' => (string) $build], ); $this->info("Version/build synced: {$version} (build {$build})."); return self::SUCCESS; } private function resolveComposerMetadata(): ?array { $composerPath = base_path('composer.json'); if (!is_file($composerPath) || !is_readable($composerPath)) { return null; } $raw = file_get_contents($composerPath); if ($raw === false) { return null; } $data = json_decode($raw, true); if (!is_array($data)) { return null; } $version = trim((string) ($data['version'] ?? '')); $buildRaw = trim((string) ($data['build'] ?? '')); if ($version === '' || $buildRaw === '') { return null; } if (!preg_match('/^\d+\.\d+(?:\.\d+)?(?:[-._][0-9A-Za-z.-]+)?$/', $version)) { return null; } if (!ctype_digit($buildRaw)) { return null; } return [ 'version' => $version, 'build' => (int) $buildRaw, ]; } }