detached 79df483

fix(executor): trim the evaluated job name

GitHub shows 'm two 2', not 'm two 2 ', when the last matrix value is empty
(recorded: matrix-include-exclude).
commit
79df48391aa9efd9fd4591cf8000c2e07f91322a
author
brice · · 2026-10-13 03:27 UTC
parent
37766e4
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
2 files · +36 -1
M internal/executor/job.go +4 -1
@@ -642,7 +642,10 @@ func (j *job) jobDisplayName() string {
642642 if err != nil {
643643 return fallback("the name does not evaluate", err)
644644 }
645- return name
645+ // GitHub shows "Display name of", not "Display name of " (recorded:
646+ // matrix-include-exclude, an empty last matrix value). The recordings only
647+ // show trailing spaces; both ends are trimmed, as ermite's server does.
648+ return strings.TrimSpace(name)
646649 }
647650
648651 // comboIndex finds the combination of the strategy that is this job. Without a
@@ -642,7 +642,10 @@ func (j *job) jobDisplayName() string {
642 if err != nil {642 if err != nil {
643 return fallback("the name does not evaluate", err)643 return fallback("the name does not evaluate", err)
644 }644 }
645- return name645+ // GitHub shows "Display name of", not "Display name of " (recorded:
646+ // matrix-include-exclude, an empty last matrix value). The recordings only
647+ // show trailing spaces; both ends are trimmed, as ermite's server does.
648+ return strings.TrimSpace(name)
646 }649 }
647 650
648 // comboIndex finds the combination of the strategy that is this job. Without a651 // comboIndex finds the combination of the strategy that is this job. Without a
A internal/executor/jobname_test.go +32 -0
@@ -0,0 +1,32 @@
1+// SPDX-License-Identifier: MIT
2+
3+package executor
4+
5+import "testing"
6+
7+// Recorded on github.com (matrix-include-exclude): "m two 2", not "m two 2 ".
8+func TestJobNameIsTrimmed(t *testing.T) {
9+ needTools(t, "bash")
10+ yaml := `on: push
11+jobs:
12+ main:
13+ name: m ${{ matrix.os }} ${{ matrix.extra }}
14+ runs-on: ubuntu-24.04
15+ strategy:
16+ matrix:
17+ os: [one]
18+ include:
19+ - os: one
20+ extra: ''
21+ steps:
22+ - run: echo hi
23+`
24+ rec, res := runLocal(t, yaml, "main", func(c *Config) { c.MatrixJSON = `{"os":"one","extra":""}` })
25+ if res.Conclusion != ConclusionSuccess {
26+ t.Fatalf("%+v", res)
27+ }
28+ log := rec.steps[0].Log
29+ if last := log[len(log)-1]; last != "Complete job name: m one" {
30+ t.Errorf("%q", last)
31+ }
32+}
@@ -0,0 +1,32 @@
1+// SPDX-License-Identifier: MIT
2+
3+package executor
4+
5+import "testing"
6+
7+// Recorded on github.com (matrix-include-exclude): "m two 2", not "m two 2 ".
8+func TestJobNameIsTrimmed(t *testing.T) {
9+ needTools(t, "bash")
10+ yaml := `on: push
11+jobs:
12+ main:
13+ name: m ${{ matrix.os }} ${{ matrix.extra }}
14+ runs-on: ubuntu-24.04
15+ strategy:
16+ matrix:
17+ os: [one]
18+ include:
19+ - os: one
20+ extra: ''
21+ steps:
22+ - run: echo hi
23+`
24+ rec, res := runLocal(t, yaml, "main", func(c *Config) { c.MatrixJSON = `{"os":"one","extra":""}` })
25+ if res.Conclusion != ConclusionSuccess {
26+ t.Fatalf("%+v", res)
27+ }
28+ log := rec.steps[0].Log
29+ if last := log[len(log)-1]; last != "Complete job name: m one" {
30+ t.Errorf("%q", last)
31+ }
32+}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 4

Tags 11

↑↓ moveenter openesc close