From 15288d9e275a9bfbdd7d630dbff3408353066e46 Mon Sep 17 00:00:00 2001 From: Raimo Radczewski Date: Sat, 25 May 2024 17:08:59 +0200 Subject: [PATCH] feature: Allow baseVersion to patch trunkver prerelease onto --- action.yml | 11 ++++++++++- cmd/trunkver.go | 23 ++++++++++++++++++----- go.mod | 1 + go.sum | 2 ++ smoke.yaml | 37 ++++++++++++++++++++++++++++++++++++- 5 files changed, 67 insertions(+), 7 deletions(-) diff --git a/action.yml b/action.yml index 5c35d20..c2dc632 100644 --- a/action.yml +++ b/action.yml @@ -1,6 +1,15 @@ name: trunkver description: Create a trunkver for this github action run author: crftd.tech +inputs: + baseVersion: + description: The base version to use + required: false + default: "" + prerelease: + description: The prerelease version to use + required: false + default: "false" outputs: trunkver: description: The trunkver @@ -13,4 +22,4 @@ runs: - -o - pipefail - -c - - echo trunkver=$(/trunkver) | tee $GITHUB_OUTPUT + - echo trunkver=$(/trunkver "--prerelease=${{ inputs.prerelease }}" "${{ inputs.baseVersion }}") | tee $GITHUB_OUTPUT diff --git a/cmd/trunkver.go b/cmd/trunkver.go index f55ce5c..f69e5ae 100644 --- a/cmd/trunkver.go +++ b/cmd/trunkver.go @@ -7,6 +7,7 @@ import ( "os" "time" + "github.com/coreos/go-semver/semver" "github.com/crftd-tech/trunkver/internal/ci" ) @@ -23,7 +24,7 @@ func formatTrunkver(ts time.Time, sourceRef, buildRef string, spec SPEC) string if spec == FULL_SEMVER { return ts.UTC().Format("20060102150405") + ".0.0-" + sourceRef + "-" + buildRef } else if spec == PRERELEASE_ONLY { - return "-" + ts.UTC().Format("20060102150405") + "-" + sourceRef + "-" + buildRef + return ts.UTC().Format("20060102150405") + "-" + sourceRef + "-" + buildRef } panic("Invalid spec: " + string(spec)) } @@ -41,6 +42,7 @@ func run(out io.Writer, err io.Writer, args []string) { prereleaseOnly := flagSet.Bool("prerelease", false, "Build the trunkver as the prerelease part of a version (e.g. for nightly builds)") flagSet.Parse(args[1:]) + baseVersion := flagSet.Arg(0) if *version { fmt.Fprintln(err, Version) @@ -79,10 +81,21 @@ func run(out io.Writer, err io.Writer, args []string) { } } - var spec SPEC = FULL_SEMVER - if *prereleaseOnly { - spec = PRERELEASE_ONLY + if !*prereleaseOnly { + fmt.Fprintln(out, formatTrunkver(parsedTime, *sRef, *bRef, FULL_SEMVER)) + return } - fmt.Fprintln(out, formatTrunkver(parsedTime, *sRef, *bRef, spec)) + var trunkVer string = formatTrunkver(parsedTime, *sRef, *bRef, PRERELEASE_ONLY) + if baseVersion == "" { + fmt.Fprintln(out, trunkVer) + return + } + + if baseVersion[0] == 'v' { + baseVersion = baseVersion[1:] + } + var semverBaseVersion = semver.New(baseVersion) + semverBaseVersion.PreRelease = semver.PreRelease(trunkVer) + fmt.Fprintln(out, semverBaseVersion.String()) } diff --git a/go.mod b/go.mod index 801ec64..337407e 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/crftd-tech/trunkver go 1.22 require github.com/stretchr/testify v1.9.0 +require github.com/coreos/go-semver v0.3.1 require ( github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/go.sum b/go.sum index 60ce688..8923be1 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= +github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/smoke.yaml b/smoke.yaml index 8d6203b..77b7948 100644 --- a/smoke.yaml +++ b/smoke.yaml @@ -21,7 +21,42 @@ tests: - "R4242" - --prerelease stdout: | - -20240522142548-g1234567-R4242 + 20240522142548-g1234567-R4242 + + - name: prerelease/panic-if-invalid-semver + args: + - --source-ref + - "g1234567" + - --build-ref + - "R4242" + - --prerelease + - "0" + exit-status: 2 + stderr: + contains: panic + + - name: prerelease/with-given-semver + args: + - --source-ref + - "g1234567" + - --build-ref + - "R4242" + - --prerelease + - "0.1.0" + stdout: | + 0.1.0-20240522142548-g1234567-R4242 + + - name: prerelease/with-given-semver-with-v + args: + - --source-ref + - "g1234567" + - --build-ref + - "R4242" + - --prerelease + - "v0.1.0" + stdout: | + 0.1.0-20240522142548-g1234567-R4242 + - name: panic/if-no-build-ref args: