Skip to content

Instantly share code, notes, and snippets.

@k1ng440
Created October 2, 2018 16:57
Show Gist options
  • Save k1ng440/82e1bc9be3d6a160ebc23ab54ae2f4af to your computer and use it in GitHub Desktop.
Save k1ng440/82e1bc9be3d6a160ebc23ab54ae2f4af to your computer and use it in GitHub Desktop.
Versioning with mage
// +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