~comcloudway/builds.sr.ht

ee6e6c26ae20de0a406d6aabaefc36f34818ee86 — Drew DeVault 1 year, 8 months ago 66e30c1
worker: ensure children are reaped
2 files changed, 14 insertions(+), 7 deletions(-)

M worker/context.go
M worker/tasks.go
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 {