dagger input bool implementation
Signed-off-by: Guillaume de Rouville <guillaume.derouville@gmail.com>
This commit is contained in:
parent
36d0ebd863
commit
6fe0ec367a
38
cmd/dagger/cmd/input/bool.go
Normal file
38
cmd/dagger/cmd/input/bool.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package input
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
"go.dagger.io/dagger/cmd/dagger/logger"
|
||||||
|
"go.dagger.io/dagger/state"
|
||||||
|
)
|
||||||
|
|
||||||
|
var boolCmd = &cobra.Command{
|
||||||
|
Use: "bool <TARGET> <true|false>",
|
||||||
|
Short: "Add a boolean input",
|
||||||
|
Args: cobra.ExactArgs(2),
|
||||||
|
PreRun: func(cmd *cobra.Command, args []string) {
|
||||||
|
// Fix Viper bug for duplicate flags:
|
||||||
|
// https://github.com/spf13/viper/issues/233
|
||||||
|
if err := viper.BindPFlags(cmd.Flags()); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
lg := logger.New()
|
||||||
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
|
updateEnvironmentInput(
|
||||||
|
ctx,
|
||||||
|
cmd,
|
||||||
|
args[0],
|
||||||
|
state.BoolInput(readInput(ctx, args[1])),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if err := viper.BindPFlags(boolCmd.Flags()); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
@ -31,6 +31,7 @@ func init() {
|
|||||||
jsonCmd,
|
jsonCmd,
|
||||||
yamlCmd,
|
yamlCmd,
|
||||||
listCmd,
|
listCmd,
|
||||||
|
boolCmd,
|
||||||
unsetCmd,
|
unsetCmd,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ type Input struct {
|
|||||||
JSON *jsonInput `yaml:"json,omitempty"`
|
JSON *jsonInput `yaml:"json,omitempty"`
|
||||||
YAML *yamlInput `yaml:"yaml,omitempty"`
|
YAML *yamlInput `yaml:"yaml,omitempty"`
|
||||||
File *fileInput `yaml:"file,omitempty"`
|
File *fileInput `yaml:"file,omitempty"`
|
||||||
|
Bool *boolInput `yaml:"bool,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i Input) Compile(key string, state *State) (*compiler.Value, error) {
|
func (i Input) Compile(key string, state *State) (*compiler.Value, error) {
|
||||||
@ -55,6 +56,8 @@ func (i Input) Compile(key string, state *State) (*compiler.Value, error) {
|
|||||||
return i.YAML.Compile(key, state)
|
return i.YAML.Compile(key, state)
|
||||||
case i.File != nil:
|
case i.File != nil:
|
||||||
return i.File.Compile(key, state)
|
return i.File.Compile(key, state)
|
||||||
|
case i.Bool != nil:
|
||||||
|
return i.Bool.Compile(key, state)
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("input has not been set")
|
return nil, fmt.Errorf("input has not been set")
|
||||||
}
|
}
|
||||||
@ -201,6 +204,27 @@ func (i secretInput) PlainText() string {
|
|||||||
return string(i)
|
return string(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// An input value encoded as Bool
|
||||||
|
func BoolInput(data string) Input {
|
||||||
|
i := boolInput(data)
|
||||||
|
return Input{
|
||||||
|
Bool: &i,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type boolInput string
|
||||||
|
|
||||||
|
func (i boolInput) Compile(_ string, _ *State) (*compiler.Value, error) {
|
||||||
|
s := map[boolInput]struct{}{
|
||||||
|
"true": {},
|
||||||
|
"false": {},
|
||||||
|
}
|
||||||
|
if _, ok := s[i]; ok {
|
||||||
|
return compiler.DecodeJSON("", []byte(i))
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("%q is not a valid boolean: <true|false>", i)
|
||||||
|
}
|
||||||
|
|
||||||
// An input value encoded as JSON
|
// An input value encoded as JSON
|
||||||
func JSONInput(data string) Input {
|
func JSONInput(data string) Input {
|
||||||
i := jsonInput(data)
|
i := jsonInput(data)
|
||||||
|
@ -369,6 +369,35 @@ setup() {
|
|||||||
"$DAGGER" -e "input-subdir-git" up
|
"$DAGGER" -e "input-subdir-git" up
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "dagger input bool" {
|
||||||
|
"$DAGGER" init
|
||||||
|
|
||||||
|
## Test simple input git
|
||||||
|
dagger_new_with_plan "input-simple-bool" "$TESTDIR"/cli/input/bool
|
||||||
|
|
||||||
|
# input git
|
||||||
|
"$DAGGER" -e "input-simple-bool" input list --show-optional
|
||||||
|
run "$DAGGER" -e "input-simple-bool" query first
|
||||||
|
assert_output 'false'
|
||||||
|
run "$DAGGER" -e "input-simple-bool" query second
|
||||||
|
assert_output '{}'
|
||||||
|
|
||||||
|
"$DAGGER" -e "input-simple-bool" input bool first true
|
||||||
|
run "$DAGGER" -e "input-simple-bool" query first
|
||||||
|
assert_output 'true'
|
||||||
|
run "$DAGGER" -e "input-simple-bool" query second
|
||||||
|
assert_output 'true'
|
||||||
|
|
||||||
|
"$DAGGER" -e "input-simple-bool" input bool first false
|
||||||
|
run "$DAGGER" -e "input-simple-bool" query first
|
||||||
|
assert_output 'false'
|
||||||
|
run "$DAGGER" -e "input-simple-bool" query second
|
||||||
|
assert_output '{}'
|
||||||
|
|
||||||
|
run "$DAGGER" -e "input-simple-bool" input bool first Anything
|
||||||
|
assert_failure
|
||||||
|
}
|
||||||
|
|
||||||
@test "dagger input list" {
|
@test "dagger input list" {
|
||||||
"$DAGGER" init
|
"$DAGGER" init
|
||||||
|
|
||||||
|
11
tests/cli/input/bool/main.cue
Normal file
11
tests/cli/input/bool/main.cue
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package testing
|
||||||
|
|
||||||
|
import (
|
||||||
|
"alpha.dagger.io/dagger"
|
||||||
|
)
|
||||||
|
|
||||||
|
first: dagger.#Input & {bool | *false}
|
||||||
|
|
||||||
|
if first == true {
|
||||||
|
second: true
|
||||||
|
}
|
Reference in New Issue
Block a user