-
Notifications
You must be signed in to change notification settings - Fork 43
/
main.go
102 lines (83 loc) 路 2.66 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package main
import (
"context"
"errors"
"flag"
"fmt"
"github.com/semantic-release/go-semantic-release"
"github.com/semantic-release/go-semantic-release/condition"
"github.com/semantic-release/go-semantic-release/update"
"io/ioutil"
"log"
"os"
)
var SRVERSION string
func errorHandler(logger *log.Logger) func(error) {
return func(err error) {
if err != nil {
logger.Println(err)
os.Exit(1)
}
}
}
func main() {
token := flag.String("token", os.Getenv("GITHUB_TOKEN"), "github token")
slug := flag.String("slug", os.Getenv("TRAVIS_REPO_SLUG"), "slug of the repository")
ghr := flag.Bool("ghr", false, "create a .ghr file with the parameters for ghr")
noci := flag.Bool("noci", false, "run semantic-release locally")
dry := flag.Bool("dry", false, "do not create release")
vFile := flag.Bool("vf", false, "create a .version file")
showVersion := flag.Bool("version", false, "outputs the semantic-release version")
updateFile := flag.String("update", "", "updates the version of a certain file")
flag.Parse()
if *showVersion {
fmt.Printf("semantic-release v%s", SRVERSION)
return
}
logger := log.New(os.Stderr, "[semantic-release]: ", 0)
exitIfError := errorHandler(logger)
if *token == "" {
exitIfError(errors.New("github token missing"))
}
if *slug == "" {
exitIfError(errors.New("slug missing"))
}
repo, err := semrel.NewRepository(context.TODO(), *slug, *token)
exitIfError(err)
logger.Println("getting default branch...")
defaultBranch, isPrivate, err := repo.GetInfo()
exitIfError(err)
logger.Println("found default branch: " + defaultBranch)
if !*noci {
logger.Println("running CI condition...")
exitIfError(condition.Travis(*token, defaultBranch, isPrivate))
}
logger.Println("getting latest release...")
release, err := repo.GetLatestRelease()
exitIfError(err)
logger.Println("found version: " + release.Version.String())
logger.Println("getting commits...")
commits, err := repo.GetCommits()
exitIfError(err)
logger.Println("calculating new version...")
newVer := semrel.GetNewVersion(commits, release)
if newVer == nil {
exitIfError(errors.New("no change"))
}
logger.Println("new version: " + newVer.String())
if *dry {
exitIfError(errors.New("DRY RUN: no release was created"))
}
logger.Println("creating release...")
exitIfError(repo.CreateRelease(commits, release, newVer))
if *ghr {
exitIfError(ioutil.WriteFile(".ghr", []byte(fmt.Sprintf("-u %s -r %s v%s", repo.Owner, repo.Repo, newVer.String())), 0644))
}
if *vFile {
exitIfError(ioutil.WriteFile(".version", []byte(newVer.String()), 0644))
}
if *updateFile != "" {
exitIfError(update.Apply(*updateFile, newVer.String()))
}
logger.Println("done.")
}