agola/internal/services/common/run.go
Simone Gotti 28ddfb1781 webhook: add runRefType and convert webhook event
Introduce a runRefType that represent the ref type of the Run (branch/tag/PR)
Convert the webhook event type to the runRefType and use it to generate the run
group.
2019-06-10 16:49:39 +02:00

68 lines
1.9 KiB
Go

// 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/sorintlab/agola/internal/services/types"
"github.com/sorintlab/agola/internal/util"
errors "golang.org/x/xerrors"
)
type GroupType string
const (
// base groups
GroupTypeProject GroupType = "project"
GroupTypeUser GroupType = "user"
// sub groups
GroupTypeBranch GroupType = "branch"
GroupTypeTag GroupType = "tag"
GroupTypePullRequest GroupType = "pr"
ApproversAnnotation = "approvers"
)
func WebHookEventToRunRefType(we types.WebhookEvent) types.RunRefType {
switch we {
case types.WebhookEventPush:
return types.RunRefTypeBranch
case types.WebhookEventTag:
return types.RunRefTypeTag
case types.WebhookEventPullRequest:
return types.RunRefTypePullRequest
}
panic(fmt.Errorf("invalid webhook event type: %q", we))
}
func GenRunGroup(baseGroupType GroupType, baseGroupID string, groupType GroupType, group string) string {
// we pathescape the branch name to handle branches with slashes and make the
// branch a single path entry
return path.Join("/", string(baseGroupType), baseGroupID, string(groupType), url.PathEscape(group))
}
func GroupTypeIDFromRunGroup(group string) (GroupType, string, error) {
pl := util.PathList(group)
if len(pl) < 2 {
return "", "", errors.Errorf("cannot determine group project id, wrong group path %q", group)
}
return GroupType(pl[0]), pl[1], nil
}