Compare commits

..

7 Commits

Author SHA1 Message Date
0bcede8594 fix(ci): Workaround for alpine sh
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
2024-04-02 23:49:32 +13:00
34589749ba fix(ci): Update YAML config 🔧
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
2024-04-02 23:22:24 +13:00
b38abd00f2 fix(ci): Send build-arg to depot
Some checks failed
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
2024-04-02 22:52:54 +13:00
913783cf08 fix(ci): Updated architecture types to align docker image. 🔧
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2024-04-02 22:11:58 +13:00
d701ce2352 fix(releaser): Bump 💡
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-04-02 16:16:13 +13:00
4d0d1e4319 fix(releaser): Removed additional CreateRelease call to gitea 🐛
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-04-02 16:07:28 +13:00
c4cecdebb4 fix(releaser): Add debug info for release creation gitea 🐛
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-04-02 15:51:23 +13:00
5 changed files with 249 additions and 32 deletions

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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")
}