diff --git a/pkg/jobparser/jobparser.go b/pkg/jobparser/jobparser.go index 7b3a281..2a482c3 100644 --- a/pkg/jobparser/jobparser.go +++ b/pkg/jobparser/jobparser.go @@ -51,9 +51,9 @@ func Parse(content []byte, options ...ParseOption) ([]*SingleWorkflow, error) { if job.Name == "" { job.Name = id } - job.Name = nameWithMatrix(job.Name, matrix) job.Strategy.RawMatrix = encodeMatrix(matrix) evaluator := NewExpressionEvaluator(NewInterpeter(id, origin.GetJob(id), matrix, pc.gitContext, results, pc.vars)) + job.Name = nameWithMatrix(job.Name, matrix, evaluator) runsOn := origin.GetJob(id).RunsOn() for i, v := range runsOn { runsOn[i] = evaluator.Interpolate(v) @@ -134,12 +134,16 @@ func encodeRunsOn(runsOn []string) yaml.Node { return node } -func nameWithMatrix(name string, m map[string]interface{}) string { +func nameWithMatrix(name string, m map[string]interface{}, evaluator *ExpressionEvaluator) string { if len(m) == 0 { return name } - return name + " " + matrixName(m) + if !strings.Contains(name, "${{") || !strings.Contains(name, "}}") { + return name + " " + matrixName(m) + } + + return evaluator.Interpolate(name) } func matrixName(m map[string]interface{}) string { diff --git a/pkg/jobparser/jobparser_test.go b/pkg/jobparser/jobparser_test.go index 454d9e4..800e19a 100644 --- a/pkg/jobparser/jobparser_test.go +++ b/pkg/jobparser/jobparser_test.go @@ -47,6 +47,11 @@ func TestParse(t *testing.T) { options: nil, wantErr: false, }, + { + name: "job_name_with_matrix", + options: nil, + wantErr: false, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/pkg/jobparser/testdata/job_name_with_matrix.in.yaml b/pkg/jobparser/testdata/job_name_with_matrix.in.yaml new file mode 100644 index 0000000..7b5edf7 --- /dev/null +++ b/pkg/jobparser/testdata/job_name_with_matrix.in.yaml @@ -0,0 +1,14 @@ +name: test +jobs: + job1: + strategy: + matrix: + os: [ubuntu-22.04, ubuntu-20.04] + version: [1.17, 1.18, 1.19] + runs-on: ${{ matrix.os }} + name: test_version_${{ matrix.version }}_on_${{ matrix.os }} + steps: + - uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.version }} + - run: uname -a && go version \ No newline at end of file diff --git a/pkg/jobparser/testdata/job_name_with_matrix.out.yaml b/pkg/jobparser/testdata/job_name_with_matrix.out.yaml new file mode 100644 index 0000000..081e8d4 --- /dev/null +++ b/pkg/jobparser/testdata/job_name_with_matrix.out.yaml @@ -0,0 +1,101 @@ +name: test +jobs: + job1: + name: test_version_1.17_on_ubuntu-20.04 + runs-on: ubuntu-20.04 + steps: + - uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.version }} + - run: uname -a && go version + strategy: + matrix: + os: + - ubuntu-20.04 + version: + - 1.17 +--- +name: test +jobs: + job1: + name: test_version_1.18_on_ubuntu-20.04 + runs-on: ubuntu-20.04 + steps: + - uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.version }} + - run: uname -a && go version + strategy: + matrix: + os: + - ubuntu-20.04 + version: + - 1.18 +--- +name: test +jobs: + job1: + name: test_version_1.19_on_ubuntu-20.04 + runs-on: ubuntu-20.04 + steps: + - uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.version }} + - run: uname -a && go version + strategy: + matrix: + os: + - ubuntu-20.04 + version: + - 1.19 +--- +name: test +jobs: + job1: + name: test_version_1.17_on_ubuntu-22.04 + runs-on: ubuntu-22.04 + steps: + - uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.version }} + - run: uname -a && go version + strategy: + matrix: + os: + - ubuntu-22.04 + version: + - 1.17 +--- +name: test +jobs: + job1: + name: test_version_1.18_on_ubuntu-22.04 + runs-on: ubuntu-22.04 + steps: + - uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.version }} + - run: uname -a && go version + strategy: + matrix: + os: + - ubuntu-22.04 + version: + - 1.18 +--- +name: test +jobs: + job1: + name: test_version_1.19_on_ubuntu-22.04 + runs-on: ubuntu-22.04 + steps: + - uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.version }} + - run: uname -a && go version + strategy: + matrix: + os: + - ubuntu-22.04 + version: + - 1.19