app/models/ics_release_schedule.php (59 lines of code) (raw):
<?php
declare(strict_types=1);
use ReleaseInsights\{Release, ReleaseCalendar, Version};
if (! isset($requested_version)) {
$requested_version = Version::get();
}
// Get the schedule for the release requested
$releases = new Release($requested_version)->getSchedule();
$short_version = (string) (int) $releases['version'];
$release_schedule_labels = [
'nightly_start' => 'Nightly ' . $short_version . ' starts',
'a11y_request_deadline' => 'Deadline to request accessibility engineering review',
'qa_request_deadline' => 'Deadline to request manual QA in Nightly',
'qa_feature_done' => 'Build is feature complete for QA',
'qa_feature_done_1' => 'Build is feature complete for QA in Nightly',
'qa_feature_done_2' => 'Build is feature complete for QA in Beta',
'soft_code_freeze' => 'Firefox ' . $short_version . ' soft Code Freeze starts at 08:00 AM UTC',
'qa_pre_merge_done' => 'QA pre-merge regression testing completed',
'qa_test_plan_due' => 'Firefox ' . $short_version . ' QA Test Plan approval due',
'string_freeze' => 'String Freeze starts',
'merge_day' => 'Merge day',
'beta_1' => 'Firefox ' . $releases['version'] . 'b1',
'beta_2' => 'Firefox ' . $releases['version'] . 'b2 (GTB: 13:00 UTC)',
'beta_3' => 'Firefox ' . $releases['version'] . 'b3 (GTB: 13:00 UTC)',
'sumo_1' => 'User affecting changes provided to SUMO',
'beta_4' => 'Firefox ' . $releases['version'] . 'b4 (GTB: 13:00 UTC)',
'beta_5' => 'Firefox ' . $releases['version'] . 'b5 (GTB: 13:00 UTC)',
'beta_6' => 'Firefox ' . $releases['version'] . 'b6 (GTB: 13:00 UTC)',
'beta_7' => 'Firefox ' . $releases['version'] . 'b7 (GTB: 13:00 UTC)',
'sumo_2' => 'SUMO content localization starts',
'beta_8' => 'Firefox ' . $releases['version'] . 'b8 (GTB: 13:00 UTC)',
'qa_pre_rc_signoff' => 'QA pre-release sign-off',
'beta_9' => 'Firefox ' . $releases['version'] . 'b9 (GTB: 13:00 UTC)',
'beta_10' => 'Firefox ' . $releases['version'] . 'b10 (GTB: 13:00 UTC)',
'beta_11' => 'Firefox ' . $releases['version'] . 'b11 (GTB: 13:00 UTC)',
'beta_12' => 'Firefox ' . $releases['version'] . 'b12 (GTB: 13:00 UTC)',
'beta_13' => 'Firefox ' . $releases['version'] . 'b13 (GTB: 13:00 UTC)',
'beta_14' => 'Firefox ' . $releases['version'] . 'b14 (GTB: 13:00 UTC)',
'beta_15' => 'Firefox ' . $releases['version'] . 'b15 (GTB: 13:00 UTC)',
'rc_gtb' => 'Firefox ' . $short_version . ' go to Build',
'rc' => 'RC',
'release' => 'Firefox ' . $short_version . ' go-live @ 06:00 AM PT',
'mobile_dot_release' => 'Potential mobile ' . $releases['version'] . '.x planned dot release',
'planned_dot_release' => 'Firefox ' . $releases['version'] . '.x planned dot release',
];
// Add end of early betas to the schedule
$releases['early_beta_end'] = $releases['beta_6'];
$release_schedule_labels['early_beta_end'] = 'End of EARLY_BETA_OR_EARLIER (post beta 6)';
// Add draft release notes to the schedule
$draft_relnotes = new DateTime($releases['soft_code_freeze']);
$releases['draft_relnotes'] = $draft_relnotes->modify('-1 day')->format('Y-m-d H:i');
$release_schedule_labels['draft_relnotes'] = 'Draft beta release notes ready';
// Add final release notes to the schedule
$final_relnotes = new DateTime($releases['rc']);
$releases['final_relnotes'] = $final_relnotes->format('Y-m-d H:i');
$release_schedule_labels['final_relnotes'] = 'Firefox ' . $short_version . ': Release Notes Deadline';
$ics_calendar = ReleaseCalendar::getICS(
$releases,
$release_schedule_labels,
'Firefox ' . $short_version
);
$filename = 'Firefox_' . $short_version . '_schedule.ics';
return [$filename, $ics_calendar];