1## Checklist for making a release:
2
3### Requirements
4 - [ ] Lauchpad (Ubuntu One) account
5 - [ ] gnupg key (has to be version 1, gpg2 won't work) for `your-name@ethereum.org` created and uploaded
6 - [ ] Readthedocs account, access to the Solidity project
7 - [ ] Write access to https://github.com/ethereum/homebrew-ethereum
8
9### Documentation check
10 - [ ] Run `make linkcheck` from within `docs/` and fix any broken links it finds. Ignore false positives caused by `href` anchors and dummy links not meant to work.
11
12### Blog Post
13 - [ ] Create a post on https://github.com/ethereum/solidity-blog and explain some of the new features or concepts.
14
15### Changelog
16 - [ ] Sort the changelog entries alphabetically and correct any errors you notice.
17 - [ ] Create a commit on a new branch that updates the ``Changelog`` to include a release date.
18 - [ ] Run ``./scripts/tests.sh`` to update the bug list.
19 - [ ] Create a pull request and wait for the tests, merge it.
20
21### Create the Release
22 - [ ] Create Github release page: https://github.com/ethereum/solidity/releases/new
23 - [ ] On the release page, select the ``develop`` branch as new target and set tag to the new version (e.g. `v0.8.5`) (make sure you only `SAVE DRAFT` instead of `PUBLISH RELEASE` before the actual release)
24 - [ ] Thank voluntary contributors in the Github release page (use ``git shortlog -s -n -e v0.5.3..origin/develop``).
25 - [ ] Check that all tests on the latest commit in ``develop`` are green.
26 - [ ] Click the `PUBLISH RELEASE` button on the release page, creating the tag.
27 - [ ] Wait for the CI runs on the tag itself.
28
29### Download Binaries
30 - [ ] Take the ``solc.exe`` binary from the ``b_win_release`` run of the released commit in circle-ci and add it to the release page as ``solc-windows.exe``.
31 - [ ] Take the ``solc`` binary from the ``b_osx`` run of the released commit in circle-ci and add it to the release page as ``solc-macos``.
32 - [ ] Take the ``solc`` binary from the ``b_ubu_static`` run of the released commit in circle-ci and add it to the release page as ``solc-static-linux``.
33 - [ ] Take the ``soljson.js`` binary from the ``b_ems`` run of the released commit in circle-ci and add it to the release page as ``soljson.js``.
34
35### Update [solc-bin](https://github.com/ethereum/solc-bin/)
36 - [ ] Copy files to solc-bin:
37     ```bash
38     VERSION=0.8.4
39     COMMIT="c7e474f2"
40     SOLC_BIN="/home/me/solc-bin"
41     chmod +x solc-static-linux solc-macos
42     cp soljson.js $SOLC_BIN/bin/soljson-v$VERSION+commit.$COMMIT.js
43     cp solc-static-linux $SOLC_BIN/linux-amd64/solc-linux-amd64-v$VERSION+commit.$COMMIT
44     cp solc-macos $SOLC_BIN/macosx-amd64/solc-macosx-amd64-v$VERSION+commit.$COMMIT
45     cp solc-windows.exe $SOLC_BIN/windows-amd64/solc-windows-amd64-v$VERSION+commit.$COMMIT.exe
46 - [ ] Run ``./update --reuse-hashes`` in ``solc-bin`` and verify that the script has updated ``list.js``, ``list.txt`` and ``list.json`` files correctly and that symlinks to the new release have been added in ``solc-bin/wasm/`` and ``solc-bin/emscripten-wasm32/``.
47 - [ ] Create a pull request and merge.
48
49### Homebrew and MacOS
50 - [ ] Update the version and the hash (``sha256sum solidity_$VERSION.tar.gz``) in https://github.com/Homebrew/homebrew-core/blob/master/Formula/solidity.rb
51 - [ ] Update the version and the hash (``sha256sum solidity_$VERSION.tar.gz``) in https://github.com/ethereum/homebrew-ethereum/blob/master/solidity.rb
52
53### Docker
54 - [ ] Run ``./scripts/docker_deploy_manual.sh v$VERSION``).
55
56### PPA
57 - [ ] Change ``scripts/release_ppa.sh`` to match your key's email and key id.
58 - [ ] Run ``scripts/release_ppa.sh v$VERSION`` to create the PPA release (you need the relevant openssl key).
59 - [ ] Wait for the ``~ethereum/ubuntu/ethereum-static`` PPA build to be finished and published for *all platforms*. SERIOUSLY: DO NOT PROCEED EARLIER!!! *After* the static builds are *published*, copy the static package to the ``~ethereum/ubuntu/ethereum`` PPA for the destination series ``Trusty``, ``Xenial`` and ``Bionic`` while selecting ``Copy existing binaries``.
60
61### Documentation
62 - [ ] Build the new version on https://readthedocs.org/projects/solidity/ (select `latest` at the bottom of the page and click `BUILD`).
63 - [ ] In the admin panel, select `Versions` in the menu and set the default version to the released one.
64
65### Release solc-js
66 - [ ] Wait until solc-bin was properly deployed. You can test this via remix - a test run through remix is advisable anyway.
67 - [ ] Increment the version number, create a pull request for that, merge it after tests succeeded.
68 - [ ] Run ``node verifyVersion.js && npm publish`` in the updated ``solc-js`` repository.
69 - [ ] Create a tag using ``git tag --annotate v$VERSION`` and push it with ``git push --tags``.
70
71### Post-release
72 - [ ] Publish the blog post.
73 - [ ] Create a commit to increase the version number on ``develop`` in ``CMakeLists.txt`` and add a new skeleton changelog entry.
74 - [ ] Announce on Twitter, including links to the release and the blog post.
75 - [ ] Share announcement on Reddit and Solidity forum.
76 - [ ] Update the release information section on [soliditylang.org](https://github.com/ethereum/solidity-portal).
77 - [ ] Lean back, wait for bug reports and repeat from step 1 :)
78