Move logic for calculating date offset into separate function.

This commit is contained in:
Markus Reiter 2020-11-23 07:08:13 +01:00
parent d96b85e512
commit dbd43fe716

View File

@ -101,6 +101,30 @@ jobs:
} }
} }
function offsetDate(start, offsetHours, skippedDays) {
let end = new Date(start)
end.setUTCHours(end.getUTCHours() + (offsetHours % 24))
while (skippedDays.includes(end.getUTCDay()) || offsetHours >= 24) {
if (!skippedDays.includes(end.getUTCDay())) {
offsetHours -= 24
}
end.setUTCDate(end.getUTCDate() + 1)
}
if (skippedDays.includes(start.getUTCDay())) {
end.setUTCHours(offsetHours, 0, 0)
}
return end
}
function formatDate(date) {
return date.toISOString().replace(/\.\d+Z$/, ' UTC').replace('T', ' at ')
}
async function reviewPullRequest(pullRequestNumber) { async function reviewPullRequest(pullRequestNumber) {
const { data: pullRequest } = await github.pulls.get({ const { data: pullRequest } = await github.pulls.get({
owner: context.repo.owner, owner: context.repo.owner,
@ -126,43 +150,21 @@ jobs:
const hasReviewLabel = labels.includes(reviewLabel) const hasReviewLabel = labels.includes(reviewLabel)
const hasCriticalLabel = labels.includes(criticalLabel) const hasCriticalLabel = labels.includes(criticalLabel)
const reviewStartDate = new Date(pullRequest.created_at) const offsetHours = 24
const reviewEndDate = new Date(reviewStartDate) const skippedDays = [
switch (reviewStartDate.getUTCDay()) { 6, // Saturday
case 5: 0, // Sunday
// Skip from Friday to Monday. ]
reviewEndDate.setUTCDate(reviewStartDate.getUTCDate() + 3)
break
case 6:
// Skip from Saturday to end of Monday.
reviewEndDate.setUTCDate(reviewStartDate.getUTCDate() + 2)
reviewEndDate.setUTCHours(23, 59, 59)
break
case 0:
// Skip from Sunday to end of Monday.
reviewEndDate.setUTCDate(reviewStartDate.getUTCDate() + 1)
reviewEndDate.setUTCHours(23, 59, 59)
break
default:
reviewEndDate.setUTCDate(reviewStartDate.getUTCDate() + 1)
break
}
const currentDate = new Date() const currentDate = new Date()
const reviewStartDate = new Date(pullRequest.created_at)
const reviewEndDate = offsetDate(reviewStartDate, offsetHours, skippedDays)
const reviewEnded = currentDate > reviewEndDate const reviewEnded = currentDate > reviewEndDate
function formatDate(date) {
return date.toISOString().replace(/\.\d+Z$/, ' UTC').replace('T', ' at ')
}
if (reviewEnded || hasCriticalLabel) { if (reviewEnded || hasCriticalLabel) {
let message let message
if (hasCriticalLabel && !reviewEnded) { if (hasCriticalLabel && !reviewEnded) {
if (hasReviewLabel) { message = `Review period skipped due to \`${criticalLabel}\` label.`
message = `Review period cancelled due to \`${criticalLabel}\` label.`
} else {
message = `Review period skipped due to \`${criticalLabel}\` label.`
}
} else { } else {
message = 'Review period ended.' message = 'Review period ended.'
} }
@ -180,7 +182,7 @@ jobs:
await approvePullRequest(pullRequestNumber) await approvePullRequest(pullRequestNumber)
} else { } else {
const message = `Review period will end on ${formatDate(reviewEndDate)}.` const message = `Review period will end on ${formatDate(reviewEndDate)}.`
core.warning(message) core.info(message)
await dismissApprovals(pullRequestNumber, 'Review period has not ended yet.') await dismissApprovals(pullRequestNumber, 'Review period has not ended yet.')
await createOrUpdateComment(pullRequestNumber, 'review-period-begin', message) await createOrUpdateComment(pullRequestNumber, 'review-period-begin', message)