Release automation
- Dominant language
- C++
- Stars
- 25.7k
- Forks
- 6.2k
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 21
Description
There are multiple things we would like to automate in the release process to reduce the amount of error-prone manual steps on the [release checklist](https://github.com/ethereum/solidity/blob/develop/ReleaseChecklist.md). Here's what we could do:
### Must have
- [ ] **Creating a PR with binaries in solc-bin**.
- Instead of having to manually submit binaries to [solc-bin](https://github.com/ethereum/solc-bin/), we could have `c_release_binaries` (or a new dependent job) run the `update` script and create a PR.
- Preferably this would not involve giving the CI direct access to solc-bin. To achieve that it would be best if we had a workflow in solc-bin that would be triggered when the binaries in the main repo are ready (e.g. via [`workflow_dispatch`](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch)) and that workflow would pull them in.
- [ ] **Publishing binaries on the github release page**.
- `c_release_binaries` could check if a page for the new release exists. If it does, it would upload them.
- It should gracefully handle being restarted - in case we forget to create the page beforehand.
- The releases are editable so this does not need a human in the loop. If something goes wrong we can always manually replace the binaries with correct ones.
- [ ] **Creating PRs to update Homebrew formulas**.
- This should be triggered by the release being published on github.
- [ ] **Release verification script**.
- A script that accepts the version number and ensures that the release is complete (i.e. things are up to date and all relevant artifacts exist and are publicly available):
- Changelog is pointing at the next, unreleased version and has no gaps in version numbers.
- Bug list contains the latest version.
- Tags corresponding to published versions exist.
- Github release has been published and the warning removed.
- Github release page and solc-bin contain binaries and their hashes match the file list in solc-bin.
- Binaries from solc-bin have been successfully mirrored to https://binaries.soliditylang.org and hashes match.
- Github release page contains the source archive.
- Homebrew formulas have been published.
- Docker image has been published.
- PPA packages have been published.
- solc-js has been published.
- solc-js version has been bumped and the release was tagged.
- The documentation has been published.
- Blog posts are published and do not contain broken links.
- Release information at soliditylang.org is up to date.
- (Optional) Report if there's anything that looks like an announcement on Reddit, Twitter and forum. This might require some heuristics and won't be foolproof.
- The script should mainly check if things are published and available. It may check if they work but only in cases where it can't be easily delegated to CI.
- The script should not fail when the release is incomplete. It should report which things are done and which are not.
### Nice to have
- [ ] **Script for updating version and changelog**
- Both scripts commit all changes and create branches. Optionally might also use Github CLI to actually submit a PR. Merging and review of the PR is expected to still be manual.
- Creating a PR that finalizes the current version
- Sorts the changelog and removes empty sections.
- Replaces `(unreleased)` with the current date next to the version at the top of the changelog.
- Updates the bug list.
- Creating a PR that initializes a new version
- Bumps version in `CMakeLists.txt`
- Can take a parameter saying which component to bump: major/minor/patch.
- Creates a new section for the next version in the changelog.
- [ ] **Preparing a source archive and publishing it on the github release page**.
- Only if it's very simple and #9720 is not done by then.
- [ ] **Script for preparing release notes**
- Prints release notes template with filled-out changelog and the list of contributors.
- Optionally, creates a draft release using Github CLI.
- [ ] Is there anything in the solc-js publication process that makes sense to automate?
Contributor guide
Research direction
Start with ReleaseChecklist.md and the existing c_release_binaries job; review the listed release steps and the solc-bin update script before selecting one automation slice. Done means the selected workflow or script handles its stated artifact or check and reports or publishes the result without requiring the corresponding manual checklist step.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cmake, docker, github-actions
- Domain
- build-system, devops, release
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100