Last active
October 8, 2025 14:07
-
-
Save pascalchevrel/55d9d8c7111ff55335b44eaa53bf6a62 to your computer and use it in GitHub Desktop.
Major releases and dot releases per owner since version 122
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php declare(strict_types=1); | |
| function convertJson(string $url): array { | |
| return json_decode(file_get_contents($url), true); | |
| } | |
| $api_root = 'https://whattrainisitnow.com/api/'; | |
| $owners = convertJson($api_root . 'release/owners/'); | |
| $releases = convertJson($api_root . 'firefox/releases/'); | |
| $current_release = (int) explode('.', array_key_last($releases))[0]; | |
| $current_team = [ | |
| 'Ryan VanderMeulen', | |
| 'Donal Meehan', | |
| 'Pascal Chevrel', | |
| 'Dianna Smith', | |
| ]; | |
| // Analysis 2022 | |
| $start = 96; | |
| $end = 108; | |
| // Analysis 2023 | |
| $start = 108; | |
| $end = 121; | |
| // Analysis 2024 | |
| $start = 121; | |
| $end = 133; | |
| // Analysis 2025 | |
| $start = 134; | |
| $end = $current_release; | |
| // Analysis January 2024 to today | |
| $start = 122; | |
| $end = $current_release; | |
| $major_releases_owners = array_filter( | |
| $owners, | |
| fn($k) => $k >= $start && $k <= $current_release, | |
| ARRAY_FILTER_USE_KEY | |
| ); | |
| // Set up a counter per owner | |
| $counter = []; | |
| foreach ($current_team as $owner) { | |
| $counter[$owner] = [ | |
| 'major' => 0, | |
| 'dot' => 0, | |
| 'average' => 0, | |
| ]; | |
| } | |
| foreach (array_keys($releases) as $value) { | |
| $data = explode('.', $value); | |
| // Outside of team scope | |
| if (! in_array(intval($data[0]), array_keys($major_releases_owners))) { | |
| continue; | |
| } | |
| // Major release | |
| if (count($data) == 2 ) { | |
| $counter[$major_releases_owners[$data[0]]]['major']++; | |
| continue; | |
| } | |
| $counter[$major_releases_owners[$data[0]]]['dot']++; | |
| } | |
| foreach ($current_team as $owner) { | |
| $counter[$owner]['average'] = $counter[$owner]['dot'] / $counter[$owner]['major']; | |
| } | |
| $table_head = ' Owner' . str_pad('', 15, " ") . 'Major' . str_pad('', 4, " ") . 'Minor' . str_pad('', 4, " ") . 'Average'; | |
| $divider = str_pad('', strlen($table_head), "-"); | |
| echo "\n Major releases and dot releases per owner since version {$start} (" . $releases[strval($start) . '.0'] . ")\n\n"; | |
| echo "\033[1m" . $table_head . "\033[0m\n"; | |
| echo $divider . "\n"; | |
| foreach ($counter as $key => $value) { | |
| [$major, $minor, $average] = array_map('strval', array_values($value)) ; | |
| echo ' ' . str_pad($key, 22, " ") . str_pad( $major, 8, " ") . str_pad( $minor, 10, " ") . number_format((float)$average, 2, '.', '') . "\n"; | |
| } | |
| $total_col = function($column) use ($counter) { | |
| return (string) array_sum(array_column($counter, $column)); | |
| }; | |
| echo " \033[0;30;46m"; | |
| echo str_pad('Whole team', 22, " ") | |
| . str_pad($total_col('major'), 8, " ") | |
| . str_pad($total_col('dot'), 10, " ") | |
| . number_format((float)$total_col('dot')/$total_col('major'), 2, '.', ''); | |
| echo "\033[0m\n"; |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Gives this output (as of Firefox 143):