fix(actions): harden log cursor, activity type and actor filter handling (#39721)

Fixes a few Actions bugs where user input or nondeterminism caused
failures:

- The job log view indexed task steps with the client-supplied cursor
step without a bounds check, so an out-of-range value panicked and
returned a 500.
- Workflow activity type filters (`types:`) were compiled with
`glob.MustCompile`, so an invalid pattern in a workflow file panicked
during event detection. Invalid patterns now simply don't match.
- Listing workflow runs with an unknown `actor` returned a 500; it now
returns 404.
- The v4 artifact `ListArtifacts` response was built by ranging over a
map, so its order changed between calls. It now follows database order.
- The error from marshalling a workflow job when inserting run jobs was
silently ignored.

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
bircniandwxiaoguang authored and GitHub committed 2026-10-10 19:52:23 +00:00
1 parent 321d3ec104
commit 8a9e8c4e8c
13 files changed
+70 -28

No files matched your search

+1 -1
View File
@@ -851,7 +851,7 @@ func convertToViewModel(ctx context.Context, locale translation.Locale, cursors
}
for _, cursor := range cursors {
if !cursor.Expanded {
if !cursor.Expanded || cursor.Step < 0 || cursor.Step >= len(steps) {
continue
}
+7
View File
@@ -88,6 +88,13 @@ func TestConvertToViewModel(t *testing.T) {
viewJobSteps, _, err := convertToViewModel(t.Context(), translation.MockLocale{}, nil, task)
require.NoError(t, err)
t.Run("out of range cursor step", func(t *testing.T) {
cursors := []LogCursor{{Step: -1, Expanded: true}, {Step: 3, Expanded: true}}
_, logs, err := convertToViewModel(t.Context(), translation.MockLocale{}, cursors, task)
require.NoError(t, err)
assert.Empty(t, logs)
})
expectedViewJobs := []*ViewJobStep{
{
Summary: "Set up job",