fix: return error if both run:
/uses:
keys are used (#593)
fixes https://github.com/nektos/act/issues/536
This commit is contained in:
parent
5752a03dcd
commit
25779af4bf
5 changed files with 55 additions and 2 deletions
|
@ -292,11 +292,17 @@ const (
|
||||||
|
|
||||||
// StepTypeUsesActionRemote is all steps that have a `uses` that is a reference to a github repo
|
// StepTypeUsesActionRemote is all steps that have a `uses` that is a reference to a github repo
|
||||||
StepTypeUsesActionRemote
|
StepTypeUsesActionRemote
|
||||||
|
|
||||||
|
// StepTypeInvalid is for steps that have invalid step action
|
||||||
|
StepTypeInvalid
|
||||||
)
|
)
|
||||||
|
|
||||||
// Type returns the type of the step
|
// Type returns the type of the step
|
||||||
func (s *Step) Type() StepType {
|
func (s *Step) Type() StepType {
|
||||||
if s.Run != "" {
|
if s.Run != "" {
|
||||||
|
if s.Uses != "" {
|
||||||
|
return StepTypeInvalid
|
||||||
|
}
|
||||||
return StepTypeRun
|
return StepTypeRun
|
||||||
} else if strings.HasPrefix(s.Uses, "docker://") {
|
} else if strings.HasPrefix(s.Uses, "docker://") {
|
||||||
return StepTypeUsesDockerURL
|
return StepTypeUsesDockerURL
|
||||||
|
|
|
@ -49,7 +49,7 @@ jobs:
|
||||||
func TestReadWorkflow_MapEvent(t *testing.T) {
|
func TestReadWorkflow_MapEvent(t *testing.T) {
|
||||||
yaml := `
|
yaml := `
|
||||||
name: local-action-docker-url
|
name: local-action-docker-url
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
@ -82,7 +82,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: ./actions/docker-url
|
- uses: ./actions/docker-url
|
||||||
test2:
|
test2:
|
||||||
container:
|
container:
|
||||||
image: nginx:latest
|
image: nginx:latest
|
||||||
env:
|
env:
|
||||||
foo: bar
|
foo: bar
|
||||||
|
@ -98,3 +98,35 @@ jobs:
|
||||||
assert.Contains(t, workflow.Jobs["test2"].Container().Image, "nginx:latest")
|
assert.Contains(t, workflow.Jobs["test2"].Container().Image, "nginx:latest")
|
||||||
assert.Contains(t, workflow.Jobs["test2"].Container().Env["foo"], "bar")
|
assert.Contains(t, workflow.Jobs["test2"].Container().Env["foo"], "bar")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReadWorkflow_StepsTypes(t *testing.T) {
|
||||||
|
yaml := `
|
||||||
|
name: invalid step definition
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: test1
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
run: echo
|
||||||
|
- name: test2
|
||||||
|
run: echo
|
||||||
|
- name: test3
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: test4
|
||||||
|
uses: docker://nginx:latest
|
||||||
|
- name: test5
|
||||||
|
uses: ./local-action
|
||||||
|
`
|
||||||
|
|
||||||
|
workflow, err := ReadWorkflow(strings.NewReader(yaml))
|
||||||
|
assert.NoError(t, err, "read workflow should succeed")
|
||||||
|
assert.Len(t, workflow.Jobs, 1)
|
||||||
|
assert.Len(t, workflow.Jobs["test"].Steps, 5)
|
||||||
|
assert.Equal(t, workflow.Jobs["test"].Steps[0].Type(), StepTypeInvalid)
|
||||||
|
assert.Equal(t, workflow.Jobs["test"].Steps[1].Type(), StepTypeRun)
|
||||||
|
assert.Equal(t, workflow.Jobs["test"].Steps[2].Type(), StepTypeUsesActionRemote)
|
||||||
|
assert.Equal(t, workflow.Jobs["test"].Steps[3].Type(), StepTypeUsesDockerURL)
|
||||||
|
assert.Equal(t, workflow.Jobs["test"].Steps[4].Type(), StepTypeUsesActionLocal)
|
||||||
|
}
|
||||||
|
|
|
@ -87,6 +87,8 @@ func (sc *StepContext) Executor() common.Executor {
|
||||||
sc.setupAction(actionDir, remoteAction.Path),
|
sc.setupAction(actionDir, remoteAction.Path),
|
||||||
sc.runAction(actionDir, remoteAction.Path),
|
sc.runAction(actionDir, remoteAction.Path),
|
||||||
)
|
)
|
||||||
|
case model.StepTypeInvalid:
|
||||||
|
return common.NewErrorExecutor(fmt.Errorf("Invalid run/uses syntax for job:%s step:%+v", rc.Run, step))
|
||||||
}
|
}
|
||||||
|
|
||||||
return common.NewErrorExecutor(fmt.Errorf("Unable to determine how to run job:%s step:%+v", rc.Run, step))
|
return common.NewErrorExecutor(fmt.Errorf("Unable to determine how to run job:%s step:%+v", rc.Run, step))
|
||||||
|
|
|
@ -12,10 +12,13 @@ func TestStepContextExecutor(t *testing.T) {
|
||||||
"ubuntu-latest": "node:12.20.1-buster-slim",
|
"ubuntu-latest": "node:12.20.1-buster-slim",
|
||||||
}
|
}
|
||||||
tables := []TestJobFileInfo{
|
tables := []TestJobFileInfo{
|
||||||
|
{"testdata", "uses-and-run-in-one-step", "push", "Invalid run/uses syntax for job:test step:Test", platforms, "linux/amd64"},
|
||||||
{"testdata", "uses-github-empty", "push", "Expected format {org}/{repo}[/path]@ref", platforms, "linux/amd64"},
|
{"testdata", "uses-github-empty", "push", "Expected format {org}/{repo}[/path]@ref", platforms, "linux/amd64"},
|
||||||
{"testdata", "uses-github-noref", "push", "Expected format {org}/{repo}[/path]@ref", platforms, "linux/amd64"},
|
{"testdata", "uses-github-noref", "push", "Expected format {org}/{repo}[/path]@ref", platforms, "linux/amd64"},
|
||||||
{"testdata", "uses-github-root", "push", "", platforms, "linux/amd64"},
|
{"testdata", "uses-github-root", "push", "", platforms, "linux/amd64"},
|
||||||
{"testdata", "uses-github-path", "push", "", platforms, "linux/amd64"},
|
{"testdata", "uses-github-path", "push", "", platforms, "linux/amd64"},
|
||||||
|
|
||||||
|
{"testdata", "uses-and-run-in-one-step", "push", "Invalid run/uses syntax for job:test step:Test", platforms, "linux/arm64"},
|
||||||
{"testdata", "uses-github-empty", "push", "Expected format {org}/{repo}[/path]@ref", platforms, "linux/arm64"},
|
{"testdata", "uses-github-empty", "push", "Expected format {org}/{repo}[/path]@ref", platforms, "linux/arm64"},
|
||||||
{"testdata", "uses-github-noref", "push", "Expected format {org}/{repo}[/path]@ref", platforms, "linux/arm64"},
|
{"testdata", "uses-github-noref", "push", "Expected format {org}/{repo}[/path]@ref", platforms, "linux/arm64"},
|
||||||
{"testdata", "uses-github-root", "push", "", platforms, "linux/arm64"},
|
{"testdata", "uses-github-root", "push", "", platforms, "linux/arm64"},
|
||||||
|
|
10
pkg/runner/testdata/uses-and-run-in-one-step/push.yml
vendored
Normal file
10
pkg/runner/testdata/uses-and-run-in-one-step/push.yml
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
name: uses-and-run-in-one-step
|
||||||
|
on: push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Test
|
||||||
|
run: echo
|
||||||
|
uses: actions/checkout@v2
|
Loading…
Reference in a new issue