1
0
mirror of https://github.com/golang/go synced 2024-11-18 12:44:49 -07:00
go/cmd/tip/talks.go
Andrew Gerrand 1d593709ec cmd/tip: serve talks.golang.org
Also make health check test the backup process.

Change-Id: I9d2ed2780c07bb08683d231fccad4674c2ac22a1
Reviewed-on: https://go-review.googlesource.com/14668
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-09-18 04:55:56 +00:00

74 lines
1.9 KiB
Go

// 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 = "ac6d9c1d842f9b6482f39f7a172e0251a0f7cbc0"
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
}