{
  "__type": "IngestedDoc",
  "__tag": 4010,
  "_content": {},
  "_ordered_sections": [],
  "item_file": null,
  "item_line": null,
  "item_type": null,
  "aliases": [],
  "example_section_data": {
    "__type": "Section",
    "__tag": 4015,
    "children": [],
    "title": [],
    "level": 0,
    "target": null
  },
  "see_also": [],
  "signature": null,
  "references": null,
  "qa": "coredev:index",
  "arbitrary": [
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This guide documents the development of IPython itself.  Alternatively, developers of third party tools and libraries that use IPython should see the "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "../development/index",
              "reference": {
                "__type": "LocalRef",
                "__tag": 4022,
                "kind": "docs",
                "path": "coredev:..:development:index"
              },
              "kind": "docs"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "For instructions on how to make a developer install see "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "devinstall",
              "reference": {
                "__type": "LocalRef",
                "__tag": 4022,
                "kind": "docs",
                "path": "install:install"
              },
              "kind": "exists"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Guide for IPython core Developers"
        }
      ],
      "level": 0,
      "target": "core_developer_guide"
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "All pull requests should usually be made against "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "main"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", if a Pull Request need to be backported to an earlier release; then it should be tagged with the correct "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "milestone"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If you tag a pull request with a milestone "
            },
            {
              "__type": "Strong",
              "__tag": 4048,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "before"
                }
              ]
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " merging the pull request, and the base ref is "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "main"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", then our backport bot should automatically create a corresponding pull-request that backport on the correct branch."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If you have write access to the IPython repository you can also just mention the "
            },
            {
              "__type": "Strong",
              "__tag": 4048,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "backport bot"
                }
              ]
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to do the work for you. The bot is evolving so instructions may be different. At the time of this writing you can use      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "@meeseeksdev[bot] backport [to] <branchname>",
          "execution_status": null,
          "out": ""
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The bot will attempt to backport the current pull-request and issue a PR if possible."
            }
          ]
        },
        {
          "__type": "Admonition",
          "__tag": 4056,
          "kind": "note",
          "base_type": "note",
          "children": [
            {
              "__type": "AdmonitionTitle",
              "__tag": 4055,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "note "
                }
              ]
            },
            {
              "__type": "Paragraph",
              "__tag": 4045,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "The "
                },
                {
                  "__type": "InlineCode",
                  "__tag": 4051,
                  "value": "@"
                },
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": " and "
                },
                {
                  "__type": "InlineCode",
                  "__tag": 4051,
                  "value": "[bot]"
                },
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": " when mentioning the bot should be optional and can be omitted."
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If the pull request cannot be automatically backported, the bot should tell you so on the PR and apply a \"Need manual backport\" tag to the origin PR."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Backporting Pull requests"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This document contains the process that is used to create an IPython release."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Building and uploading the package to PyPI is automated: pushing a tag triggers the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "publish.yml"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " GitHub Actions workflow, which builds the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "sdist"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "wheel"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and publishes them to PyPI via trusted publishing. This document serves as a handy reminder and checklist for the release manager for the remaining steps."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "During the release process, you might need the extra following dependencies:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "BulletList",
              "__tag": 4053,
              "ordered": false,
              "start": 1,
              "children": [
                {
                  "__type": "ListItem",
                  "__tag": 4054,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "keyring"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " to access your GitHub authentication tokens"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "ListItem",
                  "__tag": 4054,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "graphviz"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " to generate some graphs in the documentation"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Make sure you have all the required dependencies to run the tests as well."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "You can try to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "source tools/release_helper.sh"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " when releasing via bash, it should guide you through most of the process."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "IPython release process"
        }
      ],
      "level": 1,
      "target": "release_process"
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Set environment variables to document previous release tag, current release milestone, current release version, and git tag."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "These variables may be used later to copy/paste as answers to the script questions instead of typing the appropriate command when the time comes. These variables are not used by the scripts directly; therefore, there is no need to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "export"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " them. The format for bash is as follows, but note that these values are just an example valid only for the 5.0 release; you'll need to update them for the release you are actually making      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "PREV_RELEASE=4.2.1\nMILESTONE=5.0\nVERSION=5.0.0\nBRANCH=main",
          "execution_status": null,
          "out": ""
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "For "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "reproducibility of builds"
                }
              ],
              "url": "https://reproducible-builds.org/specs/source-date-epoch/",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", we recommend setting "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "SOURCE_DATE_EPOCH"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " prior to running the build; record the used value of "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "SOURCE_DATE_EPOCH"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " as it may not be available from build artifact. You should be able to use "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "date +%s"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to get a formatted timestamp      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "SOURCE_DATE_EPOCH=$(date +%s)",
          "execution_status": null,
          "out": ""
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "1. Set Environment variables"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Admonition",
          "__tag": 4056,
          "kind": "note",
          "base_type": "note",
          "children": [
            {
              "__type": "AdmonitionTitle",
              "__tag": 4055,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "note "
                }
              ]
            },
            {
              "__type": "Paragraph",
              "__tag": 4045,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "This step is optional if making a Beta or RC release."
                }
              ]
            }
          ]
        },
        {
          "__type": "Admonition",
          "__tag": 4056,
          "kind": "note",
          "base_type": "note",
          "children": [
            {
              "__type": "AdmonitionTitle",
              "__tag": 4055,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "note "
                }
              ]
            },
            {
              "__type": "Paragraph",
              "__tag": 4045,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "Verify that all closed issues and pull requests have "
                },
                {
                  "__type": "Link",
                  "__tag": 4049,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "appropriate milestones"
                    }
                  ],
                  "url": "https://github.com/ipython/ipython/wiki/Dev:-GitHub-workflow#milestones",
                  "title": ""
                },
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": ". "
                },
                {
                  "__type": "Link",
                  "__tag": 4049,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "This search"
                    }
                  ],
                  "url": "https://github.com/ipython/ipython/issues?q=is%3Aclosed+no%3Amilestone+is%3Aissue",
                  "title": ""
                },
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": " should return no results."
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If a major release:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "BulletList",
              "__tag": 4053,
              "ordered": false,
              "start": 1,
              "children": [
                {
                  "__type": "ListItem",
                  "__tag": 4054,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "merge any pull request notes into what's new            "
                        }
                      ]
                    },
                    {
                      "__type": "Code",
                      "__tag": 4050,
                      "value": "python tools/update_whatsnew.py",
                      "execution_status": null,
                      "out": ""
                    }
                  ]
                },
                {
                  "__type": "ListItem",
                  "__tag": 4054,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "update "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "docs/source/whatsnew/development.rst"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": ", to ensure it covers       the major release features"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "ListItem",
                  "__tag": 4054,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "move the contents of "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "development.rst"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " to "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "versionX.rst"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " where "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "X"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " is       the numerical release version"
                        }
                      ]
                    }
                  ]
                },
                {
                  "__type": "ListItem",
                  "__tag": 4054,
                  "children": [
                    {
                      "__type": "Paragraph",
                      "__tag": 4045,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "You do not need to temporarily remove the first entry called       "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "development"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": ", nor re-add it after the release, it will automatically be       hidden when releasing a stable version of IPython (if "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "_version_extra"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "       in "
                        },
                        {
                          "__type": "InlineCode",
                          "__tag": 4051,
                          "value": "release.py"
                        },
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": " is an empty string)."
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "To find duplicates and update "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": ".mailmap",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", use      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "git log --format=\"%aN <%aE>\" $PREV_RELEASE... | sort -u -f",
          "execution_status": null,
          "out": ""
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If a minor release you might need to do some of the above points manually, and forward port the changes."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "2. Finish release note"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "DefList",
          "__tag": 4033,
          "children": [
            {
              "__type": "DefListItem",
              "__tag": 4037,
              "dt": {
                "__type": "Paragraph",
                "__tag": 4045,
                "children": [
                  {
                    "__type": "Text",
                    "__tag": 4046,
                    "value": "of any file that could be problematic."
                  }
                ]
              },
              "dd": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Remove all non-tracked files with:"
                    }
                  ]
                },
                {
                  "__type": "Code",
                  "__tag": 4050,
                  "value": "git clean -xfdi",
                  "execution_status": null,
                  "out": ""
                },
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "This will ask for confirmation before removing all untracked files. Make    sure the "
                    },
                    {
                      "__type": "InlineCode",
                      "__tag": 4051,
                      "value": "dist/"
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " folder is clean to avoid any stale builds from    previous build attempts."
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "3. Make sure the repository is clean"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Edit "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "IPython/core/release.py"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " to have the current version."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "in particular, update version number and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "_version_extra"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " content in "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "IPython/core/release.py"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Step 5 will validate your changes automatically, but you might still want to make sure the version number matches pep440."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In particular, "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "rc"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "beta"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " are not separated by "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "."
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "sdist"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "bdist"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " will appear as different releases. For example, a valid version number for a release candidate (rc) release is: "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "1.3rc1"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Notice that there is no separator between the '3' and the 'r'. Check the environment variable "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "$VERSION"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " as well."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "You will likely just have to modify/comment/uncomment one of the lines setting "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "_version_extra"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "4. Update the release version number"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Running "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "tools/build_release"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " does all the file checking and building that the automated release will do. This makes test installations, checks that the build procedure runs OK, and tests other steps in the release process."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "build_release"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " script will in particular verify that the version number match PEP 440, in order to avoid surprise at the time of build upload."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "We encourage creating a test build of the docs as well."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "5. Run the "
        },
        {
          "__type": "InlineRole",
          "__tag": 4003,
          "value": "tools/build_release",
          "domain": null,
          "role": null,
          "inventory": null
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": " script"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Commit the changes to release.py      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "git commit -am \"release $VERSION\" -S\ngit push origin $BRANCH",
          "execution_status": null,
          "out": ""
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "(omit the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "-S"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " if you are not signing the package)"
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Create and push the tag      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "git tag -am \"release $VERSION\" \"$VERSION\" -s\ngit push origin $VERSION",
          "execution_status": null,
          "out": ""
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "(omit the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "-s"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " if you are not signing the package)"
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Pushing the tag triggers the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "publish.yml"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " GitHub Actions workflow, which builds the package and publishes it to PyPI."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Update release.py back to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "x.y-dev"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " or "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "x.y-maint"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " commit and push      "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "git commit -am \"back to development\" -S\ngit push origin $BRANCH",
          "execution_status": null,
          "out": ""
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "(omit the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "-S"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " if you are not signing the package)"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "6. Create and push the new tag"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "The announcement should include:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "release highlights"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "a link to the html version of the "
                    },
                    {
                      "__type": "Emphasis",
                      "__tag": 4047,
                      "children": [
                        {
                          "__type": "Text",
                          "__tag": 4046,
                          "value": "What's new"
                        }
                      ]
                    },
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": " section of the documentation"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "a link to upgrade or installation tips (if necessary)"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Post the announcement to the blog."
            }
          ]
        },
        {
          "__type": "Admonition",
          "__tag": 4056,
          "kind": "note",
          "base_type": "note",
          "children": [
            {
              "__type": "AdmonitionTitle",
              "__tag": 4055,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "note "
                }
              ]
            },
            {
              "__type": "Paragraph",
              "__tag": 4045,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "If you are doing a RC or Beta, you can likely skip the next steps."
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "7. Draft a short release announcement"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "These steps will bring milestones up to date:"
            }
          ]
        },
        {
          "__type": "BulletList",
          "__tag": 4053,
          "ordered": false,
          "start": 1,
          "children": [
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "close the just released milestone"
                    }
                  ]
                }
              ]
            },
            {
              "__type": "ListItem",
              "__tag": 4054,
              "children": [
                {
                  "__type": "Paragraph",
                  "__tag": 4045,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "open a new milestone for the next release (x, y+1), if the milestone doesn't   exist already"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "8. Update milestones on GitHub"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Make sure to update readthedocs and set the latest tag as stable, as well as checking that previous release is still building under its own tag."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "9. Update readthedocs"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Follow the instructions on "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "the repository"
                }
              ],
              "url": "https://github.com/conda-forge/ipython-feedstock",
              "title": ""
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "10. Update the Conda-Forge feedstock"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Celebrate the release and please thank the contributors for their work. Great job!"
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "11. Celebrate!"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Out of date documentation is still available and have been kept for archival purposes."
            }
          ]
        },
        {
          "__type": "Admonition",
          "__tag": 4056,
          "kind": "note",
          "base_type": "note",
          "children": [
            {
              "__type": "AdmonitionTitle",
              "__tag": 4055,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "note "
                }
              ]
            },
            {
              "__type": "Paragraph",
              "__tag": 4045,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "Developers documentation used to be on the IPython wiki, but are now out of date. The wiki is though still available for historical reasons: "
                },
                {
                  "__type": "Link",
                  "__tag": 4049,
                  "children": [
                    {
                      "__type": "Text",
                      "__tag": 4046,
                      "value": "Old IPython GitHub Wiki."
                    }
                  ],
                  "url": "https://github.com/ipython/ipython/wiki/Dev:-Index",
                  "title": ""
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Old Documentation"
        }
      ],
      "level": 1,
      "target": null
    }
  ],
  "local_refs": []
}