M worker/context.go => worker/context.go +7 -4
@@ 327,17 327,20 @@ func (ctx *JobContext) FileSize(path string) (int64, error) {
if len(parts) != 2 {
return 0, errors.New("Unexpected response from wc")
}
+ if err := wc.Wait(); err != nil {
+ return 0, err
+ }
return strconv.ParseInt(parts[0], 10, 64)
}
-func (ctx *JobContext) Download(path string) (io.ReadCloser, error) {
+func (ctx *JobContext) Download(path string) (io.ReadCloser, *exec.Cmd, error) {
cat := ctx.SSH("cat", path)
pipe, err := cat.StdoutPipe()
if err != nil {
- return nil, err
+ return nil, nil, err
}
if err := cat.Start(); err != nil {
- return nil, err
+ return nil, nil, err
}
- return pipe, nil
+ return pipe, cat, nil
}
M worker/tasks.go => worker/tasks.go +7 -3
@@ 610,12 610,13 @@ func (ctx *JobContext) RunTasks() error {
}
func (ctx *JobContext) isMarkedAsCompleted() bool {
- rc, err := ctx.Download(".complete-build")
+ rc, cmd, err := ctx.Download(".complete-build")
if err != nil {
return false
}
+ defer rc.Close()
b, _ := ioutil.ReadAll(rc)
- rc.Close()
+ cmd.Wait()
return strings.TrimSpace(string(b)) == "1"
}
@@ 689,7 690,7 @@ func (ctx *JobContext) UploadArtifacts() error {
ctx.Log.Printf("%v", err)
return err
}
- pipe, err := ctx.Download(shquote(src))
+ pipe, cmd, err := ctx.Download(shquote(src))
if err != nil {
ctx.Log.Printf("Error reading artifact file: %v", err)
return err
@@ 702,6 703,9 @@ func (ctx *JobContext) UploadArtifacts() error {
if err != nil {
return err
}
+ if err := cmd.Wait(); err != nil {
+ return err
+ }
url := fmt.Sprintf("https://%s/%s/%s", upstream, bucket, name)
err = ctx.Job.InsertArtifact(src, filepath.Base(src), url, size)
if err != nil {