- GitHub account with access to solidity, solc-js, solc-bin, solidity-website.
- DockerHub account with push rights to the
solcimage. - Launchpad (Ubuntu One) account with a membership in the "Ethereum" team and
a gnupg key for your email in the
ethereum.orgdomain (has to be version 1, gpg2 won't work). - Ubuntu/Debian dependencies of the Docker script:
docker-buildx. - Ubuntu/Debian dependencies of the PPA scripts:
devscripts,debhelper,dput,git,wget,ca-certificates. - npm Registry account added as a collaborator for the
solcpackage. - Access to the solidity_lang Twitter account.
- Reddit account that is at least 10 days old with a minimum of 20 comment karma (
/r/ethereumrequirements).
At least a day before the release:
- Run
make linkcheckfrom withindocs/and fix any broken links it finds. Ignore false positives caused byhrefanchors and dummy links not meant to work. Note: In order to run the link check, make sure you've built the docs first viadocs.sh. - Double-check that the most recent docs builds at readthedocs succeeded.
- Make sure that all merged PRs that should have changelog entries do have them.
- Rerun CI on the top commits of main branches in all repositories that do not have daily activity by creating a test branch or PR:
-
solc-js -
solc-bin(make sure the bytecode comparison check did run)
-
- (Optional) Create a prerelease in our Ubuntu PPA by following the steps in the PPA section below on
developrather than on a tag. This is recommended especially when dealing with PPA for the first time, when we add a new Ubuntu version or when the PPA scripts were modified in this release cycle. - Verify that the release tarball of
solc-jsworks. Bump version locally, addsoljson.jsfrom CI, build it, compare the file structure with the previous version, install it locally and try to use it. - Review Learning from Past Releases to make sure you don't repeat the same mistakes.
At least a day before the release:
- Create a draft PR to sort the changelog.
- Create draft PRs to bump version in
solidityandsolc-js. Note: Thesolc-jsPR won't pass CI checks yet because it depends on the soljson binary fromsolc-bin. - Create a draft of the release on github.
- Create a draft PR to update soliditylang.org.
- Create drafts of blog posts.
- Prepare drafts of Twitter, Reddit and Solidity Forum announcements.
- Create a post on solidity-website in the
Releasescategory and explain some of the new features or concepts. - Create a post on solidity-website in the
Security Alertscategory in case of important bug(s). - Get the posts reviewed and approved before the release starts.
- Sort the changelog entries alphabetically and correct any errors you notice. Commit it.
- Update the changelog to include a release date.
- Run
scripts/update_bugs_by_version.pyto regeneratebugs_by_version.jsonfrom the changelog andbugs.json. Make sure that the resultingbugs_by_version.jsonhas a new, empty entry for the new version. - Commit changes, create a pull request and wait for the tests. Then merge it.
- Copy the changelog into the release blog post.
- Create a release on GitHub.
Set the target to the
developbranch and the tag to the new version, e.g.v0.8.5. Include the following warning:**The release is still in progress. You may see broken links and binaries may not yet be available from all sources.**. Do not publish it yet - click theSave draftbutton instead. - Thank voluntary contributors in the GitHub release notes.
Use
scripts/list_contributors.sh v<previous version>to get initial list of names. Remove different variants of the same name manually before using the output. - Check that all tests on the latest commit on
developare green. - Click the
Publish releasebutton on the release page, creating the tag. Important: Must not be done before all the PRs, including changelog cleanup and date, are merged. - Wait for the CI runs on the tag itself.
- Take the source tarball (
solidity_x.x.x.tar.gz) fromc_source_tarballrun of the tagged commit on Circle CI and upload it to the release page. - Take the
github-binaries.tartarball fromc_release_binariesrun of the tagged commit on Circle CI and add all binaries from it to the release page. Make sure it contains five binaries:solc-windows.exe,solc-macos,solc-static-linux,solc-static-linux-arm, andsoljson.js. - Take the
solc-bin-binaries.tartarball fromc_release_binariesrun of the tagged commit on Circle CI and add all binaries from it to solc-bin. - Run
npm installif you've got a clean checkout of the solc-bin repo. - Run
npm run update -- --reuse-hashesinsolc-binand verify that the script has updatedlist.js,list.txtandlist.jsonfiles correctly and that symlinks to the new release have been added insolc-bin/wasm/andsolc-bin/emscripten-wasm32/. - Create a pull request in solc-bin and merge.
- Update the version and the hash (
sha256sum solidity_$VERSION.tar.gz) in thesolidityformula in Homebrew core repository.
- Make sure
docker-buildxis installed. - Run
./scripts/docker_deploy_manual.sh v$VERSION.
- Create
.release_ppa_authat the root of your local Solidity checkout and setLAUNCHPAD_EMAILandLAUNCHPAD_KEYIDto your key's email and key id. - Double-check that the
DISTRIBUTIONSlist inscripts/release_ppa.shcontains the most recent versions of Ubuntu. - Run
scripts/release_ppa.sh v$VERSIONto create the PPA release. This will create a single package containing static binary for older Ubuntu versions in the~ethereum/ethereum-staticPPA and separate packages with dynamically-linked binaries for recent versions (those listed inDISTRIBUTIONS) in the~ethereum/ethereumPPA. - Wait for the build to be finished and published for all architectures (currently we only build for
amd64, but we may addarmin the future). SERIOUSLY: DO NOT PROCEED EARLIER!!! - After the package with the static build is published, use it to create packages for older Ubuntu versions.
Copy the static package to the
~ethereum/ethereumPPA for the destination seriesTrusty,Xenial,Bionic, andFocalwhile selectingCopy existing binaries.
- Wait until solc-bin was properly deployed. You can test this via remix - a test run through remix is advisable anyway.
- Increment the version number, create a pull request for that, merge it after tests succeeded.
- Create a tag using
git tag --annotate v$VERSIONand push it withgit push --tags. - Wait for the CI runs on the tag itself.
- Take the
solc-x.y.z.tgzartifact frombuild-packagerun on the tagged commit on Circle CI. Inspect the tarball to ensure that it contains an up-to-date compiler binary (soljson.js). - Run
npm publish solc-x.y.z.tgzto publish the newly created tarball.
- Make sure the documentation for the new release has been published successfully. Go to the documentation status page at ReadTheDocs and verify that the new version is listed, works and is marked as default.
- Remove "still in progress" warning from the release notes.
- Merge the blog posts related to the release.
- Create a commit to increase the version number on
developinCMakeLists.txtand add a new skeleton changelog entry. - Update the release information section in the source of soliditylang.org.
- Announce on Twitter, including links to the release and the blog post.
- Announce on Fosstodon, including links to the release and the blog post.
- Share the announcement on Reddit in
/r/ethdev, cross-posted to/r/ethereum. - Share the announcement on the Solidity forum in the
Announcementscategory. - Share the announcement on
#soliditychannel on Matrix. - Share the announcement on
#solc-tooling. - If anything went wrong this time, mention it in Learning from Past Releases.
- Bump vendored dependencies.
- Lean back, wait for bug reports and repeat from step 1 :).
- Check that all tests on the latest commit on
developorbreakingbranch (whichever was chosen for the prerelease) are green. - Create a release on GitHub.
- Set the target to the
developorbreakingbranch and the tag to the new version with a prerelease suffix, e.g.v0.8.5-pre.6. Version matches the next release (develop) or the next breaking release (breaking). The prerelease number in the suffix is 1-based, sequential, resets after a full release and is counted separately fordevelopandbreaking. - Include the following warning:
**The release is still in progress. You may see broken links and binaries may not yet be available from all sources.**. - Include the current, incomplete changelog.
- Check the
Set as a pre-releasebox. - Click the
Publish releasebutton on the release page, creating the tag.
- Set the target to the
- Wait for the CI runs on the tag itself.
- Take the source tarball (
solidity_x.x.x-pre.N.tar.gz) fromc_source_tarballrun of the tagged commit on Circle CI and upload it to the release page. - Take the
github-binaries.tartarball fromc_release_binariesrun of the tagged commit on Circle CI and add all binaries from it to the release page. Make sure it contains five binaries:solc-windows.exe,solc-macos,solc-static-linux,solc-static-linux-armandsoljson.js. - Take the
solc-bin-binaries.tartarball fromc_release_binariesrun of the tagged commit on Circle CI and add all binaries from it to solc-bin. - Run
npm installif you've got a clean checkout of the solc-bin repo. - Run
npm run update -- --reuse-hashesinsolc-binand verify that the script has updatedlist.js,list.txtandlist.jsonfiles correctly and that symlinks to the new release have been added insolc-bin/wasm/andsolc-bin/emscripten-wasm32/. - Create a pull request in solc-bin and merge.
- Remove "still in progress" warning from the release notes.
- Mention it on Twitter.
- Mention it on Fosstodon.
- Mention it on
#soliditychannel on Matrix. - Mention it on
#solc-tooling. - If anything went wrong this time, mention it in Learning from Past Releases.
- Lean back, wait for bug reports and repeat from step 1 :).