blob: ac7999afa7adcf93023c944d1392a3a0124edd66 [file] [log] [blame] [view]
## Table of Contents
* [Initial paper](#initial-paper)
* [Current state](#current-state)
* [Comment Threads](#comment-threads)
* [Blog posts](#blog-posts)
* [Presentations](#presentations)
* [Videos](#videos)
* [Questions](#questions)
* [Projects Related to vgo](#projects-related-to-vgo)
This document collects thoughts and notes about versioned Go modules from the Gophers [#vgo](https://gophers.slack.com/messages/vgo) channel. Invites to Gophers Slack from [here](https://invite.slack.golangbridge.org/).
### Initial paper
The **initial paper** can be read here [https://research.swtch.com/vgo](https://research.swtch.com/vgo).
The **proposal** can be found here [https://github.com/golang/go/issues/24301](https://github.com/golang/go/issues/24301).
The **reference implementation**: [https://go.googlesource.com/vgo/](https://go.googlesource.com/vgo/) and mirrored on Github here: [https://github.com/golang/vgo](https://github.com/golang/vgo).
The **[Go issue tracker](https://golang.org/issues)** is used to track bugs/feature requests. Issues should have the label `modules` and titles starting with `cmd/go` so that they can be automatically categorized. You can read the [existing issues here](https://golang.org/issues?q=is%3Aopen+is%3Aissue+label:modules).
**Note**: The reference implementation was named `vgo`, but support for modules is being integrated into the `go` command itself. The feature within the `go` command is called versioned Go modules (or “[[modules]]” for short), not vgo”.
***
### Current state
Currently, module support is in active development in the main `go` repository, with changes mirrored back to the `vgo` repository. Module support still has some rough edges. You are encouraged to [[try it|Modules]] and give your feedback, share your experience with it, and contribute to it.
For any production workloads, use [dep](https://github.com/golang/dep), or migrate to it if you have not done so already.
The proposal has been accepted and will be merged in the Go tree and replace dep at a later date.
You will be able to experiment with the module workflow from Go 1.11 as it will be included as an experiment in this release.
***
### Comment Threads
These are threads that have been created from the initial reference manifest:
- **golang-nuts ML:** [Go += Package Versioning](https://groups.google.com/forum/#!topic/golang-nuts/jFPz5yZCPcQ)
- **golang-dev ML:** [Go += Package Versioning](https://groups.google.com/d/topic/golang-dev/MNQwgYHMEcY/discussion), [vgo & semantic import versioning](https://groups.google.com/d/topic/golang-dev/Plc42fslQEk/discussion), [vgo and vendoring](https://groups.google.com/forum/#!topic/golang-dev/FTMScX1fsYk)
- **HackerNews posts:** https://news.ycombinator.com/from?site=swtch.com
- **Reddit:** https://www.reddit.com/domain/research.swtch.com/
- **vgo & vendoring:** https://groups.google.com/forum/#!topic/golang-dev/FTMScX1fsYk
- **vgo & semantic import versioning** https://groups.google.com/forum/#!topic/golang-dev/Plc42fslQEk
***
### Blog posts
- [A Proposal for Package Versioning in Go](https://blog.golang.org/versioning-proposal)
- [Exploring vgo](https://www.calhoun.io/exploring-vgo/)
- [Semantic Import Versioning in the wild](http://blog.ezyang.com/2018/02/semantic-import-versioning-in-the-wild/)
- [Diving into vgo from the Golang project](https://www.wolfe.id.au/2018/03/01/diving-into-vgo-from-the-golang-project/)
- [Notes on migrating to a Go mono repo](https://github.com/myitcv/x/wiki/Notes-on-migrating-to-a-Go-mono-repo)
***
### Presentations
- [Repeatable Builds with vgo](https://cda.ms/jD)
***
### Videos
- [Opening keynote: Go with Versions - GopherConSG 2018](https://www.youtube.com/watch?v=F8nrpe0XWRg)
- [1-Using vgo for Go Dependency Management](https://www.gophersnacks.com/programs/using-vgo-for-go-dependency-management) by Brian Ketelsen
- [2-Adding External Dependencies with vgo](https://www.gophersnacks.com/programs/adding-external-dependencies-with-vgo)
- [Building Predictability into Your Pipeline](https://www.youtube.com/watch?v=sbrZfPgNmfw) with Russ Cox, Jess Frazelle, Sam Boyer, Pete Garcin.
***
### Projects Related to module support
- [Athens](https://github.com/gomods/athens) - A proxy server for Go modules
- [vgo-docker-example](https://github.com/elithrar/vgo-docker-example) - An example of how to use modules + Docker together.
- [`myitcv.io/cmd/modpub`](https://github.com/myitcv/x/tree/master/cmd/modpub) - a tool to help create a directory of modules from a git repository
- [JFrog Artifactory](https://jfrog.com/artifactory) - A universal artifact repository with module support.
***
### Questions
| Question | Answer |
| ------------- | ------------- |
| Hitting GitHub API rate limits? | Create a token and add it to .netrc, see [related issue](https://golang.org/issues/23955) |
| How does vgo handles dependencies of older, discarded versions [link](https://gophers.slack.com/archives/C9BMAAFFB/p1519493604000033)? | [https://github.com/zeebo/vgo-test-version-selection](https://github.com/zeebo/vgo-test-version-selection) |
| Why are major versions in import paths? | https://groups.google.com/forum/#!topic/golang-dev/Plc42fslQEk |
| How to `go get` so that I can run a program, not download a library? | https://gophers.slack.com/archives/C9BMAAFFB/p1519687366000101 |
| What's the best way to maintain a package repository that have the major version in the import path? | https://groups.google.com/d/topic/golang-nuts/nS6ST60dwF8/discussion, https://groups.google.com/d/topic/golang-nuts/VREgKrQRFcY/discussion |