Created
October 2, 2018 16:57
-
-
Save k1ng440/82e1bc9be3d6a160ebc23ab54ae2f4af to your computer and use it in GitHub Desktop.
Versioning with mage
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// +build mage | |
package main | |
import ( | |
"encoding/json" | |
"fmt" | |
"io/ioutil" | |
"os" | |
"time" | |
"github.com/Masterminds/semver" | |
"github.com/magefile/mage/mg" | |
) | |
// Version mage versioning helper | |
type Version mg.Namespace | |
func check(e error) { | |
if e != nil { | |
panic(e) | |
} | |
} | |
// Read Do not execute this command | |
func (v Version) Read() *semver.Version { | |
if _, err := os.Stat(".buildver"); os.IsNotExist(err) { | |
x, _ := semver.NewVersion("v0.0.0") | |
err = v.write(*x) | |
check(err) | |
return x | |
} | |
var res map[string]interface{} | |
b, err := ioutil.ReadFile(".buildver") | |
check(err) | |
err = json.Unmarshal(b, &res) | |
check(err) | |
version, err := semver.NewVersion(res["version"].(string)) | |
check(err) | |
return version | |
} | |
func (v Version) write(vc semver.Version) error { | |
b, err := json.Marshal(map[string]interface{}{ | |
"time": time.Now(), | |
"version": vc.String(), | |
}) | |
err = ioutil.WriteFile(".buildver", b, 0644) | |
return err | |
} | |
// Patch Increase match release | |
func (v Version) Patch() error { | |
vc := v.Read() | |
return v.write(vc.IncPatch()) | |
} | |
// Minor Increase minor release | |
func (v Version) Minor() error { | |
vc := v.Read() | |
return v.write(vc.IncMinor()) | |
} | |
// Major Increase major release | |
func (v Version) Major() error { | |
vc := v.Read() | |
return v.write(vc.IncMajor()) | |
} | |
// Current Print the current version | |
func (v Version) Current() error { | |
vc := v.Read() | |
fmt.Println(vc.String()) | |
return nil | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment