gateway: move webhook genGroup to common as GenRunGroup
This commit is contained in:
parent
6ef5649b21
commit
081ac8a44f
|
@ -0,0 +1,58 @@
|
||||||
|
// Copyright 2019 Sorint.lab
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"path"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"github.com/sorintlab/agola/internal/services/types"
|
||||||
|
"github.com/sorintlab/agola/internal/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
type GroupType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
GroupTypeProject GroupType = "project"
|
||||||
|
GroupTypeUser GroupType = "user"
|
||||||
|
GroupTypeBranch GroupType = "branch"
|
||||||
|
GroupTypeTag GroupType = "tag"
|
||||||
|
GroupTypePullRequest GroupType = "pr"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GenRunGroup(baseGroupType GroupType, baseGroupID string, webhookData *types.WebhookData) string {
|
||||||
|
// we pathescape the branch name to handle branches with slashes and make the
|
||||||
|
// branch a single path entry
|
||||||
|
switch webhookData.Event {
|
||||||
|
case types.WebhookEventPush:
|
||||||
|
return path.Join("/", string(baseGroupType), baseGroupID, string(GroupTypeBranch), url.PathEscape(webhookData.Branch))
|
||||||
|
case types.WebhookEventTag:
|
||||||
|
return path.Join("/", string(baseGroupType), baseGroupID, string(GroupTypeTag), url.PathEscape(webhookData.Tag))
|
||||||
|
case types.WebhookEventPullRequest:
|
||||||
|
return path.Join("/", string(baseGroupType), baseGroupID, string(GroupTypePullRequest), url.PathEscape(webhookData.PullRequestID))
|
||||||
|
}
|
||||||
|
|
||||||
|
panic(fmt.Errorf("invalid webhook event type: %q", webhookData.Event))
|
||||||
|
}
|
||||||
|
|
||||||
|
func ProjectIDFromRunGroup(group string) (string, error) {
|
||||||
|
pl := util.PathList(group)
|
||||||
|
if len(pl) < 2 {
|
||||||
|
return "", errors.Errorf("cannot determine group project id, wrong group path %q", group)
|
||||||
|
}
|
||||||
|
return pl[1], nil
|
||||||
|
}
|
|
@ -18,7 +18,6 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"github.com/sorintlab/agola/internal/config"
|
"github.com/sorintlab/agola/internal/config"
|
||||||
|
@ -68,16 +67,6 @@ const (
|
||||||
AnnotationPullRequestLink = "pull_request_link"
|
AnnotationPullRequestLink = "pull_request_link"
|
||||||
)
|
)
|
||||||
|
|
||||||
type GroupType string
|
|
||||||
|
|
||||||
const (
|
|
||||||
GroupTypeProject GroupType = "project"
|
|
||||||
GroupTypeUser GroupType = "user"
|
|
||||||
GroupTypeBranch GroupType = "branch"
|
|
||||||
GroupTypeTag GroupType = "tag"
|
|
||||||
GroupTypePullRequest GroupType = "pr"
|
|
||||||
)
|
|
||||||
|
|
||||||
func genAnnotationVirtualBranch(webhookData *types.WebhookData) string {
|
func genAnnotationVirtualBranch(webhookData *types.WebhookData) string {
|
||||||
switch webhookData.Event {
|
switch webhookData.Event {
|
||||||
case types.WebhookEventPush:
|
case types.WebhookEventPush:
|
||||||
|
@ -91,21 +80,6 @@ func genAnnotationVirtualBranch(webhookData *types.WebhookData) string {
|
||||||
panic(fmt.Errorf("invalid webhook event type: %q", webhookData.Event))
|
panic(fmt.Errorf("invalid webhook event type: %q", webhookData.Event))
|
||||||
}
|
}
|
||||||
|
|
||||||
func genGroup(baseGroupType GroupType, baseGroupID string, webhookData *types.WebhookData) string {
|
|
||||||
// we pathescape the branch name to handle branches with slashes and make the
|
|
||||||
// branch a single path entry
|
|
||||||
switch webhookData.Event {
|
|
||||||
case types.WebhookEventPush:
|
|
||||||
return path.Join("/", string(baseGroupType), baseGroupID, string(GroupTypeBranch), url.PathEscape(webhookData.Branch))
|
|
||||||
case types.WebhookEventTag:
|
|
||||||
return path.Join("/", string(baseGroupType), baseGroupID, string(GroupTypeTag), url.PathEscape(webhookData.Tag))
|
|
||||||
case types.WebhookEventPullRequest:
|
|
||||||
return path.Join("/", string(baseGroupType), baseGroupID, string(GroupTypePullRequest), url.PathEscape(webhookData.PullRequestID))
|
|
||||||
}
|
|
||||||
|
|
||||||
panic(fmt.Errorf("invalid webhook event type: %q", webhookData.Event))
|
|
||||||
}
|
|
||||||
|
|
||||||
type webhooksHandler struct {
|
type webhooksHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -321,9 +295,9 @@ func (h *webhooksHandler) handleWebhook(r *http.Request) (int, string, error) {
|
||||||
|
|
||||||
var group string
|
var group string
|
||||||
if !isUserBuild {
|
if !isUserBuild {
|
||||||
group = genGroup(GroupTypeProject, webhookData.ProjectID, webhookData)
|
group = common.GenRunGroup(common.GroupTypeProject, webhookData.ProjectID, webhookData)
|
||||||
} else {
|
} else {
|
||||||
group = genGroup(GroupTypeUser, userID, webhookData)
|
group = common.GenRunGroup(common.GroupTypeUser, userID, webhookData)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := h.createRuns(ctx, filename, data, group, annotations, env, variables, webhookData); err != nil {
|
if err := h.createRuns(ctx, filename, data, group, annotations, env, variables, webhookData); err != nil {
|
||||||
|
|
Loading…
Reference in New Issue