helpers/feature-freeze-utils/get-data-from-calendar.main.kts (21 lines of code) (raw):

#!/usr/bin/env kotlin @file:Repository("https://repo.maven.apache.org/maven2/") @file:DependsOn("com.auth0:java-jwt:4.4.0") @file:DependsOn("com.google.code.gson:gson:2.10.1") @file:Import("google-calendar-events.main.kts") import java.time.Instant import java.time.LocalDate import java.time.temporal.ChronoUnit import java.time.format.TextStyle import java.util.Locale import kotlin.system.exitProcess val calendarId = System.getenv("GOOGLE_CALENDAR_ID") ?: error("Missing GOOGLE_CALENDAR_ID environment variable") val serviceAccountKeyJson = System.getenv("GCP_SERVICE_ACCOUNT_KEY") ?: error("Missing GCP_SERVICE_ACCOUNT_KEY environment variable") val today: LocalDate = LocalDate.now() val events: List<Event?>? = getCalendarEvents(calendarId, serviceAccountKeyJson, Instant.now(), Instant.now().plus(21, ChronoUnit.DAYS)) fun getEventDate(eventsList: List<Event?>?, keyword: String): LocalDate? = eventsList?.firstOrNull { item: Event? -> val summary = item?.summary ?: "" summary.contains(keyword, ignoreCase = true) }?.start?.date?.let { LocalDate.parse(it) } private fun toWeekDay(date: LocalDate?): String? = date?.dayOfWeek?.getDisplayName(TextStyle.FULL, Locale.ENGLISH) // No feature freeze if the corresponding events are not found val featureFreezeDate = getEventDate(events, "Feature Freeze") ?: exitProcess(0) if (featureFreezeDate.isEqual(today)) { println("##teamcity[setParameter name='feature.freeze.date' value='$featureFreezeDate (${toWeekDay(featureFreezeDate)})']") println("##teamcity[setParameter name='feature.freeze.today' value='true']") } else if (featureFreezeDate.isBefore(today.plus(7, ChronoUnit.DAYS))) { val releaseBuildsDate = getEventDate(events, "Release Builds") val releaseDate = getEventDate(events, "JetBrains Academy Plugin Release") println("##teamcity[setParameter name='current.date' value='$today (Today)']") println("##teamcity[setParameter name='current.dayOfWeek' value='${toWeekDay(today)}']") println("##teamcity[setParameter name='feature.freeze.date' value='$featureFreezeDate (${toWeekDay(featureFreezeDate)})']") println("##teamcity[setParameter name='release.builds.date' value='$releaseBuildsDate (${toWeekDay(releaseBuildsDate)})']") println("##teamcity[setParameter name='plugin.release.date' value='$releaseDate (${toWeekDay(releaseDate)})']") println("Feature freeze incoming") println("##teamcity[setParameter name='feature.freeze.incoming' value='true']") }