circleci-config-sdk-ts icon indicating copy to clipboard operation
circleci-config-sdk-ts copied to clipboard

Bug: Parameters default value mismatch it's type

Open Kylmakalle opened this issue 2 years ago • 2 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

Current behavior

CustomParameter generates an entry where default parameter is not quoted. That leads to type mismatch in result YAML, since some defaults like true, on, and off can be treated as booleans instead of strings.

new CircleCI.parameters.CustomParameter(
    'some_value',
    CircleCI.mapping.ParameterSubtype.STRING,
    "OFF"
)
parameters:
     some_value:
        type: string
        default: OFF
image

Config is not valid

% circleci config validate config.yml 

Error: Error in definition of command 'some-command'
Parameter error: default value of parameter 'some_value' is 'false' (type boolean): expected type string

Minimum reproduction code

https://gist.github.com/Kylmakalle/22f2c6eae2bd09758a70be2510284b33

Expected behavior

Any default provided value is "quoted" properly and aligns with parameter type.

CircleCI Config SDK version

0.12.0

Node.js version

19.0.0

In which operating systems have you tested?

  • [X] macOS
  • [ ] Windows
  • [ ] Linux

Kylmakalle avatar Dec 09 '22 00:12 Kylmakalle

Good catch, YAML is going to make that one difficult for us. I think the main issue will be we are using a YAML parser and don't actually have a way of informing the parser to treat this value specifically as part of a string without writing some kind of custom validation library.

Was this a blocking issue or were you able to work around using a boolean or another string value?

KyleTryon avatar Mar 21 '23 14:03 KyleTryon

I believe it's possible to tweak a YAML parser. See https://github.com/eemeli/yaml/issues/391

Talking about a workaround, we can add a prefix "_OFF" and cut it using different software

Kylmakalle avatar Mar 21 '23 14:03 Kylmakalle