- Add polling-interval-seconds input parameter to action.yaml (default: 10) - Update polling logic to use configurable interval - Add input validation to ensure positive values - Update README with usage documentation This allows users to customize how frequently the action polls GitHub API for approval status, enabling them to reduce API calls or speed up response times based on their needs.
51 lines
2.1 KiB
Go
51 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
defaultPollingInterval time.Duration = 10 * time.Second
|
|
|
|
envVarRepoFullName string = "GITHUB_REPOSITORY"
|
|
envVarRunID string = "GITHUB_RUN_ID"
|
|
envVarRepoOwner string = "GITHUB_REPOSITORY_OWNER"
|
|
envVarWorkflowInitiator string = "GITHUB_ACTOR"
|
|
envVarToken string = "INPUT_SECRET"
|
|
envVarApprovers string = "INPUT_APPROVERS"
|
|
envVarMinimumApprovals string = "INPUT_MINIMUM-APPROVALS"
|
|
envVarIssueTitle string = "INPUT_ISSUE-TITLE"
|
|
envVarIssueBody string = "INPUT_ISSUE-BODY"
|
|
envVarIssueBodyFilePath string = "INPUT_ISSUE-BODY-FILE-PATH"
|
|
envVarExcludeWorkflowInitiatorAsApprover string = "INPUT_EXCLUDE-WORKFLOW-INITIATOR-AS-APPROVER"
|
|
envVarAdditionalApprovedWords string = "INPUT_ADDITIONAL-APPROVED-WORDS"
|
|
envVarAdditionalDeniedWords string = "INPUT_ADDITIONAL-DENIED-WORDS"
|
|
envVarFailOnDenial string = "INPUT_FAIL-ON-DENIAL"
|
|
envVarTargetRepoOwner string = "INPUT_TARGET-REPOSITORY-OWNER"
|
|
envVarTargetRepo string = "INPUT_TARGET-REPOSITORY"
|
|
envVarPollingIntervalSeconds string = "INPUT_POLLING-INTERVAL-SECONDS"
|
|
)
|
|
|
|
var (
|
|
additionalApprovedWords = readAdditionalWords(envVarAdditionalApprovedWords)
|
|
additionalDeniedWords = readAdditionalWords(envVarAdditionalDeniedWords)
|
|
|
|
approvedWords = append([]string{"approved", "approve", "lgtm", "yes"}, additionalApprovedWords...)
|
|
deniedWords = append([]string{"denied", "deny", "no"}, additionalDeniedWords...)
|
|
)
|
|
|
|
func readAdditionalWords(envVar string) []string {
|
|
rawValue := strings.TrimSpace(os.Getenv(envVar))
|
|
if len(rawValue) == 0 {
|
|
// Nothing else to do here.
|
|
return []string{}
|
|
}
|
|
slicedWords := strings.Split(rawValue, ",")
|
|
for i := range slicedWords {
|
|
// no leading or trailing spaces in user provided words.
|
|
slicedWords[i] = strings.TrimSpace(slicedWords[i])
|
|
}
|
|
return slicedWords
|
|
}
|