func processRun( parentCtx *common.Context, client *http.Client, baseURL *url.URL, ) error { requestURL, err := baseURL.Parse("run/request/") if err != nil { panic(err) } resp, err := client.Get(requestURL.String()) if err != nil { return err } defer resp.Body.Close() ctx := parentCtx.DebugContext() syncID, err := strconv.ParseUint(resp.Header.Get("Sync-ID"), 10, 64) if err != nil { return err } ctx.EventCollector.Add(ctx.EventFactory.NewReceiverClockSyncEvent(syncID)) decoder := json.NewDecoder(resp.Body) var run common.Run if err := decoder.Decode(&run); err != nil { return err } uploadURL, err := baseURL.Parse(fmt.Sprintf("run/%d/results/", run.AttemptID)) if err != nil { return err } finished := make(chan error, 1) if err = gradeAndUploadResults( ctx, client, uploadURL.String(), &run, finished, ); err != nil { return err } return <-finished }