From 874028e6f2054b33c62146b5c92324d915574bde Mon Sep 17 00:00:00 2001 From: Clayton Kehoe <118750525+kehoecj@users.noreply.github.com> Date: Mon, 6 Feb 2023 08:43:48 -0600 Subject: [PATCH] Updates to the README (#3) --- .github/workflows/go.yml | 6 +- README.md | 113 ++++++++++++++++++++++++------------- cmd/validator/validator.go | 17 ++++++ img/logo.png | Bin 0 -> 10061 bytes 4 files changed, 93 insertions(+), 43 deletions(-) create mode 100755 img/logo.png diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 4d2254c..38f3686 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -1,7 +1,7 @@ # This workflow will build a golang project # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go -name: Go +name: Go Pipeline on: push @@ -45,8 +45,6 @@ jobs: uses: actions/setup-go@v3 with: go-version: 1.19 - + - name: Test run: go test -v ./... - - diff --git a/README.md b/README.md index 26c2424..06e1be5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,28 @@ -# Config File Validator +
+ +

Config File Validator

+
+ +

+ + Apache 2 License + + + + Go Reference + + + + Go Report Card + + + + Pipeline Status + +

## About -How many deployments have you done that needed to be rolled back due to a missing character in a configuration file in your repo? If you're like most teams that number is greater than zero. The config file validator was created to solve this problem by searching through your project and validating the syntax of all configuation files. +How many deployments have you done that needed to be rolled back due to a missing character in a configuration file in your repo? If you're like most teams that number is greater than zero. The config file validator was created to solve this problem by searching through your project and validating the syntax of all configuration files. ### Where can you use this tool? * In a CI/CD pipeline as a quality gate @@ -14,8 +35,55 @@ How many deployments have you done that needed to be rolled back due to a missin * YAML * TOML -## Getting Started -Binaries and a container on Dockerhub will eventually be available but for now the project must be built on an environment that has golang 1.17+ installed. +## Installing +There are several ways to install the config file validator tool + +### Using `go install` +If you have a go environment on your desktop you can use [go install](https://go.dev/doc/go-get-install-deprecation) to install the validator executable. The validator executable will be installed to the directory named by the GOBIN environment variable, which defaults to $GOPATH/bin or $HOME/go/bin if the GOPATH environment variable is not set. + +``` +go install github.com/Boeing/config-file-validator/cmd/validator +``` + + +### Executables +Executables are available for Linux and Windows (macOS coming soon!). Navigate to the [releases](https://github.com/Boeing/config-file-validator/releases) page to download the latest version. Once the executable has been downloaded it needs to be installed by moving the downloaded file to a location on your OS PATH. + +## Using +``` +Usage of /validator: + -exclude-dirs string + Subdirectories to exclude when searching for configuration files + -search-path string + The search path for configuration files +``` + +### Examples +#### Standard Run +``` +validator -search-path /path/to/search +``` + +![Standard Run](./img/standard_run.png) + +#### Exclude dirs +Exclude subdirectories in the search path + +``` +validator -search-path /path/to/search -exclude-dirs=/path/to/search/tests +``` + +![Exclude Dirs Run](./img/exclude_dirs.png) + +#### Container Run +``` +docker run -it --rm -v /path/to/config/file/location:/test -search-path=/test +``` + +![Standard Run](./img/docker_run.png) + +## Building from source +The project can be downloaded and built from source using an environment with golang 1.17+ installed. After successful build, the statically-linked binary can be moved to a location on your operating system PATH. ### Linux #### Build @@ -57,47 +125,14 @@ cp .\validator.exe 'C:\Program Files\validator' ``` ### Docker -The config file validator can be built as a docker container -``` -docker build . -t config-file-validator -``` - -## Using -``` -Usage of /validator: - -exclude-dirs string - Subdirectories to exclude when searching for configuration files - -search-path string - The search path for configuration files -``` +You can also use the provided Dockerfile to build the config file validator tool in a container -### Examples -#### Standard Run -``` -validator -search-path /path/to/search ``` - -![Standard Run](./img/standard_run.png) - -#### Exclude dirs -Exclude subdirectories in the search path - -``` -validator -search-path /path/to/search -exclude-dirs=/path/to/search/tests -``` - -![Exclude Dirs Run](./img/exclude_dirs.png) - -#### Container Run -``` -docker run -it --rm -v /path/to/config/file/location:/test -search-path=/test +docker build . -t config-file-validator ``` -![Standard Run](./img/docker_run.png) - ## Contributing We welcome contributions! Please refer to our [contributing guide](/CONTRIBUTING.md) ## License - The Config File Validator is released under the [Apache 2.0](/LICENSE) License diff --git a/cmd/validator/validator.go b/cmd/validator/validator.go index afb622d..920dab7 100644 --- a/cmd/validator/validator.go +++ b/cmd/validator/validator.go @@ -1,3 +1,20 @@ +/* +Validator recusively scans a directory to search for configuration files and +validates them using the go package for each configuration type. + +Currently json, yaml, toml, and xml configuration file types are supported. + +Usage: + + validator [flags] + +The flags are: + -search-path string + The search path for configuration files + -exclude-dirs string + Subdirectories to exclude when searching for configuration files +*/ + package main import ( diff --git a/img/logo.png b/img/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..8e7d070d65fb7a8088bf9dae99cab561d0bfedce GIT binary patch literal 10061 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 BfkXfR literal 0 HcmV?d00001