mirror of https://github.com/kubernetes/kops.git
1.2 KiB
1.2 KiB
Go dependency management in kops
There is (currently) no perfect solution for dependency management in go; an "official" solution is planned, but in the meantime we use a solution based on git submodules.
The biggest problem is the double-import problem, where a vendored dependency
has a vendor
directory. There is no way to "flatten" the imports.
See for example the discussion here
The current solution
- We use git submodules to specify our dependencies. This allows simple (if tedious) direct specification of dependencies without extra tooling.
- We want to ignore the
vendor
directories in our dependencies though. There is no way to do a "filtered" git submodule. - We therefore put the git submodules them into
_vendor
, as this is ignored by go for historical reasons. - We then rsync the subset of files we want into
vendor
(viamake copydeps
) - We commit the contents of the
vendor
directory to git
Shortcomings
- We have to manually manage our dependencies (this is arguably also an advantage, in the absence of any real rules to resolve conflicts)
go get
will fetch the submodules, so we pull a lot more data than we need to