1# dept
2
3[![CircleCI](https://circleci.com/gh/ktr0731/dept.svg?style=svg)](https://circleci.com/gh/ktr0731/dept)
4[![codecov](https://codecov.io/gh/ktr0731/dept/branch/master/graph/badge.svg?token=GLDI0EuIJs)](https://codecov.io/gh/ktr0731/dept)
5
6[Go modules](//github.com/golang/go/wiki/Modules) based dependency management for Go tools.
7
8## Description
9`dept` is a dependency management tool based on [Go modules](//github.com/golang/go/wiki/Modules).
10Instead of `go.mod`, `dept` helps you to manage Go tools.
11Go tools like [Golint](https://github.com/golang/lint), [errcheck](https://github.com/kisielk/errcheck) are often used in various environment.
12`dept` provides you deterministic builds by manage tool dependencies.
13
14`dept` is based on Go modules. All dependency resolution are provided by `go mod` commands.
15
16## Requirements
17- Go v1.13 or later
18
19## Basic usage
20At first, let's create `gotool.mod` in a project root by the following command.
21All tools which are managed by `dept` are written to `gotool.mod`.
22
23``` sh
24$ dept init
25```
26
27Then, let's install Go tools you want to use in your project.
28``` sh
29$ dept get github.com/mitchellh/gox github.com/tcnksm/ghr@v0.12.0
30$ dept get -o lint github.com/golangci/golangci-lint/cmd/golangci-lint # rename golangci-lint as 'lint'
31```
32
33Finally, use `exec` to execute installed commands.
34``` sh
35$ dept exec ghr -v
36ghr version v0.12.0
37```
38
39If you want to installed commands without `dept`, please run `build`.
40``` sh
41$ dept build
42$ ls _tools
43ghr     gox     lint
44```
45
46## Available commands
47### init
48``` sh
49$ dept init
50```
51
52### get
53`dept get` installs binaries to the specified directory.
54
55``` sh
56$ dept get github.com/mitchellh/gox
57```
58
59You can select the specified version like Go modules:
60``` sh
61$ dept get github.com/mitchellh/gox@v0.3.0
62$ dept get github.com/mitchellh/gox@v0.1.0
63```
64
65To install a binary with another name:
66``` sh
67$ dept get -o lint github.com/golangci-lint/cmd/golangci-lint
68```
69
70Update tools to the latest version:
71``` sh
72$ dept get -u github.com/mitchellh/gox
73$ dept get -u # update all tools
74```
75
76### remove
77`dept remove` uninstalls passed tools.
78
79``` sh
80$ dept remove github.com/mitchellh/gox
81```
82
83### exec
84`dept exec` executes the passed tool with arguments.
85
86``` sh
87$ dept exec ghr -v
88```
89
90### build
91`dept build` builds all tools.
92
93``` sh
94$ dept build
95```
96
97If `$GOBIN` enabled, it will be used preferentially.
98``` sh
99$ GOBIN=$PWD/bin dept build
100```
101
102Also, `-d` flag is provided.
103``` sh
104$ dept build -d bin
105```
106
107### list
108`dept list` list ups all tools managed by `dept`.
109
110``` sh
111$ dept list
112github.com/golangci/golangci-lint/cmd/golangci-lint lint v1.12.3
113github.com/mitchellh/gox gox v0.4.0
114github.com/tcnksm/ghr ghr v0.12.0
115```
116
117You can format output with `-f` flag.
118``` sh
119$ dept list -f '{{ .Name }}'
120lint
121gox
122ghr
123```
124
125### clean
126`dept clean` cleans up all cached tools.
127
128``` sh
129$ dept clean
130```
131