-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Release Checklist
Lincoln Stein edited this page Aug 30, 2023
·
19 revisions
- Make a developer call-out for PRs to merge. Merge and test.
- Build the front end with
cd invokeai/frontend/web; yarn vite build
- Add and commit any new
.js
files that were created by yarn buid. - Run "black"
- Run "pytest tests"
- Create a release branch and create a pull request for it against
main
.- This is not strictly necessary, but I have found that during the pre-release testing process multiple small bugs are uncovered. Having an unprotected branch available to push changes to allows you to iterate more rapidly. Otherwise all individual changes will need to go through the PR review and testing process.
- Edit the file
invokeai/version/invokeai_version.py
to bring the InvokeAI version up to the desired release number. I refer to https://peps.python.org/pep-0440/ for the accepted formats - Enter the directory
installer
- Deactivate any active virtual environment (the next step will complain if you don't)
- Run
create_installer.sh
from within its directory. It does four things:- It asks you whether you wish to tag the current with the release number.
- If you agree, it will commit any uncommitted changes, tag with the semantic tag
vX.X.X
(based on_version.py
), and also add the tagv3.0-latest
. The latter is hard-coded in the script, and is designed for updates. If you callcreate_installer.sh
a second time after making further changes without changing the version tag, the tag will be moved to HEAD, so be aware.
- If you agree, it will commit any uncommitted changes, tag with the semantic tag
- It builds a wheel of the entire InvokeAI distribution
- It packs the wheel up into a zip file named
InvokeAI-installer-<version>.zip
- It asks you whether you wish to tag the current with the release number.
- Test the zip file
- Unzip it to a temporary directory
- Run its
install.sh
script - Do basic checking that root directory is created, starter models are installed, and then web server starts up and can generate images.
- If you are happy with what
create_installer.sh
did, dopush origin
andpush origin --tags
. The script does not push for you. - Go to the InvokeAI Releases Page and push the Draft New Release button.
- You will be prompted to select or create a tag for the release. Select the one chosen in step (2).
- Write the release notes. There is a GitHub button labeled Generate release notes that will automatically insert the changelog and new contributors. I use this to generate the bottom half of the release notes, and the tried and true method of cutting and pasting from the previous release notes to write the intro.
- Upload the zip file created in step 4 into the Assets section of the release notes. I also like to upload them into the body of the release notes, since it can be hard for users to find the Assets section.
- Check the Set as a pre-release and _Create discussion item` checkboxes at the bottom of the release page, and Save.
- Announce the pre-release in Discussion and Discord.
When a change has been made to the release branch, bump up the version number in _version.py
and repeat steps 4-9. Generally you only need to upload the new versions of the zip file and let the users know that a change has been made. Use the popup menu on the upper left of the release page to update the pre-release to the new version-patchlevel tag.
Iterate this process until you are ready to finalize the release.
Approve the release branch's PR and merge into main
. Now, working in the main
branch:
- Run
create_installer.sh
to do the final tagging and zip file generation. - Open the pre-release page in edit mode and upload the final zip files.
- Uncheck _Set as pre-release
and check
Set as the latest release`. - Save, and the release is done!
- Create a Discussion announcement
- Announce on Discord and Reddit
- Produce and release a YouTube video, if appropriate.
- On the
main
branch, bump up the version number to X.Y.Za1 to indicate that this is now an alpha release. If you don't do this, then people who try to update tomain
will not get the most recent version because of pip's version checking logic.