public function getDotReleases()

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;
    }