Skip to content
Snippets Groups Projects
Unverified Commit a8eab7a2 authored by Mathieu St-Vincent's avatar Mathieu St-Vincent Committed by GitHub
Browse files

feat: add `strip_v_tag_prefix` config option

parent 77df67b8
No related branches found
No related tags found
No related merge requests found
......@@ -5,6 +5,7 @@ import (
"fmt"
"os"
"regexp"
"strconv"
"github.com/Masterminds/semver/v3"
"github.com/go-semantic-release/semantic-release/v2/pkg/provider"
......@@ -17,6 +18,7 @@ var PVERSION = "dev"
type GitLabRepository struct {
projectID string
branch string
stripVTagPrefix bool
client *gitlab.Client
}
......@@ -47,14 +49,18 @@ func (repo *GitLabRepository) Init(config map[string]string) error {
return fmt.Errorf("gitlab_projectid is required")
}
var err error
stripVTagPrefix := config["strip_v_tag_prefix"]
repo.stripVTagPrefix, err = strconv.ParseBool(stripVTagPrefix)
if stripVTagPrefix != "" && err != nil {
return fmt.Errorf("failed to set property strip_v_tag_prefix: %w", err)
}
repo.projectID = projectID
repo.branch = branch
var (
client *gitlab.Client
err error
)
var client *gitlab.Client
if gitlabBaseUrl != "" {
client, err = gitlab.NewClient(token, gitlab.WithBaseURL(gitlabBaseUrl))
} else {
......@@ -166,7 +172,12 @@ func (repo *GitLabRepository) GetReleases(rawRe string) ([]*semrel.Release, erro
}
func (repo *GitLabRepository) CreateRelease(release *provider.CreateReleaseConfig) error {
tag := fmt.Sprintf("v%s", release.NewVersion)
prefix := "v"
if repo.stripVTagPrefix {
prefix = ""
}
tag := prefix + release.NewVersion
// Gitlab does not have any notion of pre-releases
_, _, err := repo.client.Releases.CreateRelease(repo.projectID, &gitlab.CreateReleaseOptions{
......
......@@ -14,6 +14,11 @@ import (
"github.com/xanzy/go-gitlab"
)
var validTags = map[string]bool{
"v2.0.0": true,
"2.0.0": true,
}
func TestNewGitlabRepository(t *testing.T) {
require := require.New(t)
......@@ -34,6 +39,7 @@ func TestNewGitlabRepository(t *testing.T) {
"gitlab_baseurl": "https://mygitlab.com",
"token": "token",
"gitlab_projectid": "1",
"strip_v_tag_prefix": "true",
})
require.NoError(err)
require.Equal("https://mygitlab.com/api/v4/", repo.client.BaseURL().String(), "invalid custom instance initialization")
......@@ -102,10 +108,12 @@ func GitlabHandler(w http.ResponseWriter, r *http.Request) {
var data map[string]string
json.NewDecoder(r.Body).Decode(&data)
r.Body.Close()
if data["tag_name"] != "v2.0.0" {
if _, ok := validTags[data["tag_name"]]; !ok {
http.Error(w, "invalid tag name", http.StatusBadRequest)
return
}
fmt.Fprint(w, "{}")
return
}
......@@ -184,3 +192,22 @@ func TestGitlabCreateRelease(t *testing.T) {
err := repo.CreateRelease(&provider.CreateReleaseConfig{NewVersion: "2.0.0", SHA: "deadbeef"})
require.NoError(t, err)
}
func TestGitlabStripVTagRelease(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(GitlabHandler))
defer ts.Close()
repo := &GitLabRepository{}
err := repo.Init(map[string]string{
"gitlab_baseurl": ts.URL,
"token": "gitlab-examples-ci",
"gitlab_branch": "",
"gitlab_projectid": strconv.Itoa(GITLAB_PROJECT_ID),
"strip_v_tag_prefix": "true",
})
require.NoError(t, err)
err = repo.CreateRelease(&provider.CreateReleaseConfig{NewVersion: "2.0.0", SHA: "deadbeef"})
require.NoError(t, err)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment