<commit_before># graven

Graven is a build management tool for Go projects. It takes light
cues from projects like Maven and Leiningen, but given Go's much
simpler environment and far different take on dependency management, 
little is shared beyond the goals.

Want to know more? Read about the [Motivation for Graven](docs/motivation.md)

# Prerequisites

Graven currently requires the following tools to be on your path:

* `go` - the Go build tool, used to compile and test your application.
* `git` - used during the release process to validate the state of your repo, 
and tag your repo.

Of course if you don't plan to use the `release` command commands, you
can still use `graven` just for building, testing and packaging, and thus 
would only require the `go` tool. 

# Installation

If you want to run the latest, you can just `go get` the tool.

```
go get -u github.com/cbegin/graven
```

For greater consistency and stability, you can run a specific relese version from: 

* https://github.com/cbegin/graven/releases

# Workflow Example

Whether your starting an entirely new project, or working with existing source, 
the workflow should be the same. 

Not all of these steps are always necessary. See below for a description of 
implied workflow dependencies.

```bash
# Once per project, run the init command and modify
# default project.yaml with relevant names and repos etc.
$ cd ./some/working/directory
$ graven init
$ vi project.yaml

# Typical development cycle
$ graven clean
$ graven build
$ graven test
$ graven package

# When you're ready to release
$ graven repo --login --name github
Please type or paste a github token (will not echo):
$ graven release
$ graven bump [major|minor|patch|QUALIFIER]
```

A typical development cycle looks like this. The `init` command is run once 
per project, then clean, build, test and package are typically used throughout 
the development cycle. Releases occur less frequently, and versions are bumped 
after the release.

The `freeze` and `unfreeze` commands are optional and on a completely 
independent flow, thus can be executed any time. They are discussed separately<commit_msg>minor readme tweaks<commit_after># graven

Graven is a build management tool for Go projects. It takes light
cues from projects like Maven and Leiningen, but given Go's much
simpler environment and far different take on dependency management, 
little is shared beyond the goals.

Want to know more? Read about the [Motivation for Graven](docs/motivation.md).

# Prerequisites

Graven currently requires the following tools to be on your path:

* `go` - the Go build tool, used to compile and test your application.
* `git` - used during the release process to validate the state of your repo, 
and tag your repo.

Of course if you don't plan to use the `release` command commands, you
can still use `graven` just for building, testing and packaging, and thus 
would only require the `go` tool. 

# Installation

If you want to run the latest, you can just `go get` the tool.

```
go get -u github.com/cbegin/graven
```

For greater consistency and stability, you can run a specific relese version from: 

* https://github.com/cbegin/graven/releases

# Workflow Example

Whether your starting an entirely new project, or working with existing source, 
the workflow should be the same. 

Not all of these steps are always necessary. See below for a description of 
implied workflow dependencies.

```bash
# Once per project, run the init command and modify
# default project.yaml with relevant names and repos etc.
$ cd ./some/working/directory
$ graven init
$ vi project.yaml

# Typical development cycle
$ graven clean
$ graven build
$ graven test
$ graven package

# When you're ready to release
$ graven repo --login --name github
Please type or paste a github token (will not echo):
$ graven release
$ graven bump [major|minor|patch|QUALIFIER]
```

A typical development cycle looks like the following diagram. The `init` command 
is run once per project, then `clean`, `build`, `test` and `package` are typically used 
throughout the development cycle. Releases occur less frequently, and versions 
are bumped after the release.

The `freeze` and `unfreeze` commands are optional and on a completely 
independent flow, thus can be executed any time. They are discussed separately
{'fraction_non_alphanumeric': 0.06114443931702815, 'fraction_numerical': 0.0, 'mean_word_length': 4.286585365853658, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '586161', 'n_tokens_mistral': 1205, 'n_tokens_neox': 1137, 'n_words': 631}