You've already forked go-semantic-release
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0bcede8594 | |||
| 34589749ba | |||
| b38abd00f2 | |||
| 913783cf08 | |||
| d701ce2352 | |||
| 4d0d1e4319 | |||
| c4cecdebb4 |
10
.release.yml
10
.release.yml
@@ -8,15 +8,15 @@ branch:
|
|||||||
master: release
|
master: release
|
||||||
develop: beta
|
develop: beta
|
||||||
assets:
|
assets:
|
||||||
- name: ./build/go-semantic-release.linux_x86_64
|
- path: ./build/go-semantic-release.linux_amd64
|
||||||
compress: true
|
compress: true
|
||||||
- name: ./build/go-semantic-release.linux_arm64
|
- path: ./build/go-semantic-release.linux_arm64
|
||||||
compress: true
|
compress: true
|
||||||
- name: ./build/go-semantic-release.windows_i386.exe
|
- path: ./build/go-semantic-release.windows_i386.exe
|
||||||
compress: true
|
compress: true
|
||||||
- name: ./build/go-semantic-release.windows_x86_64.exe
|
- path: ./build/go-semantic-release.windows_amd64.exe
|
||||||
compress: true
|
compress: true
|
||||||
- name: ./build/go-semantic-release.darwin_x86_64
|
- path: ./build/go-semantic-release.darwin_amd64
|
||||||
compress: true
|
compress: true
|
||||||
changelog:
|
changelog:
|
||||||
docker:
|
docker:
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ steps:
|
|||||||
GOOS=linux
|
GOOS=linux
|
||||||
GOARCH=amd64
|
GOARCH=amd64
|
||||||
CGO_ENABLED=0
|
CGO_ENABLED=0
|
||||||
go build -o build/go-semantic-release.linux_x86_64 -ldflags "-w -s --X main.version=`go-semantic-release next`"
|
go build -o build/go-semantic-release.linux_amd64 -ldflags "-w -s --X main.version=`go-semantic-release next`"
|
||||||
./cmd/go-semantic-release/
|
./cmd/go-semantic-release/
|
||||||
- >
|
- >
|
||||||
GOOS=linux
|
GOOS=linux
|
||||||
@@ -44,13 +44,13 @@ steps:
|
|||||||
GOOS=windows
|
GOOS=windows
|
||||||
GOARCH=amd64
|
GOARCH=amd64
|
||||||
CGO_ENABLED=0
|
CGO_ENABLED=0
|
||||||
go build -o build/go-semantic-release.windows_x86_64.exe -ldflags "-w -s -X main.version=`go-semantic-release next`"
|
go build -o build/go-semantic-release.windows_amd64.exe -ldflags "-w -s -X main.version=`go-semantic-release next`"
|
||||||
./cmd/go-semantic-release/
|
./cmd/go-semantic-release/
|
||||||
- >
|
- >
|
||||||
GOOS=darwin
|
GOOS=darwin
|
||||||
GOARCH=amd64
|
GOARCH=amd64
|
||||||
CGO_ENABLED=0
|
CGO_ENABLED=0
|
||||||
go build -o build/go-semantic-release.darwin_x86_64 -ldflags "-w -s -X main.version=`go-semantic-release next`"
|
go build -o build/go-semantic-release.darwin_amd64 -ldflags "-w -s -X main.version=`go-semantic-release next`"
|
||||||
./cmd/go-semantic-release/
|
./cmd/go-semantic-release/
|
||||||
- go-semantic-release --loglevel debug release # Actually make the release on Gitea. Uploading assets
|
- go-semantic-release --loglevel debug release # Actually make the release on Gitea. Uploading assets
|
||||||
environment:
|
environment:
|
||||||
@@ -64,25 +64,29 @@ steps:
|
|||||||
- push
|
- push
|
||||||
- manual
|
- manual
|
||||||
|
|
||||||
# publish-docker-tagged:
|
publish-docker-tagged:
|
||||||
# image: docker.io/cybercinch/woodpecker-plugin-depot
|
image: docker.io/cybercinch/woodpecker-plugin-depot
|
||||||
# pull: true
|
pull: true
|
||||||
# settings:
|
settings:
|
||||||
# <<: *docker_creds
|
<<: *docker_creds
|
||||||
# token:
|
token:
|
||||||
# from_secret: depot_token
|
from_secret: depot_token
|
||||||
# repohost: hub.cybercinch.nz
|
repohost: hub.cybercinch.nz
|
||||||
# repo: cybercinch/${CI_REPO_NAME}
|
repo: cybercinch/${CI_REPO_NAME}
|
||||||
# project:
|
project:
|
||||||
# from_secret: depot_project
|
from_secret: depot_project
|
||||||
# dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
# push: true
|
push: true
|
||||||
# platforms: *platforms
|
platforms: *platforms
|
||||||
# tags: ["latest", "$CI_COMMIT_TAG"]
|
buildargs:
|
||||||
# when:
|
- TAG=${CI_COMMIT_TAG}
|
||||||
# branch: ${CI_REPO_DEFAULT_BRANCH}
|
tags:
|
||||||
# event:
|
- "latest"
|
||||||
# - tag
|
- ${CI_COMMIT_TAG}
|
||||||
|
when:
|
||||||
|
branch: ${CI_REPO_DEFAULT_BRANCH}
|
||||||
|
event:
|
||||||
|
- tag
|
||||||
|
|
||||||
publish-docker-develop:
|
publish-docker-develop:
|
||||||
image: docker.io/cybercinch/woodpecker-plugin-depot
|
image: docker.io/cybercinch/woodpecker-plugin-depot
|
||||||
|
|||||||
14
Dockerfile
14
Dockerfile
@@ -1,8 +1,20 @@
|
|||||||
FROM alpine:3.14
|
FROM alpine:3.14
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
# Set by build-arg
|
||||||
|
ARG TAG=v2.2.3
|
||||||
|
|
||||||
|
# Strip out the prefix
|
||||||
|
ENV PLAT=${TARGETPLATFORM//"linux/"/}
|
||||||
|
|
||||||
WORKDIR /code
|
WORKDIR /code
|
||||||
|
|
||||||
COPY ./build/go-semantic-release.linux_x86_64 /usr/local/bin/go-semantic-release
|
ADD https://hub.cybercinch.nz/cybercinch/go-semantic-release/releases/download/${TAG}/go-semantic-release.linux_${PLAT}.zip /tmp
|
||||||
|
RUN apk add --no-cache unzip && \
|
||||||
|
unzip -d /tmp /tmp/go-semantic-release.linux_${PLAT}.zip && \
|
||||||
|
ls && \
|
||||||
|
ls /tmp && \
|
||||||
|
mv /tmp/go-semantic-release.linux_${PLAT} /usr/local/bin/go-semantic-release && \
|
||||||
|
rm -f /tmp/go-semantic-release.linux_${PLAT}.zip
|
||||||
|
|
||||||
USER 1000
|
USER 1000
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ func New(c *config.GiteaProvider, checkConfig bool) (*GiteaClient, error) {
|
|||||||
if err != nil && checkConfig {
|
if err != nil && checkConfig {
|
||||||
return &GiteaClient{}, err
|
return &GiteaClient{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
c.AccessToken = token
|
c.AccessToken = token
|
||||||
|
|
||||||
if c.URL == "" {
|
if c.URL == "" {
|
||||||
@@ -114,11 +115,13 @@ func (g *GiteaClient) makeRelease(releaseVersion *shared.ReleaseVersion, generat
|
|||||||
Title: generatedChangelog.Title,
|
Title: generatedChangelog.Title,
|
||||||
Note: generatedChangelog.Content,
|
Note: generatedChangelog.Content,
|
||||||
IsPrerelease: prerelease}
|
IsPrerelease: prerelease}
|
||||||
|
// TODO Test if this prevents release double-up
|
||||||
g.client.CreateRelease(g.config.User, g.config.Repo, opt)
|
|
||||||
|
|
||||||
release, _, err := g.client.CreateRelease(g.config.User, g.config.Repo, opt)
|
release, _, err := g.client.CreateRelease(g.config.User, g.config.Repo, opt)
|
||||||
|
|
||||||
|
g.log.Debugf("Release response: %+v", *release)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
g.log.Debugf("Release Error response: %+v", err)
|
||||||
if strings.Contains(err.Error(), "Release is has no Tag") {
|
if strings.Contains(err.Error(), "Release is has no Tag") {
|
||||||
g.log.Infof("A release with tag %s already exits, will not perform a release or update", tag)
|
g.log.Infof("A release with tag %s already exits, will not perform a release or update", tag)
|
||||||
return nil
|
return nil
|
||||||
@@ -126,7 +129,6 @@ func (g *GiteaClient) makeRelease(releaseVersion *shared.ReleaseVersion, generat
|
|||||||
return fmt.Errorf("could not create release: %s", err.Error())
|
return fmt.Errorf("could not create release: %s", err.Error())
|
||||||
}
|
}
|
||||||
g.release = release
|
g.release = release
|
||||||
g.log.Debugf("Release response: %+v", *release)
|
|
||||||
g.log.Infof("Created release")
|
g.log.Infof("Created release")
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
|
|||||||
199
internal/releaser/gitea/gitea_test.go
Normal file
199
internal/releaser/gitea/gitea_test.go
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
package gitea
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
|
"github.com/Masterminds/semver"
|
||||||
|
|
||||||
|
"github.com/Nightapes/go-semantic-release/internal/shared"
|
||||||
|
"github.com/Nightapes/go-semantic-release/pkg/config"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
type testHelperMethodStruct struct {
|
||||||
|
config config.GitHubProvider
|
||||||
|
valid bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type testReleaseStruct struct {
|
||||||
|
config config.GitHubProvider
|
||||||
|
releaseVersion *shared.ReleaseVersion
|
||||||
|
generatedChangelog *shared.GeneratedChangelog
|
||||||
|
requestResponseBody string
|
||||||
|
requestResponseCode int
|
||||||
|
valid bool
|
||||||
|
}
|
||||||
|
|
||||||
|
var testNewClient = []testHelperMethodStruct{
|
||||||
|
{config: config.GitHubProvider{
|
||||||
|
Repo: "foo",
|
||||||
|
User: "bar",
|
||||||
|
},
|
||||||
|
valid: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
{config: config.GitHubProvider{
|
||||||
|
Repo: "foo",
|
||||||
|
User: "bar",
|
||||||
|
CustomURL: "https://test.com",
|
||||||
|
},
|
||||||
|
valid: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
var lastVersion, _ = semver.NewVersion("1.0.0")
|
||||||
|
var newVersion, _ = semver.NewVersion("2.0.0")
|
||||||
|
|
||||||
|
var testReleases = []testReleaseStruct{
|
||||||
|
{
|
||||||
|
config: config.GitHubProvider{
|
||||||
|
Repo: "foo",
|
||||||
|
User: "bar",
|
||||||
|
},
|
||||||
|
releaseVersion: &shared.ReleaseVersion{
|
||||||
|
Last: shared.ReleaseVersionEntry{
|
||||||
|
Version: lastVersion,
|
||||||
|
Commit: "foo",
|
||||||
|
},
|
||||||
|
Next: shared.ReleaseVersionEntry{
|
||||||
|
Version: newVersion,
|
||||||
|
Commit: "bar",
|
||||||
|
},
|
||||||
|
Branch: "master",
|
||||||
|
},
|
||||||
|
generatedChangelog: &shared.GeneratedChangelog{
|
||||||
|
Title: "title",
|
||||||
|
Content: "content",
|
||||||
|
},
|
||||||
|
requestResponseBody: "{ \"url\": \"https://api.github.com/repos/octocat/Hello-World/releases/1\", \"html_url\": \"https://github.com/octocat/Hello-World/releases/v1.0.0\", \"assets_url\": \"https://api.github.com/repos/octocat/Hello-World/releases/1/assets\", \"upload_url\": \"https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets{?name,label}\", \"tarball_url\": \"https://api.github.com/repos/octocat/Hello-World/tarball/v1.0.0\", \"zipball_url\": \"https://api.github.com/repos/octocat/Hello-World/zipball/v1.0.0\", \"id\": 1, \"node_id\": \"MDc6UmVsZWFzZTE=\", \"tag_name\": \"v1.0.0\", \"target_commitish\": \"master\", \"name\": \"v1.0.0\", \"body\": \"Description of the release\", \"draft\": false, \"prerelease\": false, \"created_at\": \"2013-02-27T19:35:32Z\", \"published_at\": \"2013-02-27T19:35:32Z\", \"author\": { \"login\": \"octocat\", \"id\": 1, \"node_id\": \"MDQ6VXNlcjE=\", \"avatar_url\": \"https://github.com/images/error/octocat_happy.gif\", \"gravatar_id\": \"\", \"url\": \"https://api.github.com/users/octocat\", \"html_url\": \"https://github.com/octocat\", \"followers_url\": \"https://api.github.com/users/octocat/followers\", \"following_url\": \"https://api.github.com/users/octocat/following{/other_user}\", \"gists_url\": \"https://api.github.com/users/octocat/gists{/gist_id}\", \"starred_url\": \"https://api.github.com/users/octocat/starred{/owner}{/repo}\", \"subscriptions_url\": \"https://api.github.com/users/octocat/subscriptions\", \"organizations_url\": \"https://api.github.com/users/octocat/orgs\", \"repos_url\": \"https://api.github.com/users/octocat/repos\", \"events_url\": \"https://api.github.com/users/octocat/events{/privacy}\", \"received_events_url\": \"https://api.github.com/users/octocat/received_events\", \"type\": \"User\", \"site_admin\": false }, \"assets\": [ ]}",
|
||||||
|
requestResponseCode: 200,
|
||||||
|
valid: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
config: config.GitHubProvider{
|
||||||
|
Repo: "foo",
|
||||||
|
User: "bar",
|
||||||
|
},
|
||||||
|
releaseVersion: &shared.ReleaseVersion{
|
||||||
|
Last: shared.ReleaseVersionEntry{
|
||||||
|
Version: lastVersion,
|
||||||
|
Commit: "foo",
|
||||||
|
},
|
||||||
|
Next: shared.ReleaseVersionEntry{
|
||||||
|
Version: newVersion,
|
||||||
|
Commit: "bar",
|
||||||
|
},
|
||||||
|
Branch: "master",
|
||||||
|
},
|
||||||
|
generatedChangelog: &shared.GeneratedChangelog{
|
||||||
|
Title: "title",
|
||||||
|
Content: "content",
|
||||||
|
},
|
||||||
|
requestResponseCode: 400,
|
||||||
|
valid: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func initHTTPServer(respCode int, body string) *httptest.Server {
|
||||||
|
|
||||||
|
return httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
||||||
|
|
||||||
|
log.Infof("Got call from %s %s", req.Method, req.URL.String())
|
||||||
|
|
||||||
|
rw.WriteHeader(respCode)
|
||||||
|
rw.Header().Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
if _, err := rw.Write([]byte(body)); err != nil {
|
||||||
|
log.Info(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNew(t *testing.T) {
|
||||||
|
for _, testOject := range testNewClient {
|
||||||
|
if testOject.valid {
|
||||||
|
os.Setenv("GITHUB_TOKEN", "XXX")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := New(&testOject.config, true)
|
||||||
|
assert.Equal(t, testOject.valid, err == nil)
|
||||||
|
|
||||||
|
os.Unsetenv("GITHUB_TOKEN")
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetCommitURL(t *testing.T) {
|
||||||
|
os.Setenv("GITHUB_TOKEN", "XX")
|
||||||
|
for _, testOject := range testNewClient {
|
||||||
|
client, _ := New(&testOject.config, false)
|
||||||
|
actualURL := client.GetCommitURL()
|
||||||
|
if testOject.config.CustomURL != "" {
|
||||||
|
expectedURL := fmt.Sprintf("%s/api/v3/%s/%s/commit/{{hash}}", testOject.config.CustomURL, testOject.config.User, testOject.config.Repo)
|
||||||
|
assert.EqualValues(t, expectedURL, actualURL)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
expectedURL := fmt.Sprintf("%s/%s/%s/commit/{{hash}}", "https://github.com", testOject.config.User, testOject.config.Repo)
|
||||||
|
assert.EqualValues(t, expectedURL, actualURL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
os.Unsetenv("GITHUB_TOKEN")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetCompareURL(t *testing.T) {
|
||||||
|
os.Setenv("GITHUB_TOKEN", "XX")
|
||||||
|
for _, testOject := range testNewClient {
|
||||||
|
client, _ := New(&testOject.config, false)
|
||||||
|
actualURL := client.GetCompareURL("1", "2")
|
||||||
|
if testOject.config.CustomURL != "" {
|
||||||
|
expectedURL := fmt.Sprintf("%s/api/v3/%s/%s/compare/%s...%s", testOject.config.CustomURL, testOject.config.User, testOject.config.Repo, "1", "2")
|
||||||
|
assert.EqualValues(t, expectedURL, actualURL)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
expectedURL := fmt.Sprintf("%s/%s/%s/compare/%s...%s", "https://github.com", testOject.config.User, testOject.config.Repo, "1", "2")
|
||||||
|
assert.EqualValues(t, expectedURL, actualURL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
os.Unsetenv("GITHUB_TOKEN")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCreateRelease(t *testing.T) {
|
||||||
|
os.Setenv("GITHUB_TOKEN", "XX")
|
||||||
|
|
||||||
|
for _, testObejct := range testReleases {
|
||||||
|
if testObejct.valid {
|
||||||
|
server := initHTTPServer(testObejct.requestResponseCode, testObejct.requestResponseBody)
|
||||||
|
testObejct.config.CustomURL = server.URL
|
||||||
|
client, _ := New(&testObejct.config, false)
|
||||||
|
|
||||||
|
err := client.makeRelease(testObejct.releaseVersion, testObejct.generatedChangelog)
|
||||||
|
if err != nil {
|
||||||
|
t.Log(err)
|
||||||
|
}
|
||||||
|
assert.Equal(t, testObejct.valid, err == nil)
|
||||||
|
|
||||||
|
server.Close()
|
||||||
|
|
||||||
|
} else {
|
||||||
|
testObejct.config.CustomURL = "http://foo"
|
||||||
|
client, _ := New(&testObejct.config, false)
|
||||||
|
|
||||||
|
err := client.makeRelease(testObejct.releaseVersion, testObejct.generatedChangelog)
|
||||||
|
if err != nil {
|
||||||
|
t.Log(err)
|
||||||
|
}
|
||||||
|
assert.Error(t, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
os.Unsetenv("GITHUB_TOKEN")
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user