Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions pkg/git/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"strconv"
"strings"

giturls "github.com/chainguard-dev/git-urls"
"github.com/openshift-pipelines/pipelines-as-code/pkg/formatting"

"knative.dev/func/pkg/git/github"
Expand Down Expand Up @@ -37,16 +38,24 @@ func (sp SupportedProviders) PrettyString() string {
return b.String()
}

func GitProviderName(url string) (string, error) {
switch {
case strings.Contains(url, "github"):
return GitHubProvider, nil
case strings.Contains(url, "gitlab"):
return GitLabProvider, nil
case strings.Contains(url, "bitbucket-cloud"):
//return BitBucketProvider, nil
func GitProviderName(rawURL string) (string, error) {
parsedURL, err := giturls.ParseTransport(rawURL)
if err != nil {
parsedURL, err = giturls.ParseScp(rawURL)
}
if err == nil {
for _, label := range strings.Split(strings.ToLower(parsedURL.Hostname()), ".") {
switch label {
case GitHubProvider:
return GitHubProvider, nil
case GitLabProvider:
return GitLabProvider, nil
case BitBucketProvider:
//return BitBucketProvider, nil
}
}
}
return "", fmt.Errorf("runtime for url %q is not supported, please use one of supported runtimes: %s", url, SupportedProvidersList.PrettyString())
return "", fmt.Errorf("runtime for url %q is not supported, please use one of supported runtimes: %s", rawURL, SupportedProvidersList.PrettyString())
}

// RepoOwnerAndNameFromUrl for input url returns repo owner and repo name
Expand Down
45 changes: 45 additions & 0 deletions pkg/git/git_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,51 @@ func TestGitProviderName(t *testing.T) {
wantProvider: GitLabProvider,
wantErr: false,
},
{
name: "GitLab repository path contains GitHub",
url: "https://gitlab.com/foo/github-actions",
wantProvider: GitLabProvider,
wantErr: false,
},
{
name: "GitHub repository path contains GitLab",
url: "https://github.com/foo/gitlab-runner",
wantProvider: GitHubProvider,
wantErr: false,
},
{
name: "GitHub SSH",
url: "git@github.com:foo/bar.git",
wantProvider: GitHubProvider,
wantErr: false,
},
{
name: "GitLab SCP repository path contains GitHub",
url: "git@gitlab.com:foo/github-actions.git",
wantProvider: GitLabProvider,
wantErr: false,
},
{
name: "Provider name only in path - not supported",
url: "https://example.com/foo/github-actions",
wantErr: true,
},
{
name: "Provider name only in username - not supported",
url: "https://github@example.com/foo/bar",
wantErr: true,
},
{
name: "Provider name is not a complete host label - not supported",
url: "https://notgithub.example.com/foo/bar",
wantErr: true,
},
{
name: "Uppercase GitLab host",
url: "https://GITLAB.COM/foo/bar",
wantProvider: GitLabProvider,
wantErr: false,
},
{
name: "Bitbucket Cloud - not supported",
url: "https://bitbucket.com/foo/bar",
Expand Down
Loading