{"action":"created","issue":{"url":"https://api.github.com/repos/golang/go/issues/12302","labels_url":"https://api.github.com/repos/golang/go/issues/12302/labels{/name}","comments_url":"https://api.github.com/repos/golang/go/issues/12302/comments","events_url":"https://api.github.com/repos/golang/go/issues/12302/events","html_url":"https://github.com/golang/go/issues/12302","id":102888899,"number":12302,"title":"proposal: a version numbering scheme and release process for Go projects","user":{"login":"davecheney","id":7171,"avatar_url":"https://avatars.githubusercontent.com/u/7171?v=3","gravatar_id":"","url":"https://api.github.com/users/davecheney","html_url":"https://github.com/davecheney","followers_url":"https://api.github.com/users/davecheney/followers","following_url":"https://api.github.com/users/davecheney/following{/other_user}","gists_url":"https://api.github.com/users/davecheney/gists{/gist_id}","starred_url":"https://api.github.com/users/davecheney/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davecheney/subscriptions","organizations_url":"https://api.github.com/users/davecheney/orgs","repos_url":"https://api.github.com/users/davecheney/repos","events_url":"https://api.github.com/users/davecheney/events{/privacy}","received_events_url":"https://api.github.com/users/davecheney/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/golang/go/labels/Proposal","name":"Proposal","color":"ededed"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":63,"created_at":"2015-08-24T20:51:46Z","updated_at":"2015-09-02T17:49:14Z","closed_at":null,"body":"# Preface\r\n\r\nGo projects do not have version numbers in the way it is commonly understood by our counterparts in other languages communities. This is because there is no formalised notion of releasing a Go project. There is no process of taking an arbitrary vcs commit hash and assigning it a version number that is both meaningful for humans and machines.\r\n\r\nAdditionally, Operating System distributors such as Debian and Ubuntu strongly prefer to package released versions of a project, and are currently reduced to [doing things like this](https://ftp-master.debian.org/new/golang-github-odeke-em-command_0.0~git20150727.0.cf17ee2-1.html).\r\n\r\nTo put it another way, \r\n\r\nGo projects are commonly tracked in vcs repositories and derive their import prefix from their vcs location. Version control systems assign revision identifiers or hashes to various copies of the source they track over time. These vcs hashes are ideal for identifying a particular copy, or revision, of a Go project. However vcs hashes are less useful at answering other types of question like:\r\n\r\n- \"Am I using the latest copy of this project ?\"\r\n- \"Are there any bug fixes for version 1.5 available ?\"\r\n- \"Which version of the postgres driver are compatible with this library ?\"\r\n\r\nThe aim of this proposal is to establish a single recommended procedure for releasing Go projects, in the same way that gofmt defines a single recommended way to format Go source code.\r\n\r\n# Proposal\r\n\r\nThis proposal seeks to establish a recommended version numbering scheme and minimal release process for Go projects. \r\n\r\nA Go project is a collection of one or more Go packages whose source is tracked in a vcs repository. \r\n\r\nA repository root, as defined by [cmd/go](https://golang.org/cmd/go/#hdr-Remote_import_paths), identifies both the unique import path prefix for the Go project, and the vcs repository that holds the project's source. \r\n\r\nThis proposal describes a release process for Go projects by tagging the repository which hold the project's code.\r\n\r\nThis process is intended to be light weight and will facilitate the creation of tools that automate the creation and consumption of released versions of Go projects.\r\n\r\n## Version numbering scheme\r\n\r\nThis proposal recommends that Go projects adopt the [semantic versioning 2.0 standard](http://semver.org/spec/v2.0.0.html) for their version numbering scheme.\r\n\r\nThis recommendation is informed by the broad support for semantic versioning across our contemporaries like node.js (npm), rust (cargo), javascript (bower), and ruby (rubygems). Adherence to a commonly accepted ideal of what constitutes a major, minor, or patch release will allow Go programmers to benefit from the experiences of these other communities' dependency management ecosystems.\r\n\r\n## Tag format\r\n\r\nFurthermore, this proposal recommends that Go projects adopt a process of releasing their software by applying a tag to their vcs repositories. The format of this tag is defined as\r\n``` \r\nv<semver>\r\n```\r\nThat is, the character `v`, U+0075, followed directly by a string which is compliant with the SemVer 2.0 standard. Tags which do not fit this format should be ignored for the purpose of determining which versions of a Go project are released.\r\n\r\n## Out of scope \r\n\r\nThe following items are out of scope, but would be addressed in a later proposals:\r\n\r\n- How Go projects can declare the version numbers or ranges for projects they depend on.\r\n- How go get may be changed to consume this version information.\r\n\r\nAdditionally, this proposal not seek to change the release process, or version numbering scheme for the Go (https://golang.org) distribution itself.\r\n\r\nThank you for your time."},"comment":{"url":"https://api.github.com/repos/golang/go/issues/comments/137187245","html_url":"https://github.com/golang/go/issues/12302#issuecomment-137187245","issue_url":"https://api.github.com/repos/golang/go/issues/12302","id":137187245,"user":{"login":"ChrisHines","id":1060711,"avatar_url":"https://avatars.githubusercontent.com/u/1060711?v=3","gravatar_id":"","url":"https://api.github.com/users/ChrisHines","html_url":"https://github.com/ChrisHines","followers_url":"https://api.github.com/users/ChrisHines/followers","following_url":"https://api.github.com/users/ChrisHines/following{/other_user}","gists_url":"https://api.github.com/users/ChrisHines/gists{/gist_id}","starred_url":"https://api.github.com/users/ChrisHines/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChrisHines/subscriptions","organizations_url":"https://api.github.com/users/ChrisHines/orgs","repos_url":"https://api.github.com/users/ChrisHines/repos","events_url":"https://api.github.com/users/ChrisHines/events{/privacy}","received_events_url":"https://api.github.com/users/ChrisHines/received_events","type":"User","site_admin":false},"created_at":"2015-09-02T17:49:14Z","updated_at":"2015-09-02T17:49:14Z","body":"I am late to the party in the thread here, although I participated in the prelude to this proposal in the go-pm list.\r\n\r\nNonetheless, +1."}}