{"action":"created","issue":{"url":"https://api.github.com/repos/golang/go/issues/24051","repository_url":"https://api.github.com/repos/golang/go","labels_url":"https://api.github.com/repos/golang/go/issues/24051/labels{/name}","comments_url":"https://api.github.com/repos/golang/go/issues/24051/comments","events_url":"https://api.github.com/repos/golang/go/issues/24051/events","html_url":"https://github.com/golang/go/issues/24051","id":299550816,"number":24051,"title":"x/vgo: Support depending on binary modules","user":{"login":"Merovius","id":720787,"avatar_url":"https://avatars3.githubusercontent.com/u/720787?v=4","gravatar_id":"","url":"https://api.github.com/users/Merovius","html_url":"https://github.com/Merovius","followers_url":"https://api.github.com/users/Merovius/followers","following_url":"https://api.github.com/users/Merovius/following{/other_user}","gists_url":"https://api.github.com/users/Merovius/gists{/gist_id}","starred_url":"https://api.github.com/users/Merovius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Merovius/subscriptions","organizations_url":"https://api.github.com/users/Merovius/orgs","repos_url":"https://api.github.com/users/Merovius/repos","events_url":"https://api.github.com/users/Merovius/events{/privacy}","received_events_url":"https://api.github.com/users/Merovius/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/golang/go/milestones/71","html_url":"https://github.com/golang/go/milestone/71","labels_url":"https://api.github.com/repos/golang/go/milestones/71/labels","id":3130892,"number":71,"title":"vgo","description":null,"creator":{"login":"rsc","id":104030,"avatar_url":"https://avatars1.githubusercontent.com/u/104030?v=4","gravatar_id":"","url":"https://api.github.com/users/rsc","html_url":"https://github.com/rsc","followers_url":"https://api.github.com/users/rsc/followers","following_url":"https://api.github.com/users/rsc/following{/other_user}","gists_url":"https://api.github.com/users/rsc/gists{/gist_id}","starred_url":"https://api.github.com/users/rsc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rsc/subscriptions","organizations_url":"https://api.github.com/users/rsc/orgs","repos_url":"https://api.github.com/users/rsc/repos","events_url":"https://api.github.com/users/rsc/events{/privacy}","received_events_url":"https://api.github.com/users/rsc/received_events","type":"User","site_admin":false},"open_issues":63,"closed_issues":52,"state":"open","created_at":"2018-02-20T19:51:55Z","updated_at":"2018-03-30T18:45:52Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2018-02-22T23:48:01Z","updated_at":"2018-03-30T18:45:52Z","closed_at":"2018-03-30T18:45:52Z","author_association":"NONE","body":"Currently vgo does not allow depending on binary modules (I might be wrong? But that's at least an error message I saw when playing around with it. If I'm wrong, disregard this). I would like to request that we allow that (potentially only for the top-level module, to limit the blast radius a little bit), with the semantics that any binary module depended on will be installed. In this way, they would be similar to Debian metapackages (and I might refer to them as metapackages for that reason).\r\n\r\nI believe this would enable or simplify several workflows that I care about. The general pattern here is, that you can write a go.mod file which contains a list of binaries you care about with associated versions. \r\n You can then use vgo and its version selection algorithm to update them in lockstep and have canonical versions for the transitive closure of all dependencies. The listed Go binaries could serve as roots for \"garbage-collection\" of the dependency graph, it could serve to fixate what packages we are actually \"globally\" interested in and it could enable getting necessary updates of libraries in all the tools you use and care about, by simply adding them to your top-level go.mod with a minimum version.\r\n\r\nThere are several cases where I believe this might be interesting:\r\n\r\n* Personally, I'd like to have a \"global\" set of packages installed on my development machine. I could even commit this file to version control to distribute it between my machines (and/or install it as a regular Go package to get all tools relevant to me in one step).\r\n* I think it might be interesting for projects that contain many binaries (think e.g. Kubernetes). It can serve both as a metapackage to install the whole software suite, but also as a way to apply vgo's MVS to all binaries in the suite at once and ensure consistent versions of all libraries.\r\n* It could be interesting for companies, again as a central place to enforce policy and as a single, simple metapackage to install that would provide you with all the tools you'd need in your day-to-day work\r\n* It could be interesting for linux distributions (or similar concepts of other operating systems). For example, Fedora could have a repo-wide go.mod, which lists all the binaries packaged in Fedora. vgo's MVS could be used to determine a good set of module versions to package to cover all the needed binaries, to efficiently resolve lock-step repo-wide updates and also (again) to specify security-related policy-constraints. It might make the life of go-teams in distributions significantly easier (cc @stapelberg who is working on this usecase in debian)."},"comment":{"url":"https://api.github.com/repos/golang/go/issues/comments/377594251","html_url":"https://github.com/golang/go/issues/24051#issuecomment-377594251","issue_url":"https://api.github.com/repos/golang/go/issues/24051","id":377594251,"user":{"login":"rsc","id":104030,"avatar_url":"https://avatars1.githubusercontent.com/u/104030?v=4","gravatar_id":"","url":"https://api.github.com/users/rsc","html_url":"https://github.com/rsc","followers_url":"https://api.github.com/users/rsc/followers","following_url":"https://api.github.com/users/rsc/following{/other_user}","gists_url":"https://api.github.com/users/rsc/gists{/gist_id}","starred_url":"https://api.github.com/users/rsc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rsc/subscriptions","organizations_url":"https://api.github.com/users/rsc/orgs","repos_url":"https://api.github.com/users/rsc/repos","events_url":"https://api.github.com/users/rsc/events{/privacy}","received_events_url":"https://api.github.com/users/rsc/received_events","type":"User","site_admin":false},"created_at":"2018-03-30T18:45:52Z","updated_at":"2018-03-30T18:45:52Z","author_association":"CONTRIBUTOR","body":"You can create a go.mod listing the versions of modules containing commands you care about.\r\nYou would need to have next to it a shell script that installed the specific things you want:\r\n\r\n    vgo install x.y/cmd/... w.z/cmd/foo etc\r\n\r\nI don't think vgo itself should grow support for that kind of expansion, though.\r\nIt is not a goal to expand into \"linux distribution\" territory."}}
{"actor":{"display_login":"rsc"}}