fix: outputs are only set when the job is successful (#1017)

Resolves forgejo/runner#1016

<!--start release-notes-assistant-->
<!--URL:https://code.forgejo.org/forgejo/runner-->
- bug fixes
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1017): <!--number 1017 --><!--line 0 --><!--description Zml4OiBvdXRwdXRzIGFyZSBvbmx5IHNldCB3aGVuIHRoZSBqb2IgaXMgc3VjY2Vzc2Z1bA==-->fix: outputs are only set when the job is successful<!--description-->
<!--end release-notes-assistant-->

Reviewed-on: https://code.forgejo.org/forgejo/runner/pulls/1017
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.code.forgejo.org>
Co-authored-by: Earl Warren <contact@earl-warren.org>
Co-committed-by: Earl Warren <contact@earl-warren.org>
This commit is contained in:
Earl Warren 2025-09-18 16:17:56 +00:00 committed by earl-warren
parent c25bd51857
commit 331979b887
No known key found for this signature in database
GPG key ID: F128CBE6AB3A7201
2 changed files with 20 additions and 4 deletions

View file

@ -130,10 +130,12 @@ func (r *Reporter) Fire(entry *log.Entry) error {
} }
} }
} }
if v, ok := entry.Data["jobOutputs"]; ok { if r.state.Result == runnerv1.Result_RESULT_SUCCESS {
_ = r.setOutputs(v.(map[string]string)) if v, ok := entry.Data["jobOutputs"]; ok {
} else { _ = r.setOutputs(v.(map[string]string))
log.Panicf("received log entry with jobResult, but without jobOutputs -- outputs will be corrupted for this job") } else {
log.Panicf("received log entry with successful jobResult, but without jobOutputs -- outputs will be corrupted for this job")
}
} }
} }
if !r.duringSteps() { if !r.duringSteps() {

View file

@ -301,6 +301,20 @@ func TestReporter_Fire(t *testing.T) {
value, _ := reporter.outputs.Load("key1") value, _ := reporter.outputs.Load("key1")
assert.EqualValues(t, "value1", value) assert.EqualValues(t, "value1", value)
}) })
t.Run("jobResult jobOutputs is absent if not success", func(t *testing.T) {
reporter, _, _ := mockReporter(t)
dataStep0 := map[string]any{
"stage": "Post",
"stepNumber": 0,
"raw_output": true,
"jobResult": "skipped",
}
assert.NoError(t, reporter.Fire(&log.Entry{Message: "skipped!", Data: dataStep0}))
assert.EqualValues(t, runnerv1.Result_RESULT_SKIPPED, reporter.state.Result)
})
} }
func TestReporterReportState(t *testing.T) { func TestReporterReportState(t *testing.T) {