{"action":"created","issue":{"url":"https://api.github.com/repos/golang/go/issues/24454","repository_url":"https://api.github.com/repos/golang/go","labels_url":"https://api.github.com/repos/golang/go/issues/24454/labels{/name}","comments_url":"https://api.github.com/repos/golang/go/issues/24454/comments","events_url":"https://api.github.com/repos/golang/go/issues/24454/events","html_url":"https://github.com/golang/go/issues/24454","id":306631822,"number":24454,"title":"x/vgo: migrating the Go community. ","user":{"login":"marwan-at-work","id":16294261,"avatar_url":"https://avatars0.githubusercontent.com/u/16294261?v=4","gravatar_id":"","url":"https://api.github.com/users/marwan-at-work","html_url":"https://github.com/marwan-at-work","followers_url":"https://api.github.com/users/marwan-at-work/followers","following_url":"https://api.github.com/users/marwan-at-work/following{/other_user}","gists_url":"https://api.github.com/users/marwan-at-work/gists{/gist_id}","starred_url":"https://api.github.com/users/marwan-at-work/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/marwan-at-work/subscriptions","organizations_url":"https://api.github.com/users/marwan-at-work/orgs","repos_url":"https://api.github.com/users/marwan-at-work/repos","events_url":"https://api.github.com/users/marwan-at-work/events{/privacy}","received_events_url":"https://api.github.com/users/marwan-at-work/received_events","type":"User","site_admin":false},"labels":[],"state":"open","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":79,"closed_issues":21,"state":"open","created_at":"2018-02-20T19:51:55Z","updated_at":"2018-03-19T20:55:54Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2018-03-19T20:55:52Z","updated_at":"2018-03-20T11:51:39Z","closed_at":null,"author_association":"NONE","body":"I have a specific scenario that makes it hard for me to imagine how the entire Go open source community will have to adapt to vgo. \r\n\r\n**For those interested to participate in the discussion, please read through the scenario and answer in the context of the scenario so that we don't go off topic. Thanks!**\r\n\r\nThis is my scenario:\r\n\r\nI started a new project `github.com/marwan-at-work/awesome-go-project`.\r\n\r\nLet's say my repo has 35 direct dependencies and 350 transitive dependencies. \r\n\r\nSay 25 of my direct dependencies use `github.com/dgrijalva/jwt-go` where it’s currently tagged as `v3` but does not have `v3` in its import path. Therefore, `jwt-go` is a transitive dependency and I'm not 100 percent sure which 25 out of 35 direct dependencies use `jwt-go`. \r\n\r\nWhen I run `vgo build` for the first time it breaks because of the `import path` rule. The error says: `invalid module: github.com/dgrijalva/jwt-go should be v1, not v3 (v3.1.0)` \r\n\r\nIt's important to note, that I am not trying to upgrade any packages, I am simply running `vgo build` for the first time.\r\n\r\nSo what’s the solution here? If I understand correctly, it’s a 3-step solution: \r\n\r\n1. Mr or Ms `dgrijalva` will need to update their repo to include a `go.mod` in `jwt-go`’s root directory to specify a new import path that has `v3` in it. Not that bad. Hopefully they’re online and around to accept PRs. \r\n\r\n2. Every single one of the 25 dependencies that use `jwt-go` will need to update their source code to use `github.com/dgrijalva/jwt-go/v3` (whether manually or through intended tooling). The update itself is not that hard, but having to wait on 25 authors to migrate might take a long while for me to get to step 3:\r\n\r\n3. I can finally now run `vgo build`.\r\n\r\nNow inflate this scenario to the entire Go community. How will we solve this?\r\n\r\nWill package users like myself have to wait on my direct dependencies to update their source code, which they themselves will have to wait on their direct dependencies to migrate to vgo?\r\n\r\nWhat is the strategy for this particular scenario? \r\n\r\nThanks"},"comment":{"url":"https://api.github.com/repos/golang/go/issues/comments/374569972","html_url":"https://github.com/golang/go/issues/24454#issuecomment-374569972","issue_url":"https://api.github.com/repos/golang/go/issues/24454","id":374569972,"user":{"login":"kardianos","id":755121,"avatar_url":"https://avatars2.githubusercontent.com/u/755121?v=4","gravatar_id":"","url":"https://api.github.com/users/kardianos","html_url":"https://github.com/kardianos","followers_url":"https://api.github.com/users/kardianos/followers","following_url":"https://api.github.com/users/kardianos/following{/other_user}","gists_url":"https://api.github.com/users/kardianos/gists{/gist_id}","starred_url":"https://api.github.com/users/kardianos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kardianos/subscriptions","organizations_url":"https://api.github.com/users/kardianos/orgs","repos_url":"https://api.github.com/users/kardianos/repos","events_url":"https://api.github.com/users/kardianos/events{/privacy}","received_events_url":"https://api.github.com/users/kardianos/received_events","type":"User","site_admin":false},"created_at":"2018-03-20T11:51:39Z","updated_at":"2018-03-20T11:51:39Z","author_association":"CONTRIBUTOR","body":"One way this can be worked around in the current prototype is for a packages that have release v1+ is to put v2, v3, vN in subdirectories under master, with a modules file in each vN folder. Then for the next year and a half vgo and go can co-exist. The normal go command fetching packages like normal from the vN sub-directories, and vgo style looking for modules in the sub directories.\r\n\r\nOnce the world is mostly vgo based, we can use the ability to separate out the physical file path from the version import path.\r\n"}}
{"actor":{"display_login":"kardianos"}}