fusion is CLI tool to merge JSON, YAML or TOML files.
Download from the Releases page and put it somewhere in your $PATH
.
Merge YAML files together with:
❯ fusion yaml file1.yml file2.yml ... fileN.yml -o result.yml
The same goes for JSON or TOML files, simply use the appropriate sub-command. E.g.
❯ fusion json file1.json file2.json ... fileN.json -o result.json
Note that since YAML is a superset of JSON, merging YAML and JSON files into YAML is also possible:
❯ fusion yaml file1.yml file2.json ... fileN.yml -o result.yml
The versioning is done using semver.
When a new release must be performed, use mroth/bump to create a Git tag and the corresponding Github release, then, once pushed, the Goreleaser Github Action workflow will create the binaries.
The version can be checked with
❯ fusion version
Fusion is based on gookit/config, itself based on imdario/mergo. Therefore, merge rules are the one implemented by Mergo.
Only the last value is retained. For example:
❯ cat file1.yml
key1: val1
❯ cat file2.yml
key1: val2
❯ fusion yaml file1.yml file2.yml -o res.yml && cat res.yml
key1: val2
Just like single values, only the last value of conflicting lists is retained. For example:
❯ cat file1.yml
list1:
- val11
- val12
❯ cat file2.yml
list1:
- val21
- val22
❯ fusion yaml file1.yml file2.yml -o res.yml && cat res.yml
list1:
- val21
- val22
Maps are merged together, keeping the last value for conflicting keys. For example:
❯ cat file1.yml
map1:
key1: val11
key2: val12
❯ cat file2.yml
map1:
key1: val21
key3: val23
❯ fusion yaml file1.yml file2.yml -o res.yml && cat res.yml
map1:
key1: val21
key2: val12
key3: val23