app/classes/ReleaseInsights/ReleaseCalendar.php (30 lines of code) (raw):

<?php declare(strict_types=1); namespace ReleaseInsights; use DateTime; use Eluceo\iCal\Component\{Calendar, Event}; class ReleaseCalendar { /** * @param array<string, string> $milestones * @param array<string, string> $release_schedule_labels */ public static function getICS(array $milestones, array $release_schedule_labels, string $calendar_name): string { $calendar = new Calendar($calendar_name); foreach ($milestones as $label => $date) { if ($label === 'version' || $label === 'rc') { continue; } $event = new Event(); $start = new DateTime($date); $end = new DateTime($date); if ($label === 'soft_code_freeze') { $end->modify('Sunday'); } $event ->setDtStart($start) ->setDtEnd($end) ->setNoTime(true) ->setSummary($release_schedule_labels[$label]); $calendar->addComponent($event); } return $calendar->render(); } }