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