Open text-adi opened 5 months ago
Technically, this is not a bug: Single-quote strings are not valid JSON.
That said, if GitHub allows it, perhaps act should allow it, too.
I think I'm running into a similar issue, but I'm using double quoted strings. This is in a reusable workflow that needs to be passed array parameters (which are only supported via string in GH actions right now):
test_matrix_rust_version:
description: 'A JS array list of versions to be included in the test matrix. Defaults to "["beta"]".'
required: false
default: '["beta"]'
type: string
test_matrix_build_only:
description: 'Whether to build only or build and test. Defaults to "[false]" on the assumption tests are only desired on the main version defined in `include`.'
required: false
default: "[true]"
type: string
test_matrix_build_args:
description: "Matrix args for the `cargo build` called in the job. Defaults to nothing, mostly useful in includes."
required: false
default: '[""]'
type: string
test_matrix_test_args:
description: "Matrix args for the `cargo test` called in the job. Defaults to nothing, mostly useful in includes."
required: false
default: '[""]'
type: string
test_matrix_rust_target:
description: "Matrix of rust targets for a build. Defaults to nothing (which will use the system target). Mostly useful in includes."
required: false
default: '[""]'
type: string
test_matrix_include:
description: 'Specific combinations to add to the test matrix. Defaults to "[{ rust_version: "", build_only: false }]" which will build and run tests using the toolchain version. Available values are: rust_version, build_only, build_args, test_args'
required: false
default: '[{ rust_version: "", build_only: false }]'
type: string
...
matrix:
rust_version: "${{ fromJSON(inputs.test_matrix_rust_version) }}"
build_only: "${{ fromJSON(inputs.test_matrix_build_only) }}"
build_args: "${{ fromJSON(inputs.test_matrix_build_args) }}"
test_args: "${{ fromJSON(inputs.test_matrix_test_args) }}"
rust_target: "${{ fromJSON(inputs.test_matrix_rust_target) }}"
include: ${{ fromJSON(inputs.test_matrix_include) }}
The error I get is this (where 103-108 are the matrix lines above).
ERRO[0017] Error while evaluating matrix: Invalid JSON: invalid character 'r' looking for beginning of object key string
FATA[0017] Failed to decode node {4 0 !!map <nil> [0xc0004febe0 0xc0004fec80 0xc0004fed20 0xc0004fedc0 0xc0004fee60 0xc0004fef00 0xc0004fefa0 0xc0004ff040 0xc0004ff0e0 0xc0004ff180 0xc0004ff220 0xc0004ff2c0] 103 9} into *map[string][]interface {}: yaml: unmarshal errors:
line 103: cannot unmarshal !!str `${{ fro...` into []interface {}
line 104: cannot unmarshal !!str `${{ fro...` into []interface {}
line 105: cannot unmarshal !!str `${{ fro...` into []interface {}
line 106: cannot unmarshal !!str `${{ fro...` into []interface {}
line 107: cannot unmarshal !!str `${{ fro...` into []interface {}
line 108: cannot unmarshal !!str `${{ fro...` into []interface {}
Not the same exact '
, but a similar issue of a difference in what fromJSON
in the runner will accept and what act
does.
Newtonsoft.Json is shining here:
Found this: https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/migrate-from-newtonsoft?pivots=dotnet-9-0#table-of-differences Newtonsoft.Json feature | System.Text.Json equivalent |
---|---|
Allow property names without quotes | ā Not supported by design |
Allow single quotes around string values | ā Not supported by design |
Those cases could be approximated by using yaml.v3 for go, but yaml allows much more and we are even more far away from reality.
I expect this issue will come up starting with 2024/12 for real GitHub Actions when GitHub starts finalizes migrating production to go services
I confirm this defect, but this is not on my planning board for act
Bug report info
Command used with act
Describe issue
The following error occurs when running a github workflow locally:
Similarly, when running a workflow on github, there are no errors with such a workflow. Github Action dynamically converts an array represented as a string to an array for matrix using the
fromJson
function.I expect the following value:
will be successfully converted by the
fromJson
function and used as a dynamic list for matrix.Link to GitHub repository
https://github.com/text-adi/ansible-playbook/tree/add_test_playbook
Workflow content
Relevant log output
Additional information
You can make sure that such a workflow really works correctly at link.
The workflow itself, which was launched.