feat: support runs-on labels and group (#2062)
Signed-off-by: Raffael Sahli <raffael.sahli@doodle.com> Co-authored-by: ChristopherHX <christopher.homberger@web.de>
This commit is contained in:
parent
c8f847d82d
commit
04011b6b78
2 changed files with 61 additions and 2 deletions
|
@ -275,15 +275,39 @@ func (j *Job) Needs() []string {
|
||||||
// RunsOn list for Job
|
// RunsOn list for Job
|
||||||
func (j *Job) RunsOn() []string {
|
func (j *Job) RunsOn() []string {
|
||||||
switch j.RawRunsOn.Kind {
|
switch j.RawRunsOn.Kind {
|
||||||
|
case yaml.MappingNode:
|
||||||
|
var val struct {
|
||||||
|
Group string
|
||||||
|
Labels yaml.Node
|
||||||
|
}
|
||||||
|
|
||||||
|
if !decodeNode(j.RawRunsOn, &val) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
labels := nodeAsStringSlice(val.Labels)
|
||||||
|
|
||||||
|
if val.Group != "" {
|
||||||
|
labels = append(labels, val.Group)
|
||||||
|
}
|
||||||
|
|
||||||
|
return labels
|
||||||
|
default:
|
||||||
|
return nodeAsStringSlice(j.RawRunsOn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func nodeAsStringSlice(node yaml.Node) []string {
|
||||||
|
switch node.Kind {
|
||||||
case yaml.ScalarNode:
|
case yaml.ScalarNode:
|
||||||
var val string
|
var val string
|
||||||
if !decodeNode(j.RawRunsOn, &val) {
|
if !decodeNode(node, &val) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return []string{val}
|
return []string{val}
|
||||||
case yaml.SequenceNode:
|
case yaml.SequenceNode:
|
||||||
var val []string
|
var val []string
|
||||||
if !decodeNode(j.RawRunsOn, &val) {
|
if !decodeNode(node, &val) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return val
|
return val
|
||||||
|
|
|
@ -71,6 +71,41 @@ jobs:
|
||||||
assert.Contains(t, workflow.On(), "pull_request")
|
assert.Contains(t, workflow.On(), "pull_request")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReadWorkflow_RunsOnLabels(t *testing.T) {
|
||||||
|
yaml := `
|
||||||
|
name: local-action-docker-url
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
container: nginx:latest
|
||||||
|
runs-on:
|
||||||
|
labels: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: ./actions/docker-url`
|
||||||
|
|
||||||
|
workflow, err := ReadWorkflow(strings.NewReader(yaml))
|
||||||
|
assert.NoError(t, err, "read workflow should succeed")
|
||||||
|
assert.Equal(t, workflow.Jobs["test"].RunsOn(), []string{"ubuntu-latest"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestReadWorkflow_RunsOnLabelsWithGroup(t *testing.T) {
|
||||||
|
yaml := `
|
||||||
|
name: local-action-docker-url
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
container: nginx:latest
|
||||||
|
runs-on:
|
||||||
|
labels: [ubuntu-latest]
|
||||||
|
group: linux
|
||||||
|
steps:
|
||||||
|
- uses: ./actions/docker-url`
|
||||||
|
|
||||||
|
workflow, err := ReadWorkflow(strings.NewReader(yaml))
|
||||||
|
assert.NoError(t, err, "read workflow should succeed")
|
||||||
|
assert.Equal(t, workflow.Jobs["test"].RunsOn(), []string{"ubuntu-latest", "linux"})
|
||||||
|
}
|
||||||
|
|
||||||
func TestReadWorkflow_StringContainer(t *testing.T) {
|
func TestReadWorkflow_StringContainer(t *testing.T) {
|
||||||
yaml := `
|
yaml := `
|
||||||
name: local-action-docker-url
|
name: local-action-docker-url
|
||||||
|
|
Loading…
Add table
Reference in a new issue