mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-08-19 17:01:12 +00:00
The status of two jobs by the same name shadow each other, they need to be distinct. If two jobs by the same name are found, they are made distinct by adding a -<occurence number> suffix. Resolves forgejo/forgejo#8648
212 lines
3.8 KiB
Go
212 lines
3.8 KiB
Go
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package actions
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestServiceActions_jobParser(t *testing.T) {
|
|
for _, testCase := range []struct {
|
|
name string
|
|
workflow string
|
|
singleWorkflows []string
|
|
}{
|
|
{
|
|
name: "OneJobNoDuplicate",
|
|
workflow: `
|
|
jobs:
|
|
job1:
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
`,
|
|
singleWorkflows: []string{
|
|
`jobs:
|
|
job1:
|
|
name: job1
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
`,
|
|
},
|
|
},
|
|
{
|
|
name: "MatrixTwoJobsWithSameJobName",
|
|
workflow: `
|
|
name: test
|
|
jobs:
|
|
job1:
|
|
name: shadowdefaultmatrixgeneratednames
|
|
strategy:
|
|
matrix:
|
|
version: [1.17, 1.19]
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
`,
|
|
singleWorkflows: []string{
|
|
`name: test
|
|
jobs:
|
|
job1:
|
|
name: shadowdefaultmatrixgeneratednames
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
strategy:
|
|
matrix:
|
|
version:
|
|
- 1.17
|
|
`,
|
|
`name: test
|
|
jobs:
|
|
job1:
|
|
name: shadowdefaultmatrixgeneratednames-1
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
strategy:
|
|
matrix:
|
|
version:
|
|
- 1.19
|
|
`,
|
|
},
|
|
},
|
|
{
|
|
name: "MatrixTwoJobsWithMatrixGeneratedNames",
|
|
workflow: `
|
|
name: test
|
|
jobs:
|
|
job1:
|
|
strategy:
|
|
matrix:
|
|
version: [1.17, 1.19]
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
`,
|
|
singleWorkflows: []string{
|
|
`name: test
|
|
jobs:
|
|
job1:
|
|
name: job1 (1.17)
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
strategy:
|
|
matrix:
|
|
version:
|
|
- 1.17
|
|
`,
|
|
`name: test
|
|
jobs:
|
|
job1:
|
|
name: job1 (1.19)
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
strategy:
|
|
matrix:
|
|
version:
|
|
- 1.19
|
|
`,
|
|
},
|
|
},
|
|
{
|
|
name: "MatrixTwoJobsWithDistinctInterpolatedNames",
|
|
workflow: `
|
|
name: test
|
|
jobs:
|
|
job1:
|
|
name: myname-${{ matrix.version }}
|
|
strategy:
|
|
matrix:
|
|
version: [1.17, 1.19]
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
`,
|
|
singleWorkflows: []string{
|
|
`name: test
|
|
jobs:
|
|
job1:
|
|
name: myname-1.17
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
strategy:
|
|
matrix:
|
|
version:
|
|
- 1.17
|
|
`,
|
|
`name: test
|
|
jobs:
|
|
job1:
|
|
name: myname-1.19
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
strategy:
|
|
matrix:
|
|
version:
|
|
- 1.19
|
|
`,
|
|
},
|
|
},
|
|
{
|
|
name: "MatrixTwoJobsWithIdenticalInterpolatedNames",
|
|
workflow: `
|
|
name: test
|
|
jobs:
|
|
job1:
|
|
name: myname-${{ matrix.typo }}
|
|
strategy:
|
|
matrix:
|
|
version: [1.17, 1.19]
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
`,
|
|
singleWorkflows: []string{
|
|
`name: test
|
|
jobs:
|
|
job1:
|
|
name: myname-
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
strategy:
|
|
matrix:
|
|
version:
|
|
- 1.17
|
|
`,
|
|
`name: test
|
|
jobs:
|
|
job1:
|
|
name: myname--1
|
|
runs-on: docker
|
|
steps:
|
|
- run: echo OK
|
|
strategy:
|
|
matrix:
|
|
version:
|
|
- 1.19
|
|
`,
|
|
},
|
|
},
|
|
} {
|
|
t.Run(testCase.name, func(t *testing.T) {
|
|
sw, err := jobParser([]byte(testCase.workflow))
|
|
require.NoError(t, err)
|
|
for i, sw := range sw {
|
|
actual, err := sw.Marshal()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, testCase.singleWorkflows[i], string(actual))
|
|
}
|
|
})
|
|
}
|
|
}
|