MCPcopy Create free account
hub / github.com/cloudbase/garm / handleWorkflowJobEvent

Method handleWorkflowJobEvent

apiserver/controllers/controllers.go:135–182  ·  view source on GitHub ↗
(ctx context.Context, w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

133}
134
135func (a *APIController) handleWorkflowJobEvent(ctx context.Context, w http.ResponseWriter, r *http.Request) {
136 defer r.Body.Close()
137 body, err := io.ReadAll(r.Body)
138 if err != nil {
139 handleError(ctx, w, gErrors.NewBadRequestError("invalid post body: %s", err))
140 return
141 }
142
143 signature := r.Header.Get("X-Hub-Signature-256")
144 hookType := r.Header.Get("X-Github-Hook-Installation-Target-Type")
145 giteaTargetType := r.Header.Get("X-Gitea-Hook-Installation-Target-Type")
146
147 forgeType := runnerParams.GithubEndpointType
148 if giteaTargetType != "" {
149 forgeType = runnerParams.GiteaEndpointType
150 hookType = giteaTargetType
151 }
152
153 if err := a.r.DispatchWorkflowJob(hookType, signature, forgeType, body); err != nil {
154 switch {
155 case errors.Is(err, gErrors.ErrNotFound):
156 metrics.WebhooksReceived.WithLabelValues(
157 "false", // label: valid
158 "owner_unknown", // label: reason
159 ).Inc()
160 slog.With(slog.Any("error", err)).ErrorContext(ctx, "got not found error from DispatchWorkflowJob. webhook not meant for us?")
161 return
162 case strings.Contains(err.Error(), "signature"):
163 // nolint:golangci-lint,godox TODO: check error type
164 metrics.WebhooksReceived.WithLabelValues(
165 "false", // label: valid
166 "signature_invalid", // label: reason
167 ).Inc()
168 default:
169 metrics.WebhooksReceived.WithLabelValues(
170 "false", // label: valid
171 "unknown", // label: reason
172 ).Inc()
173 }
174
175 handleError(ctx, w, err)
176 return
177 }
178 metrics.WebhooksReceived.WithLabelValues(
179 "true", // label: valid
180 "", // label: reason
181 ).Inc()
182}
183
184func (a *APIController) WebhookHandler(w http.ResponseWriter, r *http.Request) {
185 ctx := r.Context()

Callers 1

WebhookHandlerMethod · 0.95

Calls 5

handleErrorFunction · 0.85
DispatchWorkflowJobMethod · 0.80
CloseMethod · 0.65
GetMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected