feat: adding workflow_dispatch webhook event

This commit is contained in:
Callum 2021-10-09 10:07:07 +01:00
parent 8657a34f32
commit d36d47fe66
4 changed files with 67 additions and 3 deletions

View File

@ -69,9 +69,10 @@ type ScaleUpTrigger struct {
}
type GitHubEventScaleUpTriggerSpec struct {
CheckRun *CheckRunSpec `json:"checkRun,omitempty"`
PullRequest *PullRequestSpec `json:"pullRequest,omitempty"`
Push *PushSpec `json:"push,omitempty"`
CheckRun *CheckRunSpec `json:"checkRun,omitempty"`
PullRequest *PullRequestSpec `json:"pullRequest,omitempty"`
Push *PushSpec `json:"push,omitempty"`
WorkflowDispatch *WorkflowDispatchSpec `json:"push,omitempty"`
}
// https://docs.github.com/en/actions/reference/events-that-trigger-workflows#check_run
@ -101,6 +102,13 @@ type PullRequestSpec struct {
type PushSpec struct {
}
// WorkflowDispatchSpec is the condition for triggering scale-up on push event
// Also see https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_dispatch
type WorkflowDispatchSpec struct {
Branches []string `json:"branches,omitempty"`
BranchesIgnore []string `json:"branchesIgnore,omitempty"`
}
// CapacityReservation specifies the number of replicas temporarily added
// to the scale target until ExpirationTime.
type CapacityReservation struct {

View File

@ -157,6 +157,18 @@ spec:
push:
description: PushSpec is the condition for triggering scale-up on push event Also see https://docs.github.com/en/actions/reference/events-that-trigger-workflows#push
type: object
workflowDispatch:
description: WorkflowDispatchSpec is the condition for triggering scale-up on workflow_dispatch event Also see https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_dispatch
properties:
branches:
items:
type: string
type: array
branchesIgnore:
items:
type: string
type: array
type: object
type: object
type: object
type: array

View File

@ -183,6 +183,15 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) Handle(w http.Respons
"action", e.GetAction(),
)
}
case *gogithub.WorkflowDispatchEvent:
target, err = autoscaler.getScaleUpTarget(
context.TODO(),
log,
e.Repo.GetName(),
e.Repo.Owner.GetLogin(),
e.Repo.Owner.GetType(),
autoscaler.WorkflowDispatchEvent(e),
)
case *gogithub.WorkflowJobEvent:
if workflowJob := e.GetWorkflowJob(); workflowJob != nil {
log = log.WithValues(

View File

@ -0,0 +1,35 @@
package controllers
import (
"github.com/actions-runner-controller/actions-runner-controller/api/v1alpha1"
"github.com/google/go-github/v37/github"
)
// MatchPushEvent()
func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) MatchWorkflowDispatchEvent(event *github.PushEvent) func(scaleUpTrigger v1alpha1.ScaleUpTrigger) bool {
return func(scaleUpTrigger v1alpha1.ScaleUpTrigger) bool {
g := scaleUpTrigger.GitHubEvent
if g == nil {
return false
}
WorkflowDispatch := g.WorkflowDispatch
if WorkflowDispatch == nil {
return false
}
// event.Ref = Branch that received dispatch
// event.Ref = refs/heads/branch-name
if !matchTriggerConditionAgainstEvent(WorkflowDispatch.Branches, event.Ref) {
return false
}
if matchTriggerConditionAgainstEvent(WorkflowDispatch.BranchesIgnore, event.Ref) {
return false
}
return true
}
}