in app/classes/ReleaseInsights/Data.php [121:171]
public function getDotReleases(): array
{
$filter = function(string $platform) {
$target = $platform == 'desktop' ? 'firefox.json' : 'mobile_android.json';
// Get source of Data where we can extract dot releases information
$data = Json::load($this->pd_url . $target, $this->cache_duration)['releases'];
// Extract all minor releases
$data = array_filter($data, fn($v) => isset($v['category']) && $v['category'] == 'stability');
if ($platform === 'desktop') {
// Filter out ESR releases
$data = array_filter($data, fn($k) => ! str_ends_with($k, 'esr'), ARRAY_FILTER_USE_KEY);
}
// Rebuild a simplified array: ['128.0.1' => '2024-07-16',...]
$data = array_column($data, 'date', 'version');
if ($platform === 'android') {
// Filter out versions older than 126.
// 126 is when we merged android and desktop code and aligned dot release naming.
$data = array_filter($data, fn($k) => explode('.', $k)[0] > 125, ARRAY_FILTER_USE_KEY);
}
return $data;
};
$desktop = $filter('desktop');
$android = $filter('android');
$all = array_merge($desktop, $android);
ksort ($all, SORT_NATURAL);
$dot_releases = [];
foreach ($all as $version => $date) {
$platform = 'both';
if (! array_key_exists($version, $android)) {
$platform = 'desktop';
}
if (! array_key_exists($version, $desktop)) {
$platform = 'android';
}
$dot_releases[$version] = ['date' => $date, 'platform' => $platform];
}
return $dot_releases;
}