fix 99: support string and map variants of container
This commit is contained in:
parent
dadf8918be
commit
51b6167606
5 changed files with 63 additions and 5 deletions
|
@ -61,9 +61,9 @@ type Job struct {
|
||||||
If string `yaml:"if"`
|
If string `yaml:"if"`
|
||||||
Steps []*Step `yaml:"steps"`
|
Steps []*Step `yaml:"steps"`
|
||||||
TimeoutMinutes int64 `yaml:"timeout-minutes"`
|
TimeoutMinutes int64 `yaml:"timeout-minutes"`
|
||||||
Container *ContainerSpec `yaml:"container"`
|
|
||||||
Services map[string]*ContainerSpec `yaml:"services"`
|
Services map[string]*ContainerSpec `yaml:"services"`
|
||||||
Strategy *Strategy `yaml:"strategy"`
|
Strategy *Strategy `yaml:"strategy"`
|
||||||
|
RawContainer yaml.Node `yaml:"container"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Strategy for the job
|
// Strategy for the job
|
||||||
|
@ -73,6 +73,26 @@ type Strategy struct {
|
||||||
Matrix map[string][]interface{} `yaml:"matrix"`
|
Matrix map[string][]interface{} `yaml:"matrix"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Container details for the job
|
||||||
|
func (j *Job) Container() *ContainerSpec {
|
||||||
|
var val *ContainerSpec
|
||||||
|
switch j.RawContainer.Kind {
|
||||||
|
case yaml.ScalarNode:
|
||||||
|
val = new(ContainerSpec)
|
||||||
|
err := j.RawContainer.Decode(&val.Image)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
case yaml.MappingNode:
|
||||||
|
val = new(ContainerSpec)
|
||||||
|
err := j.RawContainer.Decode(val)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
// Needs list for Job
|
// Needs list for Job
|
||||||
func (j *Job) Needs() []string {
|
func (j *Job) Needs() []string {
|
||||||
|
|
||||||
|
|
|
@ -70,3 +70,31 @@ jobs:
|
||||||
assert.Contains(t, workflow.On(), "push")
|
assert.Contains(t, workflow.On(), "push")
|
||||||
assert.Contains(t, workflow.On(), "pull_request")
|
assert.Contains(t, workflow.On(), "pull_request")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReadWorkflow_StringContainer(t *testing.T) {
|
||||||
|
yaml := `
|
||||||
|
name: local-action-docker-url
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
container: nginx:latest
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: ./actions/docker-url
|
||||||
|
test2:
|
||||||
|
container:
|
||||||
|
image: nginx:latest
|
||||||
|
env:
|
||||||
|
foo: bar
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: ./actions/docker-url
|
||||||
|
`
|
||||||
|
|
||||||
|
workflow, err := ReadWorkflow(strings.NewReader(yaml))
|
||||||
|
assert.NoError(t, err, "read workflow should succeed")
|
||||||
|
assert.Len(t, workflow.Jobs, 2)
|
||||||
|
assert.Contains(t, workflow.Jobs["test"].Container().Image, "nginx:latest")
|
||||||
|
assert.Contains(t, workflow.Jobs["test2"].Container().Image, "nginx:latest")
|
||||||
|
assert.Contains(t, workflow.Jobs["test2"].Container().Env["foo"], "bar")
|
||||||
|
}
|
||||||
|
|
|
@ -53,8 +53,9 @@ func (rc *RunContext) startJobContainer() common.Executor {
|
||||||
job := rc.Run.Job()
|
job := rc.Run.Job()
|
||||||
|
|
||||||
var image string
|
var image string
|
||||||
if job.Container != nil {
|
c := job.Container()
|
||||||
image = job.Container.Image
|
if c != nil {
|
||||||
|
image = c.Image
|
||||||
} else {
|
} else {
|
||||||
platformName := rc.ExprEval.Interpolate(job.RunsOn)
|
platformName := rc.ExprEval.Interpolate(job.RunsOn)
|
||||||
image = rc.Config.Platforms[strings.ToLower(platformName)]
|
image = rc.Config.Platforms[strings.ToLower(platformName)]
|
||||||
|
|
|
@ -87,8 +87,9 @@ func (sc *StepContext) setupEnv() common.Executor {
|
||||||
step := sc.Step
|
step := sc.Step
|
||||||
return func(ctx context.Context) error {
|
return func(ctx context.Context) error {
|
||||||
var env map[string]string
|
var env map[string]string
|
||||||
if job.Container != nil {
|
c := job.Container()
|
||||||
env = mergeMaps(rc.GetEnv(), job.Container.Env, step.GetEnv())
|
if c != nil {
|
||||||
|
env = mergeMaps(rc.GetEnv(), c.Env, step.GetEnv())
|
||||||
} else {
|
} else {
|
||||||
env = mergeMaps(rc.GetEnv(), step.GetEnv())
|
env = mergeMaps(rc.GetEnv(), step.GetEnv())
|
||||||
}
|
}
|
||||||
|
|
8
pkg/runner/testdata/job-container/push.yml
vendored
8
pkg/runner/testdata/job-container/push.yml
vendored
|
@ -10,3 +10,11 @@ jobs:
|
||||||
TEST_ENV: test-value
|
TEST_ENV: test-value
|
||||||
steps:
|
steps:
|
||||||
- run: echo ${TEST_ENV} | grep test-value
|
- run: echo ${TEST_ENV} | grep test-value
|
||||||
|
|
||||||
|
test2:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: node:10.16-jessie
|
||||||
|
steps:
|
||||||
|
- run: echo ${TEST_ENV} | grep test-value
|
||||||
|
env:
|
||||||
|
TEST_ENV: test-value
|
||||||
|
|
Loading…
Reference in a new issue