app/classes/ReleaseInsights/Nightly.php (54 lines of code) (raw):

<?php declare(strict_types=1); namespace ReleaseInsights; class Nightly { public string $version; public bool $auto_updates = true; public string $emergency_message = ''; public function __construct( public string $pd = URL::ProductDetails->value, public string $AUS = URL::Balrog->value, public string $update_status = 'emergency_shutoff/Firefox/nightly', ) { $this->version = Json::load( $this->pd . 'firefox_versions.json', 604800 )['FIREFOX_NIGHTLY']; // @codeCoverageIgnoreStart // Check that the URL is valid (We are not in an HTTP (useful for unit tests that test a local file) if (filter_var($this->AUS . $this->update_status, FILTER_VALIDATE_URL)) { // The JSON file only exists when updates are stopped. // If there is no file at the URL, it means that automatic updates are enabled. $this->auto_updates = str_contains( (string) get_headers($this->AUS . $this->update_status)[0], '404' ); } // @codeCoverageIgnoreEnd if (defined('TESTING_CONTEXT')) { $this->auto_updates = false; } if ($this->auto_updates === false) { $msg = Json::load($this->AUS . $this->update_status, 1)['comment'] ?? ''; if ($msg !== '') { $this->emergency_message = Utils::secureText($msg); } } } /** * Determine the start of the cycle. * This is almost always the release date of the release-2 * In our train model. * Exceptions to this rule are hardcoded */ public static function cycleStart(int $version): string { $releases = Json::load(URL::ProductDetails->target() . 'firefox.json')['releases']; return match($version) { 1 => '2004-11-09', 2 => '2006-10-24', 4 => '2010-01-21', 16 => '2012-06-04', // We never had a 14.0 release, so this is hardcoded 127 => '2024-04-16', // We never had a 125.0 release, so this is hardcoded default => $releases['firefox-' . (string) ($version - 2) . '.0']['date'], }; } /** * Get the latest BuildID from Balrog */ public static function getLatestBuildID(): string { // Get the latest nightly build ID, used as a tooltip on the nightly version number $latest_nightly = Json::load( URL::Balrog->target() . 'releases/Firefox-mozilla-central-nightly-latest', 1800 ); return $latest_nightly['platforms']['WINNT_x86_64-msvc']['locales']['en-US']['buildID'] ?? 'N/A'; } }