{"action":"created","comment":{"url":"https://api.github.com/repos/coreos/rkt/pulls/comments/29084295","id":29084295,"diff_hunk":"@@ -0,0 +1,58 @@\n+# rkt release guide\n+\n+How to perform a release of rkt.\n+This guide is probably unnecessarily verbose, so improvements welcomed.\n+Only parts of the procedure are automated; this is somewhat intentional (manual steps for sanity checking) but it can probably be further scripted, please help.\n+\n+The following example assumes we're going from version 0.1.1 (`v0.1.1`) to 0.1.2 (`v0.1.2`).\n+\n+Let's get started:\n+\n+- Start at the relevant milestone on GitHub (e.g. https://github.com/coreos/rkt/milestones/v0.1.2): ensure all referenced issues are closed (or moved elsewhere, if they're not done). Close the milestone.\n+- Branch from the latest master, make sure your git status is clean\n+- Ensure the build is clean! `./build` should work, `./test` should pass, functional + integration tests on CI should be green\n+\n+The rkt version is [hardcoded in the repository](https://github.com/coreos/rkt/blob/master/version/version.go#L17), so the first thing to do is bump it:\n+- Run `scripts/bump-release v0.1.2`. This should generate two commits: a bump to the actual release (e.g. v0.1.2), and then a bump to the release+git (e.g. v0.1.2+git). The actual release version should only exist in a single commit!\n+- Sanity check what the script did with `git diff HEAD^^` or similar. As well as changing the actual version, it also attempts to fix a bunch of references in the documentation etc.\n+- If the script didn't work, yell at the author and/or fix it. It can almost certainly be improved.\n+- File a PR and get a review from another [MAINTAINER](https://github.com/coreos/rkt/blob/master/MAINTAINERS). This is useful to a) sanity check the diff, and b) be very explicit/public that a release is happening\n+- Ensure the CI on the release PR is green!\n+\n+After merging and going back to master branch, we check out the release version and tag it:\n+- `git checkout HEAD^` should work (or `git checkout HEAD^2~`? git how does it work); sanity check version/version.go after doing this\n+- Build the release with `./build`; we'll use this in a minute. Sanity check `bin/rkt version`\n+- Add a signed tag: `git tag -s v0.1.2`. **With release notes**. Try to capture most of the salient changes since the last release, but don't go into unnecessary detail (better to link/reference the documentation wherever possible). Use the previous tags as examples to follow: try `git tag -n100`\n+- Push the tag to GitHub: `git push --tags`\n+\n+Now we switch to the GitHub web UI to conduct the release:\n+- https://github.com/coreos/rkt/releases/new\n+- Tag \"v0.1.2\", release title \"v0.1.2\"\n+- For now, check \"This is a pre-release\"\n+- Copy-paste the release notes from the tag (easiest way to find them again is `git tag -n100`. There's probably a better way to do this). \n+- You can also add a little more detail and polish to the release notes here if you wish, as it is more targeted towards users (vs the tag release notes being for developers); use your best judgement and see previous tags/releases on GH for examples.\n+- Attach the release. This is a simple tarball:\n+\n+```\n+\texport NAME=\"rkt-v0.1.2\"\n+\tmkdir $NAME \n+\tcp bin/rkt bin/stage1.aci $NAME/ \n+\ttar czvf $NAME.tar.gz $NAME/\n+```\n+\n+- Attach the release signature; your personal GPG is okay for now:\n+\n+```\n+\tgpg --detach-sign $NAME.tar.gz\n+```\n+\n+- Publish the release!\n+\n+Now it's announcement time: send an email to rkt-dev@googlegroups.com describing the release. \n+Generally this is higher level overview outlining some of the major features, not a copy-paste of the release notes. \n+Use your discretion and see [previous release emails](https://groups.google.com/forum/#!forum/rkt-dev) for examples.\n+Make sure to include a list of authors that contributed since the previous release - something like the following might be handy:\n+\n+```\n+\tgit log ...v0.1.1 --pretty=format:\"%an\" | sort | uniq | tr '\\n' ',' | sed -e 's#,#, #g' -e 's#, $##\n+```","path":"Documentation/devel/release.md","position":58,"original_position":58,"commit_id":"6ba6e6e6b084c9d2c255088fec238dba7e70326c","original_commit_id":"6ba6e6e6b084c9d2c255088fec238dba7e70326c","user":{"login":"alban","id":27575,"avatar_url":"https://avatars.githubusercontent.com/u/27575?v=3","gravatar_id":"","url":"https://api.github.com/users/alban","html_url":"https://github.com/alban","followers_url":"https://api.github.com/users/alban/followers","following_url":"https://api.github.com/users/alban/following{/other_user}","gists_url":"https://api.github.com/users/alban/gists{/gist_id}","starred_url":"https://api.github.com/users/alban/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alban/subscriptions","organizations_url":"https://api.github.com/users/alban/orgs","repos_url":"https://api.github.com/users/alban/repos","events_url":"https://api.github.com/users/alban/events{/privacy}","received_events_url":"https://api.github.com/users/alban/received_events","type":"User","site_admin":false},"body":"Suggested task to do after the release is done and published:\r\n\r\n- Update the [roadmap](https://github.com/coreos/rkt/blob/master/ROADMAP.md) so it only refers to future releases.","created_at":"2015-04-24T20:46:36Z","updated_at":"2015-04-24T20:46:36Z","html_url":"https://github.com/coreos/rkt/pull/813#discussion_r29084295","pull_request_url":"https://api.github.com/repos/coreos/rkt/pulls/813","_links":{"self":{"href":"https://api.github.com/repos/coreos/rkt/pulls/comments/29084295"},"html":{"href":"https://github.com/coreos/rkt/pull/813#discussion_r29084295"},"pull_request":{"href":"https://api.github.com/repos/coreos/rkt/pulls/813"}}},"pull_request":{"url":"https://api.github.com/repos/coreos/rkt/pulls/813","id":33986104,"html_url":"https://github.com/coreos/rkt/pull/813","diff_url":"https://github.com/coreos/rkt/pull/813.diff","patch_url":"https://github.com/coreos/rkt/pull/813.patch","issue_url":"https://api.github.com/repos/coreos/rkt/issues/813","number":813,"state":"open","locked":false,"title":"*: add release process doc and bump-release script","user":{"login":"jonboulle","id":2601015,"avatar_url":"https://avatars.githubusercontent.com/u/2601015?v=3","gravatar_id":"","url":"https://api.github.com/users/jonboulle","html_url":"https://github.com/jonboulle","followers_url":"https://api.github.com/users/jonboulle/followers","following_url":"https://api.github.com/users/jonboulle/following{/other_user}","gists_url":"https://api.github.com/users/jonboulle/gists{/gist_id}","starred_url":"https://api.github.com/users/jonboulle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonboulle/subscriptions","organizations_url":"https://api.github.com/users/jonboulle/orgs","repos_url":"https://api.github.com/users/jonboulle/repos","events_url":"https://api.github.com/users/jonboulle/events{/privacy}","received_events_url":"https://api.github.com/users/jonboulle/received_events","type":"User","site_admin":false},"body":null,"created_at":"2015-04-23T19:03:45Z","updated_at":"2015-04-24T20:46:36Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0bceb1d2ca85bf8f8427b9c7e3fd7df41ada2040","assignee":null,"milestone":{"url":"https://api.github.com/repos/coreos/rkt/milestones/11","html_url":"https://github.com/coreos/rkt/milestones/v0.6.0","labels_url":"https://api.github.com/repos/coreos/rkt/milestones/11/labels","id":1037040,"number":11,"title":"v0.6.0","description":"","creator":{"login":"philips","id":33544,"avatar_url":"https://avatars.githubusercontent.com/u/33544?v=3","gravatar_id":"","url":"https://api.github.com/users/philips","html_url":"https://github.com/philips","followers_url":"https://api.github.com/users/philips/followers","following_url":"https://api.github.com/users/philips/following{/other_user}","gists_url":"https://api.github.com/users/philips/gists{/gist_id}","starred_url":"https://api.github.com/users/philips/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/philips/subscriptions","organizations_url":"https://api.github.com/users/philips/orgs","repos_url":"https://api.github.com/users/philips/repos","events_url":"https://api.github.com/users/philips/events{/privacy}","received_events_url":"https://api.github.com/users/philips/received_events","type":"User","site_admin":false},"open_issues":16,"closed_issues":16,"state":"open","created_at":"2015-03-24T19:40:37Z","updated_at":"2015-04-24T19:21:48Z","due_on":"2015-04-28T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/coreos/rkt/pulls/813/commits","review_comments_url":"https://api.github.com/repos/coreos/rkt/pulls/813/comments","review_comment_url":"https://api.github.com/repos/coreos/rkt/pulls/comments{/number}","comments_url":"https://api.github.com/repos/coreos/rkt/issues/813/comments","statuses_url":"https://api.github.com/repos/coreos/rkt/statuses/6ba6e6e6b084c9d2c255088fec238dba7e70326c","head":{"label":"jonboulle:rel","ref":"rel","sha":"6ba6e6e6b084c9d2c255088fec238dba7e70326c","user":{"login":"jonboulle","id":2601015,"avatar_url":"https://avatars.githubusercontent.com/u/2601015?v=3","gravatar_id":"","url":"https://api.github.com/users/jonboulle","html_url":"https://github.com/jonboulle","followers_url":"https://api.github.com/users/jonboulle/followers","following_url":"https://api.github.com/users/jonboulle/following{/other_user}","gists_url":"https://api.github.com/users/jonboulle/gists{/gist_id}","starred_url":"https://api.github.com/users/jonboulle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonboulle/subscriptions","organizations_url":"https://api.github.com/users/jonboulle/orgs","repos_url":"https://api.github.com/users/jonboulle/repos","events_url":"https://api.github.com/users/jonboulle/events{/privacy}","received_events_url":"https://api.github.com/users/jonboulle/received_events","type":"User","site_admin":false},"repo":{"id":27398988,"name":"rkt","full_name":"jonboulle/rkt","owner":{"login":"jonboulle","id":2601015,"avatar_url":"https://avatars.githubusercontent.com/u/2601015?v=3","gravatar_id":"","url":"https://api.github.com/users/jonboulle","html_url":"https://github.com/jonboulle","followers_url":"https://api.github.com/users/jonboulle/followers","following_url":"https://api.github.com/users/jonboulle/following{/other_user}","gists_url":"https://api.github.com/users/jonboulle/gists{/gist_id}","starred_url":"https://api.github.com/users/jonboulle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonboulle/subscriptions","organizations_url":"https://api.github.com/users/jonboulle/orgs","repos_url":"https://api.github.com/users/jonboulle/repos","events_url":"https://api.github.com/users/jonboulle/events{/privacy}","received_events_url":"https://api.github.com/users/jonboulle/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jonboulle/rkt","description":"App Container runtime","fork":true,"url":"https://api.github.com/repos/jonboulle/rkt","forks_url":"https://api.github.com/repos/jonboulle/rkt/forks","keys_url":"https://api.github.com/repos/jonboulle/rkt/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jonboulle/rkt/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jonboulle/rkt/teams","hooks_url":"https://api.github.com/repos/jonboulle/rkt/hooks","issue_events_url":"https://api.github.com/repos/jonboulle/rkt/issues/events{/number}","events_url":"https://api.github.com/repos/jonboulle/rkt/events","assignees_url":"https://api.github.com/repos/jonboulle/rkt/assignees{/user}","branches_url":"https://api.github.com/repos/jonboulle/rkt/branches{/branch}","tags_url":"https://api.github.com/repos/jonboulle/rkt/tags","blobs_url":"https://api.github.com/repos/jonboulle/rkt/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jonboulle/rkt/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jonboulle/rkt/git/refs{/sha}","trees_url":"https://api.github.com/repos/jonboulle/rkt/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jonboulle/rkt/statuses/{sha}","languages_url":"https://api.github.com/repos/jonboulle/rkt/languages","stargazers_url":"https://api.github.com/repos/jonboulle/rkt/stargazers","contributors_url":"https://api.github.com/repos/jonboulle/rkt/contributors","subscribers_url":"https://api.github.com/repos/jonboulle/rkt/subscribers","subscription_url":"https://api.github.com/repos/jonboulle/rkt/subscription","commits_url":"https://api.github.com/repos/jonboulle/rkt/commits{/sha}","git_commits_url":"https://api.github.com/repos/jonboulle/rkt/git/commits{/sha}","comments_url":"https://api.github.com/repos/jonboulle/rkt/comments{/number}","issue_comment_url":"https://api.github.com/repos/jonboulle/rkt/issues/comments{/number}","contents_url":"https://api.github.com/repos/jonboulle/rkt/contents/{+path}","compare_url":"https://api.github.com/repos/jonboulle/rkt/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jonboulle/rkt/merges","archive_url":"https://api.github.com/repos/jonboulle/rkt/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jonboulle/rkt/downloads","issues_url":"https://api.github.com/repos/jonboulle/rkt/issues{/number}","pulls_url":"https://api.github.com/repos/jonboulle/rkt/pulls{/number}","milestones_url":"https://api.github.com/repos/jonboulle/rkt/milestones{/number}","notifications_url":"https://api.github.com/repos/jonboulle/rkt/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jonboulle/rkt/labels{/name}","releases_url":"https://api.github.com/repos/jonboulle/rkt/releases{/id}","created_at":"2014-12-01T20:44:29Z","updated_at":"2015-04-01T22:16:44Z","pushed_at":"2015-04-23T22:40:32Z","git_url":"git://github.com/jonboulle/rkt.git","ssh_url":"git@github.com:jonboulle/rkt.git","clone_url":"https://github.com/jonboulle/rkt.git","svn_url":"https://github.com/jonboulle/rkt","homepage":"","size":5810,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"coreos:master","ref":"master","sha":"7ae3cc5b40ecbe057dc1c643ad4ea6f127467ebb","user":{"login":"coreos","id":3730757,"avatar_url":"https://avatars.githubusercontent.com/u/3730757?v=3","gravatar_id":"","url":"https://api.github.com/users/coreos","html_url":"https://github.com/coreos","followers_url":"https://api.github.com/users/coreos/followers","following_url":"https://api.github.com/users/coreos/following{/other_user}","gists_url":"https://api.github.com/users/coreos/gists{/gist_id}","starred_url":"https://api.github.com/users/coreos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coreos/subscriptions","organizations_url":"https://api.github.com/users/coreos/orgs","repos_url":"https://api.github.com/users/coreos/repos","events_url":"https://api.github.com/users/coreos/events{/privacy}","received_events_url":"https://api.github.com/users/coreos/received_events","type":"Organization","site_admin":false},"repo":{"id":26509369,"name":"rkt","full_name":"coreos/rkt","owner":{"login":"coreos","id":3730757,"avatar_url":"https://avatars.githubusercontent.com/u/3730757?v=3","gravatar_id":"","url":"https://api.github.com/users/coreos","html_url":"https://github.com/coreos","followers_url":"https://api.github.com/users/coreos/followers","following_url":"https://api.github.com/users/coreos/following{/other_user}","gists_url":"https://api.github.com/users/coreos/gists{/gist_id}","starred_url":"https://api.github.com/users/coreos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coreos/subscriptions","organizations_url":"https://api.github.com/users/coreos/orgs","repos_url":"https://api.github.com/users/coreos/repos","events_url":"https://api.github.com/users/coreos/events{/privacy}","received_events_url":"https://api.github.com/users/coreos/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/coreos/rkt","description":"App Container runtime","fork":false,"url":"https://api.github.com/repos/coreos/rkt","forks_url":"https://api.github.com/repos/coreos/rkt/forks","keys_url":"https://api.github.com/repos/coreos/rkt/keys{/key_id}","collaborators_url":"https://api.github.com/repos/coreos/rkt/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/coreos/rkt/teams","hooks_url":"https://api.github.com/repos/coreos/rkt/hooks","issue_events_url":"https://api.github.com/repos/coreos/rkt/issues/events{/number}","events_url":"https://api.github.com/repos/coreos/rkt/events","assignees_url":"https://api.github.com/repos/coreos/rkt/assignees{/user}","branches_url":"https://api.github.com/repos/coreos/rkt/branches{/branch}","tags_url":"https://api.github.com/repos/coreos/rkt/tags","blobs_url":"https://api.github.com/repos/coreos/rkt/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/coreos/rkt/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/coreos/rkt/git/refs{/sha}","trees_url":"https://api.github.com/repos/coreos/rkt/git/trees{/sha}","statuses_url":"https://api.github.com/repos/coreos/rkt/statuses/{sha}","languages_url":"https://api.github.com/repos/coreos/rkt/languages","stargazers_url":"https://api.github.com/repos/coreos/rkt/stargazers","contributors_url":"https://api.github.com/repos/coreos/rkt/contributors","subscribers_url":"https://api.github.com/repos/coreos/rkt/subscribers","subscription_url":"https://api.github.com/repos/coreos/rkt/subscription","commits_url":"https://api.github.com/repos/coreos/rkt/commits{/sha}","git_commits_url":"https://api.github.com/repos/coreos/rkt/git/commits{/sha}","comments_url":"https://api.github.com/repos/coreos/rkt/comments{/number}","issue_comment_url":"https://api.github.com/repos/coreos/rkt/issues/comments{/number}","contents_url":"https://api.github.com/repos/coreos/rkt/contents/{+path}","compare_url":"https://api.github.com/repos/coreos/rkt/compare/{base}...{head}","merges_url":"https://api.github.com/repos/coreos/rkt/merges","archive_url":"https://api.github.com/repos/coreos/rkt/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/coreos/rkt/downloads","issues_url":"https://api.github.com/repos/coreos/rkt/issues{/number}","pulls_url":"https://api.github.com/repos/coreos/rkt/pulls{/number}","milestones_url":"https://api.github.com/repos/coreos/rkt/milestones{/number}","notifications_url":"https://api.github.com/repos/coreos/rkt/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/coreos/rkt/labels{/name}","releases_url":"https://api.github.com/repos/coreos/rkt/releases{/id}","created_at":"2014-11-11T23:13:18Z","updated_at":"2015-04-24T20:00:07Z","pushed_at":"2015-04-24T20:45:30Z","git_url":"git://github.com/coreos/rkt.git","ssh_url":"git@github.com:coreos/rkt.git","clone_url":"https://github.com/coreos/rkt.git","svn_url":"https://github.com/coreos/rkt","homepage":"","size":13131,"stargazers_count":3844,"watchers_count":3844,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":282,"mirror_url":null,"open_issues_count":92,"forks":282,"open_issues":92,"watchers":3844,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/coreos/rkt/pulls/813"},"html":{"href":"https://github.com/coreos/rkt/pull/813"},"issue":{"href":"https://api.github.com/repos/coreos/rkt/issues/813"},"comments":{"href":"https://api.github.com/repos/coreos/rkt/issues/813/comments"},"review_comments":{"href":"https://api.github.com/repos/coreos/rkt/pulls/813/comments"},"review_comment":{"href":"https://api.github.com/repos/coreos/rkt/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/coreos/rkt/pulls/813/commits"},"statuses":{"href":"https://api.github.com/repos/coreos/rkt/statuses/6ba6e6e6b084c9d2c255088fec238dba7e70326c"}}}}