Rename to yq

This commit is contained in:
Mike Farah 2017-12-18 09:11:08 +11:00
parent dc4f8a6adb
commit cb48ba7173
15 changed files with 81 additions and 79 deletions

1
.gitignore vendored
View File

@ -29,3 +29,4 @@ yaml
vendor/*/ vendor/*/
tmp/ tmp/
cover/ cover/
yq

View File

@ -27,4 +27,4 @@ RUN set -ex \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
ENV CGO_ENABLED 0 ENV CGO_ENABLED 0
ENV GOPATH /go:/yaml ENV GOPATH /go:/yq

View File

@ -53,7 +53,7 @@ build: build/dev
.PHONY: build/dev .PHONY: build/dev
build/dev: test *.go build/dev: test *.go
@mkdir -p bin/ @mkdir -p bin/
${DOCKRUN} go build -o bin/yaml --ldflags "$(LDFLAGS)" ${DOCKRUN} go build --ldflags "$(LDFLAGS)"
${DOCKRUN} bash ./scripts/acceptance.sh ${DOCKRUN} bash ./scripts/acceptance.sh
## Compile the project for multiple OS and Architectures. ## Compile the project for multiple OS and Architectures.

View File

@ -1,4 +1,4 @@
export PROJECT = yaml export PROJECT = yq
IMPORT_PATH := github.com/mikefarah/${PROJECT} IMPORT_PATH := github.com/mikefarah/${PROJECT}
export GIT_COMMIT = $(shell git rev-parse --short HEAD) export GIT_COMMIT = $(shell git rev-parse --short HEAD)

View File

@ -1,12 +1,12 @@
# yaml [![Build Status](https://travis-ci.org/mikefarah/yaml.svg?branch=master)](https://travis-ci.org/mikefarah/yaml) # yq [![Build Status](https://travis-ci.org/mikefarah/yaml.svg?branch=master)](https://travis-ci.org/mikefarah/yaml)
yaml is a lightweight and portable command-line YAML processor a lightweight and portable command-line YAML processor
The aim of the project is to be the [jq](https://github.com/stedolan/jq) or sed of yaml files. The aim of the project is to be the [jq](https://github.com/stedolan/jq) or sed of yaml files.
## Install ## Install
[Download latest binary](https://github.com/mikefarah/yaml/releases/latest) or alternatively: [Download latest binary](https://github.com/mikefarah/yq/releases/latest) or alternatively:
``` ```
go get github.com/mikefarah/yaml go get github.com/mikefarah/yq
``` ```
## Features ## Features
@ -23,35 +23,35 @@ go get github.com/mikefarah/yaml
- Merge multiple yaml files where each additional file sets values for missing or null value keys. - Merge multiple yaml files where each additional file sets values for missing or null value keys.
- Merge multiple yaml files with overwrite to support overriding previous values. - Merge multiple yaml files with overwrite to support overriding previous values.
## [Usage](http://mikefarah.github.io/yaml/) ## [Usage](http://mikefarah.github.io/yq/)
Check out the [documentation](http://mikefarah.github.io/yaml/) for more detailed and advanced usage. Check out the [documentation](http://mikefarah.github.io/yq/) for more detailed and advanced usage.
``` ```
Usage: Usage:
yaml [flags] yq [flags]
yaml [command] yq [command]
Available Commands: Available Commands:
help Help about any command help Help about any command
merge yaml m [--inplace/-i] [--overwrite/-x] sample.yaml sample2.yaml merge yq m [--inplace/-i] [--overwrite/-x] sample.yaml sample2.yaml
new yaml n [--script/-s script_file] a.b.c newValueForC new yq n [--script/-s script_file] a.b.c newValueForC
read yaml r sample.yaml a.b.c read yq r sample.yaml a.b.c
write yaml w [--inplace/-i] [--script/-s script_file] sample.yaml a.b.c newValueForC write yq w [--inplace/-i] [--script/-s script_file] sample.yaml a.b.c newValueForC
Flags: Flags:
-h, --help help for yaml -h, --help help for yq
-j, --tojson output as json -j, --tojson output as json
-t, --trim trim yaml output (default true) -t, --trim trim yaml output (default true)
-v, --verbose verbose mode -v, --verbose verbose mode
-V, --version Print version information and quit -V, --version Print version information and quit
Use "yaml [command] --help" for more information about a command. Use "yq [command] --help" for more information about a command.
``` ```
## Contribute ## Contribute
1. `make [local] vendor` OR run `govendor sync` [link](https://github.com/kardianos/govendor) 1. `make [local] vendor`
2. add unit tests 2. add unit tests
3. apply changes 3. apply changes
4. `make` 4. `make [local] build`
5. profit 5. profit

View File

@ -8,7 +8,7 @@ b:
``` ```
then then
```bash ```bash
yaml r -j sample.yaml b.c yq r -j sample.yaml b.c
``` ```
will output will output
@ -26,7 +26,7 @@ e.g given a json file
``` ```
then then
```bash ```bash
yaml r sample.json yq r sample.json
``` ```
will output will output
```yaml ```yaml

View File

@ -1,12 +1,12 @@
Yaml files can be created using the 'new' command. This works in the same way as the write command, but you don't pass in an existing Yaml file. Yaml files can be created using the 'new' command. This works in the same way as the write command, but you don't pass in an existing Yaml file.
``` ```
yaml n <path> <new value> yq n <path> <new value>
``` ```
### Creating a simple yaml file ### Creating a simple yaml file
```bash ```bash
yaml n b.c cat yq n b.c cat
``` ```
will output: will output:
```yaml ```yaml
@ -25,7 +25,7 @@ b.e[0].name: Howdy Partner
then then
```bash ```bash
yaml n -s create_instructions.yaml yq n -s create_instructions.yaml
``` ```
will output: will output:
```yaml ```yaml
@ -38,7 +38,7 @@ b:
You can also pipe the instructions in: You can also pipe the instructions in:
```bash ```bash
cat create_instructions.yaml | yaml n -s - cat create_instructions.yaml | yq n -s -
``` ```
{!snippets/keys_with_dots.md!} {!snippets/keys_with_dots.md!}

View File

@ -1,5 +1,5 @@
# yaml # yq
yaml is a lightweight and portable command-line YAML processor yq is a lightweight and portable command-line YAML processor
The aim of the project is to be the [jq](https://github.com/stedolan/jq) or sed of yaml files. The aim of the project is to be the [jq](https://github.com/stedolan/jq) or sed of yaml files.
@ -7,10 +7,10 @@ The aim of the project is to be the [jq](https://github.com/stedolan/jq) or sed
### get the source ### get the source
```bash ```bash
go get github.com/mikefarah/yaml go get github.com/mikefarah/yq
``` ```
[.zip](https://github.com/mikefarah/yaml/zipball/master) or [tar.gz](https://github.com/mikefarah/yaml/tarball/master) [.zip](https://github.com/mikefarah/yq/zipball/master) or [tar.gz](https://github.com/mikefarah/yq/tarball/master)
[View on GitHub](https://github.com/mikefarah/yaml) [View on GitHub](https://github.com/mikefarah/yq)

View File

@ -2,7 +2,7 @@ Yaml files can be merged using the 'merge' command. Each additional file merged
set values for any key not existing already or where the key has no value. set values for any key not existing already or where the key has no value.
``` ```
yaml m <yaml_file|json_file> <path>... yq m <yaml_file|json_file> <path>...
``` ```
{!snippets/works_with_json.md!} {!snippets/works_with_json.md!}
@ -20,7 +20,7 @@ c:
``` ```
then then
```bash ```bash
yaml m data1.yaml data2.yaml yq m data1.yaml data2.yaml
``` ```
will output: will output:
```yaml ```yaml
@ -44,7 +44,7 @@ c:
``` ```
then then
```bash ```bash
yaml m -i data1.yaml data2.yaml yq m -i data1.yaml data2.yaml
``` ```
will update the data1.yaml file so that the value of 'c' is 'test: 1'. will update the data1.yaml file so that the value of 'c' is 'test: 1'.
@ -62,7 +62,7 @@ c:
``` ```
then then
```bash ```bash
yaml m -x data1.yaml data2.yaml yq m -x data1.yaml data2.yaml
``` ```
will output: will output:
```yaml ```yaml
@ -88,7 +88,7 @@ d: false
``` ```
then then
```bash ```bash
yaml m -x data1.yaml data3.yaml yq m -x data1.yaml data3.yaml
``` ```
will output: will output:
```yaml ```yaml

View File

@ -1,5 +1,5 @@
``` ```
yaml r <yaml_file|json_file> <path> yq r <yaml_file|json_file> <path>
``` ```
{!snippets/works_with_json.md!} {!snippets/works_with_json.md!}
@ -12,14 +12,14 @@ b:
``` ```
then then
```bash ```bash
yaml r sample.yaml b.c yq r sample.yaml b.c
``` ```
will output the value of '2'. will output the value of '2'.
### From Stdin ### From Stdin
Given a sample.yaml file of: Given a sample.yaml file of:
```bash ```bash
cat sample.yaml | yaml r - b.c cat sample.yaml | yq r - b.c
``` ```
will output the value of '2'. will output the value of '2'.
@ -35,7 +35,7 @@ bob:
``` ```
then then
```bash ```bash
yaml r sample.yaml bob.*.cats yq r sample.yaml bob.*.cats
``` ```
will output will output
```yaml ```yaml
@ -51,7 +51,7 @@ b.x:
``` ```
then then
```bash ```bash
yaml r sample.yaml \"b.x\".c yq r sample.yaml \"b.x\".c
``` ```
will output the value of '2'. will output the value of '2'.
@ -68,7 +68,7 @@ b:
``` ```
then then
``` ```
yaml r sample.yaml b.e[1].name yq r sample.yaml b.e[1].name
``` ```
will output 'sam' will output 'sam'
@ -84,7 +84,7 @@ b:
``` ```
then then
``` ```
yaml r sample.yaml b.e[*].name yq r sample.yaml b.e[*].name
``` ```
will output: will output:
``` ```

View File

@ -1,5 +1,5 @@
``` ```
yaml w <yaml_file|json_file> <path> <new value> yq w <yaml_file|json_file> <path> <new value>
``` ```
{!snippets/works_with_json.md!} {!snippets/works_with_json.md!}
@ -11,7 +11,7 @@ b:
``` ```
then then
```bash ```bash
yaml w sample.yaml b.c cat yq w sample.yaml b.c cat
``` ```
will output: will output:
```yaml ```yaml
@ -21,7 +21,7 @@ b:
### From STDIN ### From STDIN
```bash ```bash
cat sample.yaml | yaml w - b.c blah cat sample.yaml | yq w - b.c blah
``` ```
### Adding new fields ### Adding new fields
@ -34,7 +34,7 @@ b:
``` ```
then then
```bash ```bash
yaml w sample.yaml b.d[0] "new thing" yq w sample.yaml b.d[0] "new thing"
``` ```
will output: will output:
```yaml ```yaml
@ -55,7 +55,7 @@ b:
``` ```
then then
```bash ```bash
yaml w sample.yaml b.d[+] "bar thing" yq w sample.yaml b.d[+] "bar thing"
``` ```
will output: will output:
```yaml ```yaml
@ -75,7 +75,7 @@ b:
``` ```
then then
```bash ```bash
yaml w -i sample.yaml b.c cat yq w -i sample.yaml b.c cat
``` ```
will update the sample.yaml file so that the value of 'c' is cat. will update the sample.yaml file so that the value of 'c' is cat.
@ -96,7 +96,7 @@ b.e[0].name: Howdy Partner
then then
```bash ```bash
yaml w -s update_instructions.yaml sample.yaml yq w -s update_instructions.yaml sample.yaml
``` ```
will output: will output:
```yaml ```yaml
@ -108,14 +108,14 @@ b:
And, of course, you can pipe the instructions in using '-': And, of course, you can pipe the instructions in using '-':
```bash ```bash
cat update_instructions.yaml | yaml w -s - sample.yaml cat update_instructions.yaml | yq w -s - sample.yaml
``` ```
### Values starting with a hyphen (or dash) ### Values starting with a hyphen (or dash)
The flag terminator needs to be used to stop the app from attempting to parse the subsequent arguments as flags: The flag terminator needs to be used to stop the app from attempting to parse the subsequent arguments as flags:
``` ```
yaml w -- my.path -3 yq w -- my.path -3
``` ```
will output will output

View File

@ -3,9 +3,10 @@
set -e set -e
# acceptance test # acceptance test
X=$(./bin/yaml w ./examples/sample.yaml b.c 3 | ./bin/yaml r - b.c) X=$(./yq w ./examples/sample.yaml b.c 3 | ./yq r - b.c)
if [[ $X != 3 ]]; then if [[ $X != 3 ]]; then
echo "Failed acceptance test: expected 2 but was $X" echo "Failed acceptance test: expected 2 but was $X"
exit 1 exit 1
fi fi
echo "acceptance tests passed"

2
vendor/vendor.json vendored
View File

@ -39,5 +39,5 @@
"revisionTime": "2017-08-12T16:00:11Z" "revisionTime": "2017-08-12T16:00:11Z"
} }
], ],
"rootPath": "github.com/mikefarah/yaml" "rootPath": "github.com/mikefarah/yq"
} }

View File

@ -20,7 +20,7 @@ var outputToJSON = false
var overwriteFlag = false var overwriteFlag = false
var verbose = false var verbose = false
var version = false var version = false
var log = logging.MustGetLogger("yaml") var log = logging.MustGetLogger("yq")
func main() { func main() {
cmd := newCommandCLI() cmd := newCommandCLI()
@ -32,7 +32,7 @@ func main() {
func newCommandCLI() *cobra.Command { func newCommandCLI() *cobra.Command {
var rootCmd = &cobra.Command{ var rootCmd = &cobra.Command{
Use: "yaml", Use: "yq",
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if version { if version {
cmd.Print(GetVersionDisplay()) cmd.Print(GetVersionDisplay())
@ -74,13 +74,13 @@ func createReadCmd() *cobra.Command {
return &cobra.Command{ return &cobra.Command{
Use: "read [yaml_file] [path]", Use: "read [yaml_file] [path]",
Aliases: []string{"r"}, Aliases: []string{"r"},
Short: "yaml r sample.yaml a.b.c", Short: "yq r sample.yaml a.b.c",
Example: ` Example: `
yaml read things.yaml a.b.c yq read things.yaml a.b.c
yaml r - a.b.c (reads from stdin) yq r - a.b.c (reads from stdin)
yaml r things.yaml a.*.c yq r things.yaml a.*.c
yaml r things.yaml a.array[0].blah yq r things.yaml a.array[0].blah
yaml r things.yaml a.array[*].blah yq r things.yaml a.array[*].blah
`, `,
Long: "Outputs the value of the given path in the yaml file to STDOUT", Long: "Outputs the value of the given path in the yaml file to STDOUT",
RunE: readProperty, RunE: readProperty,
@ -91,15 +91,15 @@ func createWriteCmd() *cobra.Command {
var cmdWrite = &cobra.Command{ var cmdWrite = &cobra.Command{
Use: "write [yaml_file] [path] [value]", Use: "write [yaml_file] [path] [value]",
Aliases: []string{"w"}, Aliases: []string{"w"},
Short: "yaml w [--inplace/-i] [--script/-s script_file] sample.yaml a.b.c newValueForC", Short: "yq w [--inplace/-i] [--script/-s script_file] sample.yaml a.b.c newValueForC",
Example: ` Example: `
yaml write things.yaml a.b.c cat yq write things.yaml a.b.c cat
yaml write --inplace things.yaml a.b.c cat yq write --inplace things.yaml a.b.c cat
yaml w -i things.yaml a.b.c cat yq w -i things.yaml a.b.c cat
yaml w --script update_script.yaml things.yaml yq w --script update_script.yaml things.yaml
yaml w -i -s update_script.yaml things.yaml yq w -i -s update_script.yaml things.yaml
yaml w things.yaml a.b.d[+] foo yq w things.yaml a.b.d[+] foo
yaml w things.yaml a.b.d[+] foo yq w things.yaml a.b.d[+] foo
`, `,
Long: `Updates the yaml file w.r.t the given path and value. Long: `Updates the yaml file w.r.t the given path and value.
Outputs to STDOUT unless the inplace flag is used, in which case the file is updated instead. Outputs to STDOUT unless the inplace flag is used, in which case the file is updated instead.
@ -125,11 +125,11 @@ func createNewCmd() *cobra.Command {
var cmdNew = &cobra.Command{ var cmdNew = &cobra.Command{
Use: "new [path] [value]", Use: "new [path] [value]",
Aliases: []string{"n"}, Aliases: []string{"n"},
Short: "yaml n [--script/-s script_file] a.b.c newValueForC", Short: "yq n [--script/-s script_file] a.b.c newValueForC",
Example: ` Example: `
yaml new a.b.c cat yq new a.b.c cat
yaml n a.b.c cat yq n a.b.c cat
yaml n --script create_script.yaml yq n --script create_script.yaml
`, `,
Long: `Creates a new yaml w.r.t the given path and value. Long: `Creates a new yaml w.r.t the given path and value.
Outputs to STDOUT Outputs to STDOUT
@ -147,13 +147,13 @@ func createMergeCmd() *cobra.Command {
var cmdMerge = &cobra.Command{ var cmdMerge = &cobra.Command{
Use: "merge [initial_yaml_file] [additional_yaml_file]...", Use: "merge [initial_yaml_file] [additional_yaml_file]...",
Aliases: []string{"m"}, Aliases: []string{"m"},
Short: "yaml m [--inplace/-i] [--overwrite/-x] sample.yaml sample2.yaml", Short: "yq m [--inplace/-i] [--overwrite/-x] sample.yaml sample2.yaml",
Example: ` Example: `
yaml merge things.yaml other.yaml yq merge things.yaml other.yaml
yaml merge --inplace things.yaml other.yaml yq merge --inplace things.yaml other.yaml
yaml m -i things.yaml other.yaml yq m -i things.yaml other.yaml
yaml m --overwrite things.yaml other.yaml yq m --overwrite things.yaml other.yaml
yaml m -i -x things.yaml other.yaml yq m -i -x things.yaml other.yaml
`, `,
Long: `Updates the yaml file by adding/updating the path(s) and value(s) from additional yaml file(s). Long: `Updates the yaml file by adding/updating the path(s) and value(s) from additional yaml file(s).
Outputs to STDOUT unless the inplace flag is used, in which case the file is updated instead. Outputs to STDOUT unless the inplace flag is used, in which case the file is updated instead.