Skip to content

Commit ad1a8d4

Browse files
zenirechristophwitzko
authored andcommitted
feat: add strip_v_tag_prefix option
1 parent 069f65b commit ad1a8d4

File tree

2 files changed

+47
-7
lines changed

2 files changed

+47
-7
lines changed

pkg/provider/github.go

+20-5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"os"
88
"regexp"
9+
"strconv"
910
"strings"
1011
"time"
1112

@@ -19,10 +20,11 @@ import (
1920
var PVERSION = "dev"
2021

2122
type GitHubRepository struct {
22-
owner string
23-
repo string
24-
client *github.Client
25-
compareCommits bool
23+
owner string
24+
repo string
25+
stripVTagPrefix bool
26+
client *github.Client
27+
compareCommits bool
2628
}
2729

2830
func (repo *GitHubRepository) Init(config map[string]string) error {
@@ -68,6 +70,14 @@ func (repo *GitHubRepository) Init(config map[string]string) error {
6870
repo.compareCommits = true
6971
}
7072

73+
var err error
74+
stripVTagPrefix := config["strip_v_tag_prefix"]
75+
repo.stripVTagPrefix, err = strconv.ParseBool(stripVTagPrefix)
76+
77+
if stripVTagPrefix != "" && err != nil {
78+
return fmt.Errorf("failed to set property strip_v_tag_prefix: %w", err)
79+
}
80+
7181
return nil
7282
}
7383

@@ -192,7 +202,12 @@ func (repo *GitHubRepository) GetReleases(rawRe string) ([]*semrel.Release, erro
192202
}
193203

194204
func (repo *GitHubRepository) CreateRelease(release *provider.CreateReleaseConfig) error {
195-
tag := fmt.Sprintf("v%s", release.NewVersion)
205+
prefix := "v"
206+
if repo.stripVTagPrefix {
207+
prefix = ""
208+
}
209+
210+
tag := prefix + release.NewVersion
196211
isPrerelease := release.Prerelease || semver.MustParse(release.NewVersion).Prerelease() != ""
197212

198213
if release.Branch != release.SHA {

pkg/provider/github_test.go

+27-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ import (
1616
"github.com/stretchr/testify/require"
1717
)
1818

19+
var validTags = map[string]bool{
20+
"v2.0.0": true,
21+
"2.0.0": true,
22+
}
23+
1924
func TestNewGithubRepository(t *testing.T) {
2025
require := require.New(t)
2126

@@ -37,6 +42,7 @@ func TestNewGithubRepository(t *testing.T) {
3742
"github_enterprise_host": "github.enterprise",
3843
"slug": "owner/test-repo",
3944
"token": "token",
45+
"strip_v_tag_prefix": "true",
4046
})
4147
require.NoError(err)
4248
require.Equal("github.enterprise", repo.client.BaseURL.Host)
@@ -160,7 +166,7 @@ func githubHandler(w http.ResponseWriter, r *http.Request) {
160166
var data map[string]string
161167
json.NewDecoder(r.Body).Decode(&data)
162168
r.Body.Close()
163-
if data["sha"] != testSHA || data["ref"] != "refs/tags/v2.0.0" {
169+
if data["sha"] != testSHA || (data["ref"] != "refs/tags/v2.0.0" && data["ref"] != "refs/tags/2.0.0") {
164170
http.Error(w, "invalid sha or ref", http.StatusBadRequest)
165171
return
166172
}
@@ -171,10 +177,12 @@ func githubHandler(w http.ResponseWriter, r *http.Request) {
171177
var data map[string]string
172178
json.NewDecoder(r.Body).Decode(&data)
173179
r.Body.Close()
174-
if data["tag_name"] != "v2.0.0" {
180+
181+
if _, ok := validTags[data["tag_name"]]; !ok {
175182
http.Error(w, "invalid tag name", http.StatusBadRequest)
176183
return
177184
}
185+
178186
fmt.Fprint(w, "{}")
179187
return
180188
}
@@ -283,3 +291,20 @@ func TestGithubCreateRelease(t *testing.T) {
283291
err := repo.CreateRelease(&provider.CreateReleaseConfig{NewVersion: "2.0.0", SHA: testSHA})
284292
require.NoError(t, err)
285293
}
294+
295+
func TestGitHubStripVTagRelease(t *testing.T) {
296+
ts := httptest.NewServer(http.HandlerFunc(githubHandler))
297+
defer ts.Close()
298+
299+
repo := &GitHubRepository{}
300+
err := repo.Init(map[string]string{
301+
"slug": "owner/test-repo",
302+
"token": "token",
303+
"strip_v_tag_prefix": "true",
304+
})
305+
require.NoError(t, err)
306+
repo.client.BaseURL, _ = url.Parse(ts.URL + "/")
307+
308+
err = repo.CreateRelease(&provider.CreateReleaseConfig{NewVersion: "2.0.0", SHA: testSHA})
309+
require.NoError(t, err)
310+
}

0 commit comments

Comments
 (0)