Two more use cases of vendor that I would like to keep:
- A single audit trail for all go code going into production binaries in a 
git log.
- A single place to enforce upgrades for multiple binaries in a monorepo. 
Perhaps a top-level meta-module could do the trick?

On Tuesday, February 20, 2018 at 6:42:50 PM UTC-8, Dominik Honnef wrote:
>
> Hi, 
>
> I'd like your input on two concern I have, one as a tool developer and 
> one with regard to reproducible builds. 
>
> With go and go get, it is expected that code will not compile until 
> all dependencies have been explicitly downloaded. Hence, it is 
> acceptable for tools such as staticcheck to also fail if dependencies 
> are not present. Vgo seems to change this, by promising the user that 
> dependencies will be automatically downloaded. Running `vgo build` at 
> any point will "just work". Tools, however, do not have this luxury, 
> for multiple reasons: 
>
> - Multiple tools may run in parallel, either via helpers such as 
> gometalinter, or simply because editors like Emacs launch multiple 
> tools at once, for example when saving a file. This is likely prone to 
> race conditions. File locking may be an option, but file locking is 
> known to cause erratic problems on networked file systems, or be 
> outright unsupported. 
> - Fetching the dependencies, e.g. via 'vgo build', has the side-effect 
> of modifying the go.mod file. This is probably unacceptable for tools 
> that are run automatically, without the user's express wish to add new 
> dependencies to the go.mod file. 
> - If we do find a solution to these two problems, we'd probably still 
> want a 'vgo get' (with no arguments), to just fetch the dependencies, 
> without also incurring a costly build. 
>
> In my opinion, tools should behave as closely as possible to (v)go 
> build, so that users can operate on a single set of expectations. 
>
> My second concern is regarding the promise of getting rid of the 
> vendor directory. Reproducible builds not only depend on versioning, 
> but also on ensuring that code doesn't go away, be it due to server 
> downtime or more permanent reasons. Vendoring makes this rather easy: 
> add your dependencies to vendor and commit them, and your project is 
> now self-contained. Vgo seems to discourage this practice. Can you 
> suggest an alternative that is as straightforward as vendoring? All 
> other solutions - which amount to various forms of proxies and mirrors 
> - are significantly more laboursome. 
>
> I have noticed that currently, vgo downloads dependencies into GOPATH. 
> Are there any plans to instead store them with the module itself, 
> possibly in a way that facilitates committing them to version control? 
>
> On Tue, Feb 20, 2018 at 6:20 PM, Russ Cox <r...@golang.org <javascript:>> 
> wrote: 
> > Hi everyone, 
> > 
> > I have a new blog post you might be interested in. 
> > https://research.swtch.com/vgo. 
> > 
> > I'll try to watch this thread to answer any questions. 
> > 
> > Best, 
> > Russ 
> > 
> > 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "golang-nuts" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to golang-nuts...@googlegroups.com <javascript:>. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to