diff --git a/phpmon/Common/Core/Constants.swift b/phpmon/Common/Core/Constants.swift index dadbb02..48f84b5 100644 --- a/phpmon/Common/Core/Constants.swift +++ b/phpmon/Common/Core/Constants.swift @@ -20,10 +20,26 @@ struct Constants { /** * The PHP versions that are considered pre-release versions. + * Past a certain date, an experimental version "graduates" + * to a release version and is no longer marked as experimental. */ - static let ExperimentalPhpVersions: Set = [ - "8.4" - ] + static var ExperimentalPhpVersions: Set { + let releaseDates = [ + "8.4": Date.fromString("2024-12-01"), // PLACEHOLDER DATE + "8.3": Date.fromString("2023-11-23") // OFFICIAL RELEASE + ] + + return Set(releaseDates + .filter { (_: String, date: Date?) in + guard let date else { + return false + } + + return date > Date.now + }.map { (version: String, _: Date?) in + return version + }) + } /** * The PHP versions supported by this application. diff --git a/phpmon/Common/Extensions/DateExtension.swift b/phpmon/Common/Extensions/DateExtension.swift index 6321c15..1ddafab 100644 --- a/phpmon/Common/Extensions/DateExtension.swift +++ b/phpmon/Common/Extensions/DateExtension.swift @@ -15,4 +15,10 @@ extension Date { return dateFormatter.string(from: self) } + static func fromString(_ string: String) -> Date? { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd" + return dateFormatter.date(from: string) + } + } diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift index 4ea90d3..8a3e11f 100644 --- a/phpmon/Domain/Integrations/Homebrew/Brew.swift +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -45,7 +45,8 @@ class Brew { /// Each formula for each PHP version that can be installed. public static let phpVersionFormulae = [ - "8.3": "shivammathur/php/php@8.3", + "8.4": "shivammathur/php/php@8.4", + "8.3": "shivammathur/php/php@8.3", // TODO: when php@8.3 lands in stable, update this "8.2": "php@8.2", "8.1": "php@8.1", "8.0": "php@8.0", diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 8d06353..6cae366 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -105,6 +105,9 @@ extension MainMenu { Valet.shared.notifyAboutUnsupportedTLD() } + // Keep track of which PHP versions are currently about to release + Log.info("Experimental PHP versions: \(Constants.ExperimentalPhpVersions)") + // Find out which services are active Log.info("The services manager knows about \(ServicesManager.shared.services.count) services.")