Skip to content

Fusion is a CLI tool to merge JSON, YAML or TOML files

License

Notifications You must be signed in to change notification settings

edgelaboratories/fusion

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fusion

Release License Go version Test status GolangCI status

fusion is CLI tool to merge JSON, YAML or TOML files.

Installation

Download from the Releases page and put it somewhere in your $PATH.

Usage

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

Versioning

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

Merging semantics

Fusion is based on gookit/config, itself based on imdario/mergo. Therefore, merge rules are the one implemented by Mergo.

Single key/value

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

Lists

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

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