Skip to content

Release Checklist

Lincoln Stein edited this page Aug 30, 2023 · 19 revisions

Steps for making a release

Initial Steps

  1. Make a developer call-out for PRs to merge. Merge and test.
  2. Build the front end with cd invokeai/frontend/web; yarn vite build
  3. Add and commit any new .js files that were created by yarn buid.
  4. Run "black"
  5. Run "pytest tests"

Prepare release branch

  1. 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.
  2. 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
  3. Enter the directory installer
  4. Deactivate any active virtual environment (the next step will complain if you don't)
  5. 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 tag v3.0-latest. The latter is hard-coded in the script, and is designed for updates. If you call create_installer.sh a second time after making further changes without changing the version tag, the tag will be moved to HEAD, so be aware.
    • It builds a wheel of the entire InvokeAI distribution
    • It packs the wheel up into a zip file named InvokeAI-installer-<version>.zip
  6. 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.

Upload Release (candidate) to GitHub

  1. If you are happy with what create_installer.sh did, do push origin and push origin --tags. The script does not push for you.
  2. Go to the InvokeAI Releases Page and push the Draft New Release button.
  3. You will be prompted to select or create a tag for the release. Select the one chosen in step (2).
  4. 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.
  5. 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.
  6. Check the Set as a pre-release and _Create discussion item` checkboxes at the bottom of the release page, and Save.
  7. Announce the pre-release in Discussion and Discord.

Revisions

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.

Final Release

Approve the release branch's PR and merge into main. Now, working in the main branch:

  1. Run create_installer.sh to do the final tagging and zip file generation.
  2. Open the pre-release page in edit mode and upload the final zip files.
  3. Uncheck _Set as pre-releaseand checkSet as the latest release`.
  4. Save, and the release is done!

Publicity

  1. Create a Discussion announcement
  2. Announce on Discord and Reddit
  3. Produce and release a YouTube video, if appropriate.

Post Release Step (new!)

  1. 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 to main will not get the most recent version because of pip's version checking logic.
Clone this wiki locally