Merge pull request #149 from camandel/add_tty_option
run config: add tty option for run steps
This commit is contained in:
commit
ec67b26d21
|
@ -165,6 +165,7 @@ type RunStep struct {
|
||||||
Environment map[string]Value `json:"environment,omitempty"`
|
Environment map[string]Value `json:"environment,omitempty"`
|
||||||
WorkingDir string `json:"working_dir"`
|
WorkingDir string `json:"working_dir"`
|
||||||
Shell string `json:"shell"`
|
Shell string `json:"shell"`
|
||||||
|
Tty *bool `json:"tty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SaveToWorkspaceStep struct {
|
type SaveToWorkspaceStep struct {
|
||||||
|
@ -234,6 +235,9 @@ func (s *Steps) UnmarshalJSON(b []byte) error {
|
||||||
if err := json.Unmarshal(stepRaw, &s); err != nil {
|
if err := json.Unmarshal(stepRaw, &s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if s.Tty == nil {
|
||||||
|
s.Tty = util.BoolP(true)
|
||||||
|
}
|
||||||
s.Type = stepType
|
s.Type = stepType
|
||||||
step = &s
|
step = &s
|
||||||
|
|
||||||
|
@ -890,7 +894,10 @@ func checkConfig(config *Config) error {
|
||||||
}
|
}
|
||||||
step.Name = step.Command[:len]
|
step.Name = step.Command[:len]
|
||||||
}
|
}
|
||||||
|
// if tty is omitted its default is true
|
||||||
|
if step.Tty == nil {
|
||||||
|
step.Tty = util.BoolP(true)
|
||||||
|
}
|
||||||
case *SaveCacheStep:
|
case *SaveCacheStep:
|
||||||
for _, content := range step.Contents {
|
for _, content := range step.Contents {
|
||||||
if len(content.Paths) == 0 {
|
if len(content.Paths) == 0 {
|
||||||
|
|
|
@ -337,6 +337,23 @@ func TestParseOutput(t *testing.T) {
|
||||||
volumes:
|
volumes:
|
||||||
- path: /mnt/tmpfs
|
- path: /mnt/tmpfs
|
||||||
tmpfs: {}
|
tmpfs: {}
|
||||||
|
- name: task05
|
||||||
|
runtime:
|
||||||
|
type: pod
|
||||||
|
containers:
|
||||||
|
- image: image01
|
||||||
|
steps:
|
||||||
|
- type: run
|
||||||
|
name: command with default tty
|
||||||
|
command: command01
|
||||||
|
- type: run
|
||||||
|
name: command with tty as true
|
||||||
|
command: command02
|
||||||
|
tty: true
|
||||||
|
- type: run
|
||||||
|
name: command with tty as false
|
||||||
|
command: command03
|
||||||
|
tty: false
|
||||||
`,
|
`,
|
||||||
out: &Config{
|
out: &Config{
|
||||||
Runs: []*Run{
|
Runs: []*Run{
|
||||||
|
@ -388,6 +405,7 @@ func TestParseOutput(t *testing.T) {
|
||||||
Name: "command01",
|
Name: "command01",
|
||||||
},
|
},
|
||||||
Command: "command01",
|
Command: "command01",
|
||||||
|
Tty: util.BoolP(true),
|
||||||
},
|
},
|
||||||
&RunStep{
|
&RunStep{
|
||||||
BaseStep: BaseStep{
|
BaseStep: BaseStep{
|
||||||
|
@ -395,6 +413,7 @@ func TestParseOutput(t *testing.T) {
|
||||||
Name: "name different than command",
|
Name: "name different than command",
|
||||||
},
|
},
|
||||||
Command: "command02",
|
Command: "command02",
|
||||||
|
Tty: util.BoolP(true),
|
||||||
},
|
},
|
||||||
&RunStep{
|
&RunStep{
|
||||||
BaseStep: BaseStep{
|
BaseStep: BaseStep{
|
||||||
|
@ -406,6 +425,7 @@ func TestParseOutput(t *testing.T) {
|
||||||
"ENV01": Value{Type: ValueTypeString, Value: "ENV01"},
|
"ENV01": Value{Type: ValueTypeString, Value: "ENV01"},
|
||||||
"ENVFROMVARIABLE01": Value{Type: ValueTypeFromVariable, Value: "variable01"},
|
"ENVFROMVARIABLE01": Value{Type: ValueTypeFromVariable, Value: "variable01"},
|
||||||
},
|
},
|
||||||
|
Tty: util.BoolP(true),
|
||||||
},
|
},
|
||||||
&SaveCacheStep{
|
&SaveCacheStep{
|
||||||
BaseStep: BaseStep{Type: "save_cache"},
|
BaseStep: BaseStep{Type: "save_cache"},
|
||||||
|
@ -419,6 +439,7 @@ func TestParseOutput(t *testing.T) {
|
||||||
Name: "command01",
|
Name: "command01",
|
||||||
},
|
},
|
||||||
Command: "command01",
|
Command: "command01",
|
||||||
|
Tty: util.BoolP(true),
|
||||||
},
|
},
|
||||||
&RunStep{
|
&RunStep{
|
||||||
BaseStep: BaseStep{
|
BaseStep: BaseStep{
|
||||||
|
@ -426,6 +447,7 @@ func TestParseOutput(t *testing.T) {
|
||||||
Name: "name different than command",
|
Name: "name different than command",
|
||||||
},
|
},
|
||||||
Command: "command02",
|
Command: "command02",
|
||||||
|
Tty: util.BoolP(true),
|
||||||
},
|
},
|
||||||
&RunStep{
|
&RunStep{
|
||||||
BaseStep: BaseStep{
|
BaseStep: BaseStep{
|
||||||
|
@ -437,6 +459,7 @@ func TestParseOutput(t *testing.T) {
|
||||||
"ENV01": Value{Type: ValueTypeString, Value: "ENV01"},
|
"ENV01": Value{Type: ValueTypeString, Value: "ENV01"},
|
||||||
"ENVFROMVARIABLE01": Value{Type: ValueTypeFromVariable, Value: "variable01"},
|
"ENVFROMVARIABLE01": Value{Type: ValueTypeFromVariable, Value: "variable01"},
|
||||||
},
|
},
|
||||||
|
Tty: util.BoolP(true),
|
||||||
},
|
},
|
||||||
&SaveCacheStep{
|
&SaveCacheStep{
|
||||||
BaseStep: BaseStep{Type: "save_cache"},
|
BaseStep: BaseStep{Type: "save_cache"},
|
||||||
|
@ -521,6 +544,46 @@ func TestParseOutput(t *testing.T) {
|
||||||
Steps: nil,
|
Steps: nil,
|
||||||
Depends: nil,
|
Depends: nil,
|
||||||
},
|
},
|
||||||
|
&Task{
|
||||||
|
Name: "task05",
|
||||||
|
Runtime: &Runtime{
|
||||||
|
Type: "pod",
|
||||||
|
Arch: "",
|
||||||
|
Containers: []*Container{
|
||||||
|
&Container{
|
||||||
|
Image: "image01",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
WorkingDir: defaultWorkingDir,
|
||||||
|
Steps: Steps{
|
||||||
|
&RunStep{
|
||||||
|
BaseStep: BaseStep{
|
||||||
|
Type: "run",
|
||||||
|
Name: "command with default tty",
|
||||||
|
},
|
||||||
|
Command: "command01",
|
||||||
|
Tty: util.BoolP(true),
|
||||||
|
},
|
||||||
|
&RunStep{
|
||||||
|
BaseStep: BaseStep{
|
||||||
|
Type: "run",
|
||||||
|
Name: "command with tty as true",
|
||||||
|
},
|
||||||
|
Command: "command02",
|
||||||
|
Tty: util.BoolP(true),
|
||||||
|
},
|
||||||
|
&RunStep{
|
||||||
|
BaseStep: BaseStep{
|
||||||
|
Type: "run",
|
||||||
|
Name: "command with tty as false",
|
||||||
|
},
|
||||||
|
Command: "command03",
|
||||||
|
Tty: util.BoolP(false),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Depends: nil,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -135,6 +135,7 @@ fi
|
||||||
rs.Environment = env
|
rs.Environment = env
|
||||||
rs.WorkingDir = cs.WorkingDir
|
rs.WorkingDir = cs.WorkingDir
|
||||||
rs.Shell = cs.Shell
|
rs.Shell = cs.Shell
|
||||||
|
rs.Tty = cs.Tty
|
||||||
return rs
|
return rs
|
||||||
|
|
||||||
case *config.SaveToWorkspaceStep:
|
case *config.SaveToWorkspaceStep:
|
||||||
|
|
|
@ -171,7 +171,7 @@ func (e *Executor) doRunStep(ctx context.Context, s *types.RunStep, t *types.Exe
|
||||||
AttachStdin: true,
|
AttachStdin: true,
|
||||||
Stdout: outf,
|
Stdout: outf,
|
||||||
Stderr: outf,
|
Stderr: outf,
|
||||||
Tty: true,
|
Tty: *s.Tty,
|
||||||
}
|
}
|
||||||
|
|
||||||
ce, err := pod.Exec(ctx, execConfig)
|
ce, err := pod.Exec(ctx, execConfig)
|
||||||
|
|
|
@ -415,6 +415,7 @@ type RunStep struct {
|
||||||
Environment map[string]string `json:"environment,omitempty"`
|
Environment map[string]string `json:"environment,omitempty"`
|
||||||
WorkingDir string `json:"working_dir,omitempty"`
|
WorkingDir string `json:"working_dir,omitempty"`
|
||||||
Shell string `json:"shell,omitempty"`
|
Shell string `json:"shell,omitempty"`
|
||||||
|
Tty *bool `json:"tty,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SaveContent struct {
|
type SaveContent struct {
|
||||||
|
@ -582,6 +583,9 @@ func (et *Steps) UnmarshalJSON(b []byte) error {
|
||||||
if err := json.Unmarshal(step, &s); err != nil {
|
if err := json.Unmarshal(step, &s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if s.Tty == nil {
|
||||||
|
s.Tty = util.BoolP(true)
|
||||||
|
}
|
||||||
steps[i] = &s
|
steps[i] = &s
|
||||||
case "save_to_workspace":
|
case "save_to_workspace":
|
||||||
var s SaveToWorkspaceStep
|
var s SaveToWorkspaceStep
|
||||||
|
|
Loading…
Reference in New Issue