forked from golang/tools
/
talks.go
73 lines (63 loc) · 1.94 KB
/
talks.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
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.
package main
import (
"bytes"
"errors"
"fmt"
"os"
"os/exec"
"path/filepath"
"runtime"
)
type talksBuilder struct {
}
func (b talksBuilder) Signature(heads map[string]string) string {
return heads["talks"]
}
const talksToolsRev = "1f1b3322f67af76803c942fd237291538ec68262"
func (b talksBuilder) Init(dir, hostport string, heads map[string]string) (*exec.Cmd, error) {
toolsDir := filepath.Join(dir, "gopath/src/golang.org/x/tools")
if err := checkout(repoURL+"tools", talksToolsRev, toolsDir); err != nil {
return nil, err
}
talksDir := filepath.Join(dir, "gopath/src/golang.org/x/talks")
if err := checkout(repoURL+"talks", heads["talks"], talksDir); err != nil {
return nil, err
}
goDir := os.Getenv("GOROOT_BOOTSTRAP")
if goDir == "" {
goDir = runtime.GOROOT()
}
goBin := filepath.Join(goDir, "bin/go")
goPath := filepath.Join(dir, "gopath")
presentPath := "golang.org/x/tools/cmd/present"
install := exec.Command(goBin, "install", "-tags=appenginevm", presentPath)
install.Env = []string{"GOROOT=" + goDir, "GOPATH=" + goPath}
if err := runErr(install); err != nil {
return nil, err
}
talksBin := filepath.Join(goPath, "bin/present")
presentSrc := filepath.Join(goPath, "src", presentPath)
present := exec.Command(talksBin, "-http="+hostport, "-base="+presentSrc)
present.Dir = talksDir
// TODO(adg): log this somewhere useful
present.Stdout = os.Stdout
present.Stderr = os.Stderr
if err := present.Start(); err != nil {
return nil, err
}
return present, nil
}
var talksMsg = []byte("Talks - The Go Programming Language")
func (b talksBuilder) HealthCheck(hostport string) error {
body, err := getOK(fmt.Sprintf("http://%v/", hostport))
if err != nil {
return err
}
if !bytes.Contains(body, talksMsg) {
return errors.New("couldn't match string")
}
return nil
}