This repository has been archived by the owner on Mar 8, 2020. It is now read-only.
/
push.go
69 lines (63 loc) · 1.49 KB
/
push.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
package build
import (
"fmt"
"log"
"os"
"os/exec"
"regexp"
)
var reVers = regexp.MustCompile(`^v\d+`)
func pushEnabled() bool {
return !ciIsPR() && (ciBranch() == "master" || ciTag() != "")
}
func pushTagEnabled() bool {
return pushEnabled() && (reVers.MatchString(ciBranch()) || reVers.MatchString(ciTag()))
}
func pushLatestEnabled() bool {
return pushEnabled() && ciTag() != ""
}
func (d *Driver) Push(image string) error {
if isCI() {
log.Printf("CI variables: branch=%q, tag=%q, pr=%v", ciBranch(), ciTag(), ciIsPR())
}
if !pushTagEnabled() && !pushLatestEnabled() {
return fmt.Errorf("push disabled")
} else if image == "" {
return fmt.Errorf("image should be specified")
}
tag, err := d.VersionTag()
if err != nil {
return err
}
m, err := d.readManifest()
if err != nil {
return err
}
if user := os.Getenv("DOCKER_USERNAME"); user != "" {
cmd := exec.Command("docker", "login", "-u="+user, "-p="+os.Getenv("DOCKER_PASSWORD"))
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
return err
}
}
push := func(id, name string) error {
err = execIn("", nil, "docker", "tag", id, name)
if err != nil {
return err
}
return execIn("", nil, "docker", "push", name)
}
imageName := "bblfsh/" + m.Language + "-driver"
if pushTagEnabled() {
if err := push(image, imageName+":"+tag); err != nil {
return err
}
}
if pushLatestEnabled() {
if err := push(image, imageName+":latest"); err != nil {
return err
}
}
return nil
}