From 13bf22cb5dbcdeeaac6e525e48e281138f561a65 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 18:41:54 +0000 Subject: [PATCH 01/15] Add python-releases.toml --- release_engineering/python-releases.toml | 3310 ++++++++++++++++++++++ 1 file changed, 3310 insertions(+) create mode 100644 release_engineering/python-releases.toml diff --git a/release_engineering/python-releases.toml b/release_engineering/python-releases.toml new file mode 100644 index 00000000000..5ac36734ffb --- /dev/null +++ b/release_engineering/python-releases.toml @@ -0,0 +1,3310 @@ +# -- Python 1.6 -------------------------------------------------------------- + +[metadata."1.6"] +pep = 160 +status = "end-of-life" +branch = "" # no branch or tag for 1.6 exists +release-manager = "Fred L. Drake, Jr" +start-of-development = 1999-06-09 +first-release = 2000-09-05 +feature-freeze = 2000-08-03 +end-of-bugfix = 2000-09-05 +end-of-life = 2000-09-05 + +[[release."1.6"]] +stage = "1.6 beta 1" +state = "actual" +date = 2000-08-03 + +[[release."1.6"]] +stage = "1.6 final" +state = "actual" +date = 2000-09-05 + +# -- Python 2.0 -------------------------------------------------------------- + +[metadata."2.0"] +pep = 200 +status = "end-of-life" +branch = "2.0" +release-manager = "Jeremy Hylton" +start-of-development = 2000-06-29 +first-release = 2000-10-16 +feature-freeze = 2000-08-14 +end-of-bugfix = 2001-06-22 +end-of-life = 2001-06-22 + +[[release."2.0"]] +stage = "2.0 beta 1" +state = "actual" +date = 2000-09-05 + +[[release."2.0"]] +stage = "2.0 beta 2" +state = "actual" +date = 2000-09-26 + +[[release."2.0"]] +stage = "2.0 candidate 1" +state = "actual" +date = 2000-10-09 + +[[release."2.0"]] +stage = "2.0 final" +state = "actual" +date = 2000-10-16 + +# 2.0.1 is not in the PEP, but is found on the website at: +# https://www.python.org/downloads/release/python-201/ +# https://www.python.org/ftp/python/2.0.1/ + +[[release."2.0"]] +stage = "2.0.1 candidate 1" +state = "actual" +date = 2001-06-13 + +[[release."2.0"]] +stage = "2.0.1 final" +state = "actual" +date = 2001-06-22 + +# -- Python 2.1 -------------------------------------------------------------- + +[metadata."2.1"] +pep = 226 +status = "end-of-life" +branch = "2.1" +release-manager = "Jeremy Hylton" +start-of-development = 2000-10-16 +first-release = 2001-04-17 +feature-freeze = 2001-03-02 +end-of-bugfix = 2002-04-09 +end-of-life = 2002-04-09 + +[[release."2.1"]] +stage = "2.1 alpha 1" +state = "actual" +date = 2001-01-22 + +[[release."2.1"]] +stage = "2.1 alpha 2" +state = "actual" +date = 2001-02-02 + +[[release."2.1"]] +stage = "2.1 beta 1" +state = "actual" +date = 2001-03-02 + +[[release."2.1"]] +stage = "2.1 beta 2" +state = "actual" +date = 2001-03-23 + +[[release."2.1"]] +stage = "2.1 candidate 1" +state = "actual" +date = 2001-04-13 + +[[release."2.1"]] +stage = "2.1 candidate 2" +state = "actual" +date = 2001-04-15 + +[[release."2.1"]] +stage = "2.1 final" +state = "actual" +date = 2001-04-17 + +# 2.1.{1,2,3} are not in the PEP, but are found on the website at: +# https://www.python.org/downloads/release/python-213/ +# https://www.python.org/ftp/python/2.1.1/ +# https://www.python.org/ftp/python/2.1.2/ +# https://www.python.org/ftp/python/2.1.3/ + +[[release."2.1"]] +stage = "2.1.1 candidate 1" +state = "actual" +date = 2002-07-13 + +[[release."2.1"]] +stage = "2.1.1 final" +state = "actual" +date = 2002-07-20 + +[[release."2.1"]] +stage = "2.1.2 candidate 1" +state = "actual" +date = 2002-01-10 + +[[release."2.1"]] +stage = "2.1.2 final" +state = "actual" +date = 2002-01-15 + +[[release."2.1"]] +stage = "2.1.3 final" +state = "actual" +date = 2002-04-09 + +# -- Python 2.2 -------------------------------------------------------------- + +[metadata."2.2"] +pep = 251 +status = "end-of-life" +branch = "2.2" +release-manager = "Barry Warsaw" +start-of-development = 2001-04-18 +first-release = 2001-12-21 +feature-freeze = 2001-10-19 +end-of-bugfix = 2003-05-30 +end-of-life = 2003-05-30 + +[[release."2.2"]] +stage = "2.2 alpha 1" +state = "actual" +date = 2001-07-18 + +[[release."2.2"]] +stage = "2.2 alpha 2" +state = "actual" +date = 2001-08-22 + +[[release."2.2"]] +stage = "2.2 alpha 3" +state = "actual" +date = 2001-09-07 + +[[release."2.2"]] +stage = "2.2 alpha 4" +state = "actual" +date = 2001-09-28 + +[[release."2.2"]] +stage = "2.2 beta 1" +state = "actual" +date = 2001-10-19 + +[[release."2.2"]] +stage = "2.2 beta 2" +state = "actual" +date = 2001-11-14 + +[[release."2.2"]] +stage = "2.2 candidate 1" +state = "actual" +date = 2001-12-14 + +[[release."2.2"]] +stage = "2.2 final" +state = "actual" +date = 2001-12-21 + +# 2.2.{1,2,3} are not in the PEP, but are found on the website at: +# https://www.python.org/downloads/release/python-221/ +# https://www.python.org/downloads/release/python-222/ +# https://www.python.org/downloads/release/python-223/ +# https://www.python.org/ftp/python/2.2.1/ +# https://www.python.org/ftp/python/2.2.2/ +# https://www.python.org/ftp/python/2.2.3/ + +[[release."2.2"]] +stage = "2.2.1 candidate 1" +state = "actual" +date = 2002-03-18 + +[[release."2.2"]] +stage = "2.2.1 candidate 2" +state = "actual" +date = 2002-03-26 + +[[release."2.2"]] +stage = "2.2.1 final" +state = "actual" +date = 2002-04-10 + +[[release."2.2"]] +stage = "2.2.2 beta 1" +state = "actual" +date = 2002-10-07 + +[[release."2.2"]] +stage = "2.2.2 final" +state = "actual" +date = 2002-10-14 + +[[release."2.2"]] +stage = "2.2.3 candidate 1" +state = "actual" +date = 2003-05-22 + +[[release."2.2"]] +stage = "2.2.3 final" +state = "actual" +date = 2003-05-30 + +# -- Python 2.3 -------------------------------------------------------------- + +[metadata."2.3"] +pep = 283 +status = "end-of-life" +branch = "2.3" +release-manager = "Barry Warsaw, Jeremy Hylton, Tim Peters" +start-of-development = 2001-12-21 +first-release = 2003-06-29 +feature-freeze = 2003-04-25 +end-of-bugfix = 2008-03-11 +end-of-life = 2008-03-11 + +[[release."2.3"]] +stage = "2.3 alpha 1" +state = "actual" +date = 2002-12-31 + +[[release."2.3"]] +stage = "2.3 alpha 2" +state = "actual" +date = 2003-02-19 + +[[release."2.3"]] +stage = "2.3 beta 1" +state = "actual" +date = 2003-04-25 + +[[release."2.3"]] +stage = "2.3 beta 2" +state = "actual" +date = 2003-06-29 + +[[release."2.3"]] +stage = "2.3 candidate 1" +state = "actual" +date = 2003-07-18 + +[[release."2.3"]] +stage = "2.3 candidate 2" +state = "actual" +date = 2003-07-24 + +[[release."2.3"]] +stage = "2.3 final" +state = "actual" +date = 2003-07-29 + +# 2.3.{1,2,3,4,5,6,7} are not in the PEP, but are found on the website at: +# https://www.python.org/downloads/release/python-231/ +# https://www.python.org/downloads/release/python-232/ +# https://www.python.org/downloads/release/python-233/ +# https://www.python.org/downloads/release/python-234/ +# https://www.python.org/downloads/release/python-235/ +# https://www.python.org/downloads/release/python-236/ +# https://www.python.org/downloads/release/python-237/ +# https://www.python.org/ftp/python/2.3.1/ +# https://www.python.org/ftp/python/2.3.2/ +# https://www.python.org/ftp/python/2.3.3/ +# https://www.python.org/ftp/python/2.3.4/ +# https://www.python.org/ftp/python/2.3.5/ +# https://www.python.org/ftp/python/2.3.6/ +# https://www.python.org/ftp/python/2.3.7/ + +[[release."2.3"]] +stage = "2.3.1 candidate 1" +state = "actual" +date = 2003-09-23 + +[[release."2.3"]] +stage = "2.3.1 final" +state = "actual" +date = 2003-09-23 + +[[release."2.3"]] +stage = "2.3.2 candidate 1" +state = "actual" +date = 2003-09-30 + +[[release."2.3"]] +stage = "2.3.2 final" +state = "actual" +date = 2003-10-03 + +[[release."2.3"]] +stage = "2.3.3 candidate 1" +state = "actual" +date = 2003-12-05 + +[[release."2.3"]] +stage = "2.3.3 final" +state = "actual" +date = 2003-12-19 + +[[release."2.3"]] +stage = "2.3.4 candidate 1" +state = "actual" +date = 2004-05-13 + +[[release."2.3"]] +stage = "2.3.4 final" +state = "actual" +date = 2004-05-27 + +[[release."2.3"]] +stage = "2.3.5 candidate 1" +state = "actual" +date = 2004-01-26 + +[[release."2.3"]] +stage = "2.3.5 final" +state = "actual" +date = 2004-02-08 + +[[release."2.3"]] +stage = "2.3.6 candidate 1" +state = "actual" +date = 2006-10-23 + +[[release."2.3"]] +stage = "2.3.6 final" +state = "actual" +date = 2006-11-01 + +[[release."2.3"]] +stage = "2.3.7 candidate 1" +state = "actual" +date = 2008-03-02 + +[[release."2.3"]] +stage = "2.3.7 final" +state = "actual" +date = 2008-03-11 + +# -- Python 2.4 -------------------------------------------------------------- + +[metadata."2.4"] +pep = 320 +status = "end-of-life" +branch = "2.4" +release-manager = "Anthony Baxter" +start-of-development = 2003-07-30 +first-release = 2004-11-30 +feature-freeze = 2004-10-15 +end-of-bugfix = 2008-12-19 +end-of-life = 2008-12-19 + +[[release."2.4"]] +stage = "2.4 alpha 1" +state = "actual" +date = 2004-07-09 + +[[release."2.4"]] +stage = "2.4 alpha 2" +state = "actual" +date = 2004-08-05 + +[[release."2.4"]] +stage = "2.4 alpha 3" +state = "actual" +date = 2004-09-03 + +[[release."2.4"]] +stage = "2.4 beta 1" +state = "actual" +date = 2004-10-15 + +[[release."2.4"]] +stage = "2.4 beta 2" +state = "actual" +date = 2004-11-03 + +[[release."2.4"]] +stage = "2.4 candidate 1" +state = "actual" +date = 2004-11-18 + +[[release."2.4"]] +stage = "2.4 final" +state = "actual" +date = 2004-11-30 + +# 2.4.{1,2,3,4,5,6} are not in the PEP, but are found on the website at: +# https://www.python.org/downloads/release/python-241/ +# https://www.python.org/downloads/release/python-242/ +# https://www.python.org/downloads/release/python-243/ +# https://www.python.org/downloads/release/python-244/ +# https://www.python.org/downloads/release/python-245/ +# https://www.python.org/downloads/release/python-246/ +# https://www.python.org/ftp/python/2.4.1/ +# https://www.python.org/ftp/python/2.4.2/ +# https://www.python.org/ftp/python/2.4.3/ +# https://www.python.org/ftp/python/2.4.4/ +# https://www.python.org/ftp/python/2.4.5/ +# https://www.python.org/ftp/python/2.4.6/ + +[[release."2.4"]] +stage = "2.4.1 candidate 1" +state = "actual" +date = 2005-03-10 + +[[release."2.4"]] +stage = "2.4.1 candidate 2" +state = "actual" +date = 2005-03-17 + +[[release."2.4"]] +stage = "2.4.1 final" +state = "actual" +date = 2005-03-30 + +[[release."2.4"]] +stage = "2.4.2 candidate 1" +state = "actual" +date = 2005-09-20 + +[[release."2.4"]] +stage = "2.4.2 final" +state = "actual" +date = 2005-09-27 + +[[release."2.4"]] +stage = "2.4.3 candidate 1" +state = "actual" +date = 2006-03-23 + +[[release."2.4"]] +stage = "2.4.3 final" +state = "actual" +date = 2006-04-15 + +[[release."2.4"]] +stage = "2.4.4 candidate 1" +state = "actual" +date = 2006-10-11 + +[[release."2.4"]] +stage = "2.4.4 final" +state = "actual" +date = 2006-10-18 + +[[release."2.4"]] +stage = "2.4.5 candidate 1" +state = "actual" +date = 2008-03-02 + +[[release."2.4"]] +stage = "2.4.5 final" +state = "actual" +date = 2008-03-11 + +[[release."2.4"]] +stage = "2.4.6 candidate 1" +state = "actual" +date = 2008-12-13 + +[[release."2.4"]] +stage = "2.4.6 final" +state = "actual" +date = 2008-12-19 + +# -- Python 2.5 -------------------------------------------------------------- + +[metadata."2.5"] +pep = 356 +status = "end-of-life" +branch = "2.5" +release-manager = "Anthony Baxter" +start-of-development = 2004-11-30 +first-release = 2006-09-19 +feature-freeze = 2006-06-20 +end-of-bugfix = 2011-05-26 +end-of-life = 2011-05-26 + +[[release."2.5"]] +stage = "2.5 alpha 1" +state = "actual" +date = 2006-04-05 + +[[release."2.5"]] +stage = "2.5 alpha 2" +state = "actual" +date = 2006-04-27 + +[[release."2.5"]] +stage = "2.5 beta 1" +state = "actual" +date = 2006-06-20 + +[[release."2.5"]] +stage = "2.5 beta 2" +state = "actual" +date = 2006-07-11 + +[[release."2.5"]] +stage = "2.5 beta 3" +state = "actual" +date = 2006-08-03 + +[[release."2.5"]] +stage = "2.5 candidate 1" +state = "actual" +date = 2006-08-17 + +[[release."2.5"]] +stage = "2.5 candidate 2" +state = "actual" +date = 2006-09-12 + +[[release."2.5"]] +stage = "2.5 final" +state = "actual" +date = 2006-09-19 + +# 2.5.{1,2,3,4,5,6} are not in the PEP, but are found on the website at: +# https://www.python.org/downloads/release/python-251/ +# https://www.python.org/downloads/release/python-252/ +# https://www.python.org/downloads/release/python-253/ +# https://www.python.org/downloads/release/python-254/ +# https://www.python.org/downloads/release/python-255/ +# https://www.python.org/downloads/release/python-256/ +# https://www.python.org/ftp/python/2.5.1/ +# https://www.python.org/ftp/python/2.5.2/ +# https://www.python.org/ftp/python/2.5.3/ +# https://www.python.org/ftp/python/2.5.4/ +# https://www.python.org/ftp/python/2.5.5/ +# https://www.python.org/ftp/python/2.5.6/ + +[[release."2.5"]] +stage = "2.5.1 candidate 1" +state = "actual" +date = 2007-04-10 + +[[release."2.5"]] +stage = "2.5.1 final" +state = "actual" +date = 2007-04-19 + +[[release."2.5"]] +stage = "2.5.2 candidate 1" +state = "actual" +date = 2008-02-14 + +[[release."2.5"]] +stage = "2.5.2 final" +state = "actual" +date = 2008-02-21 + +[[release."2.5"]] +stage = "2.5.3 candidate 1" +state = "actual" +date = 2008-12-13 + +[[release."2.5"]] +stage = "2.5.3 final" +state = "actual" +date = 2008-12-19 + +[[release."2.5"]] +stage = "2.5.4 final" +state = "actual" +date = 2008-12-23 + +[[release."2.5"]] +stage = "2.5.5 candidate 1" +state = "actual" +date = 2010-01-14 + +[[release."2.5"]] +stage = "2.5.5 candidate 2" +state = "actual" +date = 2010-01-24 + +[[release."2.5"]] +stage = "2.5.5 final" +state = "actual" +date = 2010-01-31 + +[[release."2.5"]] +stage = "2.5.6 candidate 1" +state = "actual" +date = 2011-04-17 + +[[release."2.5"]] +stage = "2.5.6 final" +state = "actual" +date = 2011-05-26 + +# -- Python 2.6 -------------------------------------------------------------- + +[metadata."2.6"] +pep = 361 +status = "end-of-life" +branch = "2.6" +release-manager = "Barry Warsaw" +start-of-development = 2006-08-18 +first-release = 2008-10-01 +feature-freeze = 2008-06-18 +end-of-bugfix = 2010-08-24 +end-of-life = 2013-10-29 + +[[release."2.6"]] +stage = "2.6 alpha 1" +state = "actual" +date = 2008-02-29 + +[[release."2.6"]] +stage = "2.6 alpha 2" +state = "actual" +date = 2008-04-02 + +[[release."2.6"]] +stage = "2.6 alpha 3" +state = "actual" +date = 2008-05-08 + +[[release."2.6"]] +stage = "2.6 beta 1" +state = "actual" +date = 2008-06-18 + +[[release."2.6"]] +stage = "2.6 beta 2" +state = "actual" +date = 2008-07-17 + +[[release."2.6"]] +stage = "2.6 beta 3" +state = "actual" +date = 2008-08-20 + +[[release."2.6"]] +stage = "2.6 candidate 1" +state = "actual" +date = 2008-09-12 + +[[release."2.6"]] +stage = "2.6 candidate 2" +state = "actual" +date = 2008-09-17 + +[[release."2.6"]] +stage = "2.6 final" +state = "actual" +date = 2008-10-01 + +[[release."2.6"]] +stage = "2.6.1 final" +state = "actual" +date = 2008-12-04 + +[[release."2.6"]] +stage = "2.6.2 candidate 1" +state = "actual" +date = 2009-04-08 + +[[release."2.6"]] +stage = "2.6.2 final" +state = "actual" +date = 2009-04-14 + +[[release."2.6"]] +stage = "2.6.3 candidate 1" +state = "actual" +date = 2009-09-29 + +[[release."2.6"]] +stage = "2.6.3 final" +state = "actual" +date = 2009-10-02 + +[[release."2.6"]] +stage = "2.6.4 candidate 1" +state = "actual" +date = 2009-10-06 + +[[release."2.6"]] +stage = "2.6.4 candidate 2" +state = "actual" +date = 2009-10-18 + +[[release."2.6"]] +stage = "2.6.4 final" +state = "actual" +date = 2009-10-25 + +[[release."2.6"]] +stage = "2.6.5 candidate 1" +state = "actual" +date = 2010-03-01 + +[[release."2.6"]] +stage = "2.6.5 candidate 2" +state = "actual" +date = 2010-03-10 + +[[release."2.6"]] +stage = "2.6.5 final" +state = "actual" +date = 2010-03-19 + +[[release."2.6"]] +stage = "2.6.6 candidate 1" +state = "actual" +date = 2010-08-03 + +[[release."2.6"]] +stage = "2.6.6 candidate 2" +state = "actual" +date = 2010-08-16 + +[[release."2.6"]] +stage = "2.6.6 final" +state = "actual" +date = 2010-08-24 + +[[release."2.6"]] +stage = "2.6.7 candidate 1" +state = "actual" +date = 2011-05-06 + +[[release."2.6"]] +stage = "2.6.7 candidate 2" +state = "actual" +date = 2011-05-21 + +[[release."2.6"]] +stage = "2.6.7 final" +state = "actual" +date = 2011-06-03 + +[[release."2.6"]] +stage = "2.6.8 candidate 1" +state = "actual" +date = 2012-02-23 + +[[release."2.6"]] +stage = "2.6.8 candidate 2" +state = "actual" +date = 2012-03-17 + +[[release."2.6"]] +stage = "2.6.8 final" +state = "actual" +date = 2012-04-10 + +[[release."2.6"]] +stage = "2.6.9 candidate 1" +state = "actual" +date = 2013-10-01 + +[[release."2.6"]] +stage = "2.6.9 final" +state = "actual" +date = 2013-10-29 + +# -- Python 2.7 -------------------------------------------------------------- + +[metadata."2.7"] +pep = 373 +status = "end-of-life" +branch = "2.7" +release-manager = "Benjamin Peterson" +start-of-development = 2008-10-02 +first-release = 2010-07-03 +feature-freeze = 2010-04-03 +end-of-bugfix = 2020-01-01 +end-of-life = 2020-01-01 + +[[release."2.7"]] +stage = "2.7 alpha 1" +state = "actual" +date = 2009-12-05 + +[[release."2.7"]] +stage = "2.7 alpha 2" +state = "actual" +date = 2010-01-09 + +[[release."2.7"]] +stage = "2.7 alpha 3" +state = "actual" +date = 2010-02-06 + +[[release."2.7"]] +stage = "2.7 alpha 4" +state = "actual" +date = 2010-03-06 + +[[release."2.7"]] +stage = "2.7 beta 1" +state = "actual" +date = 2010-04-03 + +[[release."2.7"]] +stage = "2.7 beta 2" +state = "actual" +date = 2010-05-08 + +[[release."2.7"]] +stage = "2.7 candidate 1" +state = "actual" +date = 2010-06-05 + +[[release."2.7"]] +stage = "2.7 candidate 2" +state = "actual" +date = 2010-06-19 + +[[release."2.7"]] +stage = "2.7 final" +state = "actual" +date = 2010-07-03 + +[[release."2.7"]] +stage = "2.7.1 candidate 1" +state = "actual" +date = 2010-11-13 + +[[release."2.7"]] +stage = "2.7.1 final" +state = "actual" +date = 2010-11-27 + +[[release."2.7"]] +stage = "2.7.2 candidate 1" +state = "actual" +date = 2011-05-29 + +[[release."2.7"]] +stage = "2.7.2 final" +state = "actual" +date = 2011-07-21 + +[[release."2.7"]] +stage = "2.7.3 candidate 1" +state = "actual" +date = 2012-02-23 + +[[release."2.7"]] +stage = "2.7.3 candidate 2" +state = "actual" +date = 2012-03-15 + +[[release."2.7"]] +stage = "2.7.3 final" +state = "actual" +date = 2012-03-09 + +[[release."2.7"]] +stage = "2.7.4 candidate 1" +state = "actual" +date = 2013-03-23 + +[[release."2.7"]] +stage = "2.7.4 final" +state = "actual" +date = 2013-04-06 + +[[release."2.7"]] +stage = "2.7.5 final" +state = "actual" +date = 2013-05-12 + +[[release."2.7"]] +stage = "2.7.6 candidate 1" +state = "actual" +date = 2013-10-26 + +[[release."2.7"]] +stage = "2.7.6 final" +state = "actual" +date = 2013-11-10 + +[[release."2.7"]] +stage = "2.7.7 candidate 1" +state = "actual" +date = 2014-05-17 + +[[release."2.7"]] +stage = "2.7.7 final" +state = "actual" +date = 2014-05-31 + +[[release."2.7"]] +stage = "2.7.8 final" +state = "actual" +date = 2014-06-30 + +[[release."2.7"]] +stage = "2.7.9 candidate 1" +state = "actual" +date = 2014-11-26 + +[[release."2.7"]] +stage = "2.7.9 final" +state = "actual" +date = 2014-12-10 + +[[release."2.7"]] +stage = "2.7.10 candidate 1" +state = "actual" +date = 2015-05-09 + +[[release."2.7"]] +stage = "2.7.10 final" +state = "actual" +date = 2015-05-23 + +[[release."2.7"]] +stage = "2.7.11 candidate 1" +state = "actual" +date = 2015-11-21 + +[[release."2.7"]] +stage = "2.7.11 final" +state = "actual" +date = 2015-12-05 + +[[release."2.7"]] +stage = "2.7.12 final" +state = "actual" +date = 2016-06-25 + +[[release."2.7"]] +stage = "2.7.13 candidate 1" +state = "actual" +date = 2016-12-03 + +[[release."2.7"]] +stage = "2.7.13 final" +state = "actual" +date = 2016-12-17 + +[[release."2.7"]] +stage = "2.7.14 candidate 1" +state = "actual" +date = 2017-08-26 + +[[release."2.7"]] +stage = "2.7.14 final" +state = "actual" +date = 2017-09-16 + +[[release."2.7"]] +stage = "2.7.15 candidate 1" +state = "actual" +date = 2018-04-14 + +[[release."2.7"]] +stage = "2.7.15 final" +state = "actual" +date = 2018-05-01 + +[[release."2.7"]] +stage = "2.7.16 candidate 1" +state = "actual" +date = 2019-02-16 + +[[release."2.7"]] +stage = "2.7.16 final" +state = "actual" +date = 2019-03-02 + +[[release."2.7"]] +stage = "2.7.17 candidate 1" +state = "actual" +date = 2019-10-05 + +[[release."2.7"]] +stage = "2.7.17 final" +state = "actual" +date = 2019-10-19 + +[[release."2.7"]] +stage = "2.7.18 candidate 1" +state = "actual" +date = 2020-04-04 + +[[release."2.7"]] +stage = "2.7.18 final" +state = "actual" +date = 2020-04-20 + +# -- Python 3.0 -------------------------------------------------------------- + +[metadata."3.0"] +pep = 361 +status = "end-of-life" +branch = "3.0" +release-manager = "Barry Warsaw" +start-of-development = 2006-03-14 +first-release = 2008-12-03 +feature-freeze = 2008-06-18 +end-of-bugfix = 2009-06-27 +end-of-life = 2009-06-27 + +[[release."3.0"]] +stage = "3.0 alpha 1" +state = "actual" +date = 2007-08-31 + +[[release."3.0"]] +stage = "3.0 alpha 2" +state = "actual" +date = 2007-12-06 + +[[release."3.0"]] +stage = "3.0 alpha 3" +state = "actual" +date = 2008-02-29 + +[[release."3.0"]] +stage = "3.0 alpha 4" +state = "actual" +date = 2008-04-02 + +[[release."3.0"]] +stage = "3.0 alpha 5" +state = "actual" +date = 2008-05-08 + +[[release."3.0"]] +stage = "3.0 beta 1" +state = "actual" +date = 2008-06-18 + +[[release."3.0"]] +stage = "3.0 beta 2" +state = "actual" +date = 2008-07-17 + +[[release."3.0"]] +stage = "3.0 beta 3" +state = "actual" +date = 2008-08-20 + +[[release."3.0"]] +stage = "3.0 candidate 1" +state = "actual" +date = 2008-09-17 + +[[release."3.0"]] +stage = "3.0 candidate 2" +state = "actual" +date = 2008-11-06 + +[[release."3.0"]] +stage = "3.0 candidate 3" +state = "actual" +date = 2008-11-21 + +[[release."3.0"]] +stage = "3.0 final" +state = "actual" +date = 2008-12-03 + +# 3.0.1 is not in the PEP, but is found on the website at: +# https://www.python.org/downloads/release/python-301/ +# https://www.python.org/ftp/python/3.0.1/ + +[[release."3.0"]] +stage = "3.0.1 final" +state = "actual" +date = 2009-02-13 + +# -- Python 3.1 -------------------------------------------------------------- + +[metadata."3.1"] +pep = 375 +status = "end-of-life" +branch = "3.1" +release-manager = "Benjamin Peterson" +start-of-development = 2008-12-03 +first-release = 2009-06-27 +feature-freeze = 2009-05-06 +end-of-bugfix = 2011-06-11 +end-of-life = 2012-04-09 + +[[release."3.1"]] +stage = "3.1 alpha 1" +state = "actual" +date = 2009-03-07 + +[[release."3.1"]] +stage = "3.1 alpha 2" +state = "actual" +date = 2009-04-04 + +[[release."3.1"]] +stage = "3.1 beta 1" +state = "actual" +date = 2009-05-06 + +[[release."3.1"]] +stage = "3.1 candidate 1" +state = "actual" +date = 2009-05-30 + +[[release."3.1"]] +stage = "3.1 candidate 2" +state = "actual" +date = 2009-06-13 + +[[release."3.1"]] +stage = "3.1 final" +state = "actual" +date = 2009-06-27 + +[[release."3.1"]] +stage = "3.1.1 candidate 1" +state = "actual" +date = 2009-08-13 + +[[release."3.1"]] +stage = "3.1.1 final" +state = "actual" +date = 2009-08-16 + +[[release."3.1"]] +stage = "3.1.2 candidate 1" +state = "actual" +date = 2010-03-06 + +[[release."3.1"]] +stage = "3.1.2 final" +state = "actual" +date = 2010-03-20 + +[[release."3.1"]] +stage = "3.1.3 candidate 1" +state = "actual" +date = 2010-11-13 + +[[release."3.1"]] +stage = "3.1.3 final" +state = "actual" +date = 2010-11-27 + +[[release."3.1"]] +stage = "3.1.4 candidate 1" +state = "actual" +date = 2011-05-29 + +[[release."3.1"]] +stage = "3.1.4 final" +state = "actual" +date = 2011-06-11 + +[[release."3.1"]] +stage = "3.1.5 candidate 1" +state = "actual" +date = 2012-02-23 + +[[release."3.1"]] +stage = "3.1.5 candidate 2" +state = "actual" +date = 2012-03-15 + +# PEP 375 states the date as 2012-04-06, but the website lists 2012-04-09: +# https://www.python.org/downloads/release/python-315/ + +[[release."3.1"]] +stage = "3.1.5 final" +state = "actual" +date = 2012-04-09 + +# -- Python 3.2 -------------------------------------------------------------- + +[metadata."3.2"] +pep = 392 +status = "end-of-life" +branch = "3.2" +release-manager = "Georg Brandl" +start-of-development = 2009-06-27 +first-release = 2011-02-20 +feature-freeze = 2010-12-06 +end-of-bugfix = 2013-05-13 +end-of-life = 2016-02-20 + +[[release."3.2"]] +stage = "3.2 alpha 1" +state = "actual" +date = 2010-08-01 + +[[release."3.2"]] +stage = "3.2 alpha 2" +state = "actual" +date = 2010-09-06 + +[[release."3.2"]] +stage = "3.2 alpha 3" +state = "actual" +date = 2010-10-12 + +[[release."3.2"]] +stage = "3.2 alpha 4" +state = "actual" +date = 2010-11-16 + +[[release."3.2"]] +stage = "3.2 beta 1" +state = "actual" +date = 2010-12-06 + +[[release."3.2"]] +stage = "3.2 beta 2" +state = "actual" +date = 2010-12-20 + +[[release."3.2"]] +stage = "3.2 candidate 1" +state = "actual" +date = 2011-01-16 + +[[release."3.2"]] +stage = "3.2 candidate 2" +state = "actual" +date = 2011-01-31 + +[[release."3.2"]] +stage = "3.2 candidate 3" +state = "actual" +date = 2011-02-14 + +[[release."3.2"]] +stage = "3.2 final" +state = "actual" +date = 2011-02-20 + +[[release."3.2"]] +stage = "3.2.1 beta 1" +state = "actual" +date = 2011-05-08 + +[[release."3.2"]] +stage = "3.2.1 candidate 1" +state = "actual" +date = 2011-05-17 + +[[release."3.2"]] +stage = "3.2.1 candidate 2" +state = "actual" +date = 2011-07-03 + +[[release."3.2"]] +stage = "3.2.1 final" +state = "actual" +date = 2011-07-11 + +[[release."3.2"]] +stage = "3.2.2 candidate 1" +state = "actual" +date = 2011-08-14 + +[[release."3.2"]] +stage = "3.2.2 final" +state = "actual" +date = 2011-09-04 + +[[release."3.2"]] +stage = "3.2.3 candidate 1" +state = "actual" +date = 2012-02-25 + +[[release."3.2"]] +stage = "3.2.3 candidate 2" +state = "actual" +date = 2012-03-18 + +[[release."3.2"]] +stage = "3.2.3 final" +state = "actual" +date = 2012-04-11 + +[[release."3.2"]] +stage = "3.2.4 candidate 1" +state = "actual" +date = 2013-03-23 + +[[release."3.2"]] +stage = "3.2.4 final" +state = "actual" +date = 2013-04-06 + +[[release."3.2"]] +stage = "3.2.5 final" +state = "actual" +date = 2013-05-13 + +[[release."3.2"]] +stage = "3.2.6 candidate 1" +state = "actual" +date = 2014-10-04 + +[[release."3.2"]] +stage = "3.2.6 final" +state = "actual" +date = 2014-10-11 + +# -- Python 3.3 -------------------------------------------------------------- + +[metadata."3.3"] +pep = 398 +status = "end-of-life" +branch = "3.3" +release-manager = "Georg Brandl, Ned Deily (3.3.7+)" +start-of-development = 2011-02-20 +first-release = 2012-09-29 +feature-freeze = 2012-06-27 +end-of-bugfix = 2014-03-08 +end-of-life = 2017-09-29 + +[[release."3.3"]] +stage = "3.3.0 alpha 1" +state = "actual" +date = 2012-03-05 + +[[release."3.3"]] +stage = "3.3.0 alpha 2" +state = "actual" +date = 2012-04-02 + +[[release."3.3"]] +stage = "3.3.0 alpha 3" +state = "actual" +date = 2012-05-01 + +[[release."3.3"]] +stage = "3.3.0 alpha 4" +state = "actual" +date = 2012-05-31 + +[[release."3.3"]] +stage = "3.3.0 beta 1" +state = "actual" +date = 2012-06-27 + +[[release."3.3"]] +stage = "3.3.0 beta 2" +state = "actual" +date = 2012-08-12 + +[[release."3.3"]] +stage = "3.3.0 candidate 1" +state = "actual" +date = 2012-08-24 + +[[release."3.3"]] +stage = "3.3.0 candidate 2" +state = "actual" +date = 2012-09-09 + +[[release."3.3"]] +stage = "3.3.0 candidate 3" +state = "actual" +date = 2012-09-24 + +[[release."3.3"]] +stage = "3.3.0 final" +state = "actual" +date = 2012-09-29 + +[[release."3.3"]] +stage = "3.3.1 candidate 1" +state = "actual" +date = 2013-03-23 + +[[release."3.3"]] +stage = "3.3.1 final" +state = "actual" +date = 2013-04-06 + +[[release."3.3"]] +stage = "3.3.2 final" +state = "actual" +date = 2013-05-13 + +[[release."3.3"]] +stage = "3.3.3 candidate 1" +state = "actual" +date = 2013-10-27 + +[[release."3.3"]] +stage = "3.3.3 candidate 2" +state = "actual" +date = 2013-11-09 + +[[release."3.3"]] +stage = "3.3.3 final" +state = "actual" +date = 2013-11-16 + +[[release."3.3"]] +stage = "3.3.4 candidate 1" +state = "actual" +date = 2014-01-26 + +[[release."3.3"]] +stage = "3.3.4 final" +state = "actual" +date = 2014-02-09 + +[[release."3.3"]] +stage = "3.3.5 candidate 1" +state = "actual" +date = 2014-02-22 + +[[release."3.3"]] +stage = "3.3.5 candidate 2" +state = "actual" +date = 2014-03-01 + +[[release."3.3"]] +stage = "3.3.5 final" +state = "actual" +date = 2014-03-08 + +[[release."3.3"]] +stage = "3.3.6 candidate 1" +state = "actual" +date = 2014-10-04 + +[[release."3.3"]] +stage = "3.3.6 final" +state = "actual" +date = 2014-10-11 + +[[release."3.3"]] +stage = "3.3.7 candidate 1" +state = "actual" +date = 2017-09-06 + +[[release."3.3"]] +stage = "3.3.7 final" +state = "actual" +date = 2017-09-19 + +# -- Python 3.4 -------------------------------------------------------------- + +[metadata."3.4"] +pep = 429 +status = "end-of-life" +branch = "3.4" +release-manager = "Larry Hastings" +start-of-development = 2012-09-29 +first-release = 2014-03-16 +feature-freeze = 2013-11-24 +end-of-bugfix = 2017-08-09 +end-of-life = 2019-03-18 + +[[release."3.4"]] +stage = "3.4.0 alpha 1" +state = "actual" +date = 2013-08-03 + +[[release."3.4"]] +stage = "3.4.0 alpha 2" +state = "actual" +date = 2013-09-09 + +[[release."3.4"]] +stage = "3.4.0 alpha 3" +state = "actual" +date = 2013-09-29 + +[[release."3.4"]] +stage = "3.4.0 alpha 4" +state = "actual" +date = 2013-10-20 + +[[release."3.4"]] +stage = "3.4.0 beta 1" +state = "actual" +date = 2013-11-24 + +[[release."3.4"]] +stage = "3.4.0 beta 2" +state = "actual" +date = 2014-01-05 + +[[release."3.4"]] +stage = "3.4.0 beta 3" +state = "actual" +date = 2014-01-26 + +[[release."3.4"]] +stage = "3.4.0 candidate 1" +state = "actual" +date = 2014-02-10 + +[[release."3.4"]] +stage = "3.4.0 candidate 2" +state = "actual" +date = 2014-02-23 + +[[release."3.4"]] +stage = "3.4.0 candidate 3" +state = "actual" +date = 2014-03-09 + +[[release."3.4"]] +stage = "3.4.0 final" +state = "actual" +date = 2014-03-16 + +[[release."3.4"]] +stage = "3.4.1 candidate 1" +state = "actual" +date = 2014-05-05 + +[[release."3.4"]] +stage = "3.4.1 final" +state = "actual" +date = 2014-05-18 + +[[release."3.4"]] +stage = "3.4.2 candidate 1" +state = "actual" +date = 2014-09-22 + +[[release."3.4"]] +stage = "3.4.2 final" +state = "actual" +date = 2014-10-06 + +[[release."3.4"]] +stage = "3.4.3 candidate 1" +state = "actual" +date = 2015-02-08 + +[[release."3.4"]] +stage = "3.4.3 final" +state = "actual" +date = 2015-02-25 + +[[release."3.4"]] +stage = "3.4.4 candidate 1" +state = "actual" +date = 2015-12-06 + +[[release."3.4"]] +stage = "3.4.4 final" +state = "actual" +date = 2015-12-20 + +[[release."3.4"]] +stage = "3.4.5 candidate 1" +state = "actual" +date = 2016-06-12 + +[[release."3.4"]] +stage = "3.4.5 final" +state = "actual" +date = 2016-06-26 + +[[release."3.4"]] +stage = "3.4.6 candidate 1" +state = "actual" +date = 2017-01-02 + +[[release."3.4"]] +stage = "3.4.6 final" +state = "actual" +date = 2017-01-17 + +[[release."3.4"]] +stage = "3.4.7 candidate 1" +state = "actual" +date = 2017-07-25 + +[[release."3.4"]] +stage = "3.4.7 final" +state = "actual" +date = 2017-08-09 + +[[release."3.4"]] +stage = "3.4.8 candidate 1" +state = "actual" +date = 2018-01-23 + +[[release."3.4"]] +stage = "3.4.8 final" +state = "actual" +date = 2018-02-04 + +[[release."3.4"]] +stage = "3.4.9 candidate 1" +state = "actual" +date = 2018-07-19 + +[[release."3.4"]] +stage = "3.4.9 final" +state = "actual" +date = 2018-08-02 + +[[release."3.4"]] +stage = "3.4.10 candidate 1" +state = "actual" +date = 2019-03-04 + +[[release."3.4"]] +stage = "3.4.10 final" +state = "actual" +date = 2019-03-18 + +# -- Python 3.5 -------------------------------------------------------------- + +[metadata."3.5"] +pep = 478 +status = "end-of-life" +branch = "3.5" +release-manager = "Larry Hastings" +start-of-development = 2014-03-17 +first-release = 2015-09-13 +feature-freeze = 2015-05-24 +end-of-bugfix = 2017-08-08 +end-of-life = 2020-09-30 + +[[release."3.5"]] +stage = "3.5.0 alpha 1" +state = "actual" +date = 2015-02-08 + +[[release."3.5"]] +stage = "3.5.0 alpha 2" +state = "actual" +date = 2015-03-09 + +[[release."3.5"]] +stage = "3.5.0 alpha 3" +state = "actual" +date = 2015-03-29 + +[[release."3.5"]] +stage = "3.5.0 alpha 4" +state = "actual" +date = 2015-04-19 + +[[release."3.5"]] +stage = "3.5.0 beta 1" +state = "actual" +date = 2015-05-24 + +[[release."3.5"]] +stage = "3.5.0 beta 2" +state = "actual" +date = 2015-05-31 + +[[release."3.5"]] +stage = "3.5.0 beta 3" +state = "actual" +date = 2015-07-05 + +[[release."3.5"]] +stage = "3.5.0 beta 4" +state = "actual" +date = 2015-07-26 + +[[release."3.5"]] +stage = "3.5.0 candidate 1" +state = "actual" +date = 2015-08-10 + +[[release."3.5"]] +stage = "3.5.0 candidate 2" +state = "actual" +date = 2015-08-25 + +[[release."3.5"]] +stage = "3.5.0 candidate 3" +state = "actual" +date = 2015-09-07 + +[[release."3.5"]] +stage = "3.5.0 final" +state = "actual" +date = 2015-09-13 + +[[release."3.5"]] +stage = "3.5.1 candidate 1" +state = "actual" +date = 2015-11-22 + +[[release."3.5"]] +stage = "3.5.1 final" +state = "actual" +date = 2015-12-06 + +[[release."3.5"]] +stage = "3.5.2 candidate 1" +state = "actual" +date = 2016-06-12 + +[[release."3.5"]] +stage = "3.5.2 final" +state = "actual" +date = 2016-06-26 + +[[release."3.5"]] +stage = "3.5.3 candidate 1" +state = "actual" +date = 2017-01-02 + +[[release."3.5"]] +stage = "3.5.3 final" +state = "actual" +date = 2017-01-17 + +[[release."3.5"]] +stage = "3.5.4 candidate 1" +state = "actual" +date = 2017-07-25 + +[[release."3.5"]] +stage = "3.5.4 final" +state = "actual" +date = 2017-08-08 + +[[release."3.5"]] +stage = "3.5.5 candidate 1" +state = "actual" +date = 2018-01-23 + +[[release."3.5"]] +stage = "3.5.5 final" +state = "actual" +date = 2018-02-04 + +[[release."3.5"]] +stage = "3.5.6 candidate 1" +state = "actual" +date = 2018-07-19 + +[[release."3.5"]] +stage = "3.5.6 final" +state = "actual" +date = 2018-08-02 + +[[release."3.5"]] +stage = "3.5.7 candidate 1" +state = "actual" +date = 2019-03-04 + +[[release."3.5"]] +stage = "3.5.7 final" +state = "actual" +date = 2019-03-18 + +[[release."3.5"]] +stage = "3.5.8 candidate 1" +state = "actual" +date = 2019-09-09 + +[[release."3.5"]] +stage = "3.5.8 candidate 2" +state = "actual" +date = 2019-10-12 + +[[release."3.5"]] +stage = "3.5.8 final" +state = "actual" +date = 2019-10-29 + +[[release."3.5"]] +stage = "3.5.9 final" +state = "actual" +date = 2019-11-01 + +[[release."3.5"]] +stage = "3.5.10 candidate 1" +state = "actual" +date = 2020-08-21 + +[[release."3.5"]] +stage = "3.5.10 final" +state = "actual" +date = 2020-09-05 + +# -- Python 3.6 -------------------------------------------------------------- + +[metadata."3.6"] +pep = 494 +status = "end-of-life" +branch = "3.6" +release-manager = "Ned Deily" +start-of-development = 2015-05-24 +first-release = 2016-12-23 +feature-freeze = 2016-09-12 +end-of-bugfix = 2018-12-24 +end-of-life = 2021-12-23 + +[[release."3.6"]] +stage = "3.6.0 alpha 1" +state = "actual" +date = 2016-05-17 + +[[release."3.6"]] +stage = "3.6.0 alpha 2" +state = "actual" +date = 2016-06-13 + +[[release."3.6"]] +stage = "3.6.0 alpha 3" +state = "actual" +date = 2016-07-11 + +[[release."3.6"]] +stage = "3.6.0 alpha 4" +state = "actual" +date = 2016-08-15 + +[[release."3.6"]] +stage = "3.6.0 beta 1" +state = "actual" +date = 2016-09-12 + +[[release."3.6"]] +stage = "3.6.0 beta 2" +state = "actual" +date = 2016-10-10 + +[[release."3.6"]] +stage = "3.6.0 beta 3" +state = "actual" +date = 2016-10-31 + +[[release."3.6"]] +stage = "3.6.0 beta 4" +state = "actual" +date = 2016-11-21 + +[[release."3.6"]] +stage = "3.6.0 candidate 1" +state = "actual" +date = 2016-12-06 + +[[release."3.6"]] +stage = "3.6.0 candidate 2" +state = "actual" +date = 2016-12-16 + +[[release."3.6"]] +stage = "3.6.0 final" +state = "actual" +date = 2016-12-23 + +[[release."3.6"]] +stage = "3.6.1 candidate 1" +state = "actual" +date = 2017-03-05 + +[[release."3.6"]] +stage = "3.6.1 final" +state = "actual" +date = 2017-03-21 + +[[release."3.6"]] +stage = "3.6.2 candidate 1" +state = "actual" +date = 2017-06-17 + +[[release."3.6"]] +stage = "3.6.2 candidate 2" +state = "actual" +date = 2017-07-07 + +[[release."3.6"]] +stage = "3.6.2 final" +state = "actual" +date = 2017-07-17 + +[[release."3.6"]] +stage = "3.6.3 candidate 1" +state = "actual" +date = 2017-09-19 + +[[release."3.6"]] +stage = "3.6.3 final" +state = "actual" +date = 2017-10-03 + +[[release."3.6"]] +stage = "3.6.4 candidate 1" +state = "actual" +date = 2017-12-05 + +[[release."3.6"]] +stage = "3.6.4 final" +state = "actual" +date = 2017-12-19 + +[[release."3.6"]] +stage = "3.6.5 candidate 1" +state = "actual" +date = 2018-03-13 + +[[release."3.6"]] +stage = "3.6.5 final" +state = "actual" +date = 2018-03-28 + +[[release."3.6"]] +stage = "3.6.6 candidate 1" +state = "actual" +date = 2018-06-12 + +[[release."3.6"]] +stage = "3.6.6 final" +state = "actual" +date = 2018-06-27 + +[[release."3.6"]] +stage = "3.6.7 candidate 1" +state = "actual" +date = 2018-09-26 + +[[release."3.6"]] +stage = "3.6.7 candidate 2" +state = "actual" +date = 2018-10-13 + +[[release."3.6"]] +stage = "3.6.7 final" +state = "actual" +date = 2018-10-20 + +[[release."3.6"]] +stage = "3.6.8 candidate 1" +state = "actual" +date = 2018-12-11 + +[[release."3.6"]] +stage = "3.6.8 final" +state = "actual" +date = 2018-12-24 + +[[release."3.6"]] +stage = "3.6.9 candidate 1" +state = "actual" +date = 2019-06-18 + +[[release."3.6"]] +stage = "3.6.9 final" +state = "actual" +date = 2019-07-02 + +[[release."3.6"]] +stage = "3.6.10 candidate 1" +state = "actual" +date = 2019-12-11 + +[[release."3.6"]] +stage = "3.6.10 final" +state = "actual" +date = 2019-12-18 + +[[release."3.6"]] +stage = "3.6.11 candidate 1" +state = "actual" +date = 2020-06-15 + +[[release."3.6"]] +stage = "3.6.11 final" +state = "actual" +date = 2020-06-27 + +[[release."3.6"]] +stage = "3.6.12 final" +state = "actual" +date = 2020-08-17 + +[[release."3.6"]] +stage = "3.6.13 final" +state = "actual" +date = 2021-02-15 + +[[release."3.6"]] +stage = "3.6.14 final" +state = "actual" +date = 2021-06-28 + +[[release."3.6"]] +stage = "3.6.15 final" +state = "actual" +date = 2021-09-04 + +# -- Python 3.7 -------------------------------------------------------------- + +[metadata."3.7"] +pep = 537 +status = "end-of-life" +branch = "3.7" +release-manager = "Ned Deily" +start-of-development = 2016-09-12 +first-release = 2018-06-27 +feature-freeze = 2018-01-31 +end-of-bugfix = 2020-06-27 +end-of-life = 2023-06-27 + +[[release."3.7"]] +stage = "3.7.0 alpha 1" +state = "actual" +date = 2017-09-19 + +[[release."3.7"]] +stage = "3.7.0 alpha 2" +state = "actual" +date = 2017-10-17 + +[[release."3.7"]] +stage = "3.7.0 alpha 3" +state = "actual" +date = 2017-12-05 + +[[release."3.7"]] +stage = "3.7.0 alpha 4" +state = "actual" +date = 2018-01-09 + +[[release."3.7"]] +stage = "3.7.0 beta 1" +state = "actual" +date = 2018-01-31 + +[[release."3.7"]] +stage = "3.7.0 beta 2" +state = "actual" +date = 2018-02-27 + +[[release."3.7"]] +stage = "3.7.0 beta 3" +state = "actual" +date = 2018-03-29 + +[[release."3.7"]] +stage = "3.7.0 beta 4" +state = "actual" +date = 2018-05-02 + +[[release."3.7"]] +stage = "3.7.0 beta 5" +state = "actual" +date = 2018-05-30 + +[[release."3.7"]] +stage = "3.7.0 candidate 1" +state = "actual" +date = 2018-06-12 + +[[release."3.7"]] +stage = "3.7.0 final" +state = "actual" +date = 2018-06-27 + +[[release."3.7"]] +stage = "3.7.1 candidate 1" +state = "actual" +date = 2018-09-26 + +[[release."3.7"]] +stage = "3.7.1 candidate 2" +state = "actual" +date = 2018-10-13 + +[[release."3.7"]] +stage = "3.7.1 final" +state = "actual" +date = 2018-10-20 + +[[release."3.7"]] +stage = "3.7.2 candidate 1" +state = "actual" +date = 2018-12-11 + +[[release."3.7"]] +stage = "3.7.2 final" +state = "actual" +date = 2018-12-24 + +[[release."3.7"]] +stage = "3.7.3 candidate 1" +state = "actual" +date = 2019-03-12 + +[[release."3.7"]] +stage = "3.7.3 final" +state = "actual" +date = 2019-03-25 + +[[release."3.7"]] +stage = "3.7.4 candidate 1" +state = "actual" +date = 2019-06-18 + +[[release."3.7"]] +stage = "3.7.4 candidate 2" +state = "actual" +date = 2019-07-02 + +[[release."3.7"]] +stage = "3.7.4 final" +state = "actual" +date = 2019-07-08 + +[[release."3.7"]] +stage = "3.7.5 candidate 1" +state = "actual" +date = 2019-10-02 + +[[release."3.7"]] +stage = "3.7.5 final" +state = "actual" +date = 2019-10-15 + +[[release."3.7"]] +stage = "3.7.6 candidate 1" +state = "actual" +date = 2019-12-11 + +[[release."3.7"]] +stage = "3.7.6 final" +state = "actual" +date = 2019-12-18 + +[[release."3.7"]] +stage = "3.7.7 candidate 1" +state = "actual" +date = 2020-03-04 + +[[release."3.7"]] +stage = "3.7.7 final" +state = "actual" +date = 2020-03-10 + +[[release."3.7"]] +stage = "3.7.8 candidate 1" +state = "actual" +date = 2020-06-15 + +[[release."3.7"]] +stage = "3.7.8 final" +state = "actual" +date = 2020-06-27 + +[[release."3.7"]] +stage = "3.7.9 final" +state = "actual" +date = 2020-08-17 + +[[release."3.7"]] +stage = "3.7.10 final" +state = "actual" +date = 2021-02-15 + +[[release."3.7"]] +stage = "3.7.11 final" +state = "actual" +date = 2021-06-28 + +[[release."3.7"]] +stage = "3.7.12 final" +state = "actual" +date = 2021-09-04 + +[[release."3.7"]] +stage = "3.7.13 final" +state = "actual" +date = 2022-03-16 + +[[release."3.7"]] +stage = "3.7.14 final" +state = "actual" +date = 2022-09-06 + +[[release."3.7"]] +stage = "3.7.15 final" +state = "actual" +date = 2022-10-11 + +[[release."3.7"]] +stage = "3.7.16 final" +state = "actual" +date = 2022-12-06 + +[[release."3.7"]] +stage = "3.7.17 final" +state = "actual" +date = 2023-06-06 + +# -- Python 3.8 -------------------------------------------------------------- + +[metadata."3.8"] +pep = 569 +status = "end-of-life" +branch = "3.8" +release-manager = "Łukasz Langa" +start-of-development = 2018-01-29 +first-release = 2019-10-14 +feature-freeze = 2019-06-04 +end-of-bugfix = 2021-05-03 +end-of-life = 2024-10-07 + +[[release."3.8"]] +stage = "3.8.0 alpha 1" +state = "actual" +date = 2019-02-03 + +[[release."3.8"]] +stage = "3.8.0 alpha 2" +state = "actual" +date = 2019-02-25 + +[[release."3.8"]] +stage = "3.8.0 alpha 3" +state = "actual" +date = 2019-03-25 + +[[release."3.8"]] +stage = "3.8.0 alpha 4" +state = "actual" +date = 2019-05-06 + +[[release."3.8"]] +stage = "3.8.0 beta 1" +state = "actual" +date = 2019-06-04 + +[[release."3.8"]] +stage = "3.8.0 beta 2" +state = "actual" +date = 2019-07-04 + +[[release."3.8"]] +stage = "3.8.0 beta 3" +state = "actual" +date = 2019-07-29 + +[[release."3.8"]] +stage = "3.8.0 beta 4" +state = "actual" +date = 2019-08-30 + +[[release."3.8"]] +stage = "3.8.0 candidate 1" +state = "actual" +date = 2019-10-01 + +[[release."3.8"]] +stage = "3.8.0 final" +state = "actual" +date = 2019-10-14 + +[[release."3.8"]] +stage = "3.8.1 candidate 1" +state = "actual" +date = 2019-12-10 + +[[release."3.8"]] +stage = "3.8.1 final" +state = "actual" +date = 2019-12-18 + +[[release."3.8"]] +stage = "3.8.2 candidate 1" +state = "actual" +date = 2020-02-10 + +[[release."3.8"]] +stage = "3.8.2 candidate 2" +state = "actual" +date = 2020-02-17 + +[[release."3.8"]] +stage = "3.8.2 final" +state = "actual" +date = 2020-02-24 + +[[release."3.8"]] +stage = "3.8.3 candidate 1" +state = "actual" +date = 2020-04-29 + +[[release."3.8"]] +stage = "3.8.3 final" +state = "actual" +date = 2020-05-13 + +[[release."3.8"]] +stage = "3.8.4 candidate 1" +state = "actual" +date = 2020-06-30 + +[[release."3.8"]] +stage = "3.8.4 final" +state = "actual" +date = 2020-07-13 + +[[release."3.8"]] +stage = "3.8.5 final" +state = "actual" +date = 2020-07-20 +note = "security hotfix" + +[[release."3.8"]] +stage = "3.8.6 candidate 1" +state = "actual" +date = 2020-09-08 + +[[release."3.8"]] +stage = "3.8.6 final" +state = "actual" +date = 2020-09-24 + +[[release."3.8"]] +stage = "3.8.7 candidate 1" +state = "actual" +date = 2020-12-07 + +[[release."3.8"]] +stage = "3.8.7 final" +state = "actual" +date = 2020-12-21 + +[[release."3.8"]] +stage = "3.8.8 candidate 1" +state = "actual" +date = 2021-02-16 + +[[release."3.8"]] +stage = "3.8.8 final" +state = "actual" +date = 2021-02-19 + +[[release."3.8"]] +stage = "3.8.9 final" +state = "actual" +date = 2021-04-02 +note = "security hotfix" + +[[release."3.8"]] +stage = "3.8.10 final" +state = "actual" +date = 2021-05-03 + +[[release."3.8"]] +stage = "3.8.11 final" +state = "actual" +date = 2021-06-28 + +[[release."3.8"]] +stage = "3.8.12 final" +state = "actual" +date = 2021-08-30 + +[[release."3.8"]] +stage = "3.8.13 final" +state = "actual" +date = 2022-03-16 + +[[release."3.8"]] +stage = "3.8.14 final" +state = "actual" +date = 2022-09-06 + +[[release."3.8"]] +stage = "3.8.15 final" +state = "actual" +date = 2022-10-11 + +[[release."3.8"]] +stage = "3.8.16 final" +state = "actual" +date = 2022-12-06 + +[[release."3.8"]] +stage = "3.8.17 final" +state = "actual" +date = 2023-06-06 + + +[[release."3.8"]] +stage = "3.8.18 final" +state = "actual" +date = 2023-08-24 + +[[release."3.8"]] +stage = "3.8.19 final" +state = "actual" +date = 2024-03-19 + +[[release."3.8"]] +stage = "3.8.20 final" +state = "actual" +date = 2024-09-06 +note = "final security release" + +# -- Python 3.9 -------------------------------------------------------------- + +[metadata."3.9"] +pep = 596 +status = "security" +branch = "3.9" +release-manager = "Łukasz Langa" +start-of-development = 2019-06-04 +first-release = 2020-10-05 +feature-freeze = 2020-05-18 +end-of-bugfix = 2022-05-17 +end-of-life = 2025-10-01 + +[[release."3.9"]] +stage = "3.9.0 alpha 1" +state = "actual" +date = 2019-11-19 + +[[release."3.9"]] +stage = "3.9.0 alpha 2" +state = "actual" +date = 2019-12-18 + +[[release."3.9"]] +stage = "3.9.0 alpha 3" +state = "actual" +date = 2020-01-25 + +[[release."3.9"]] +stage = "3.9.0 alpha 4" +state = "actual" +date = 2020-02-26 + +[[release."3.9"]] +stage = "3.9.0 alpha 5" +state = "actual" +date = 2020-03-23 + +[[release."3.9"]] +stage = "3.9.0 alpha 6" +state = "actual" +date = 2020-04-28 + +[[release."3.9"]] +stage = "3.9.0 beta 1" +state = "actual" +date = 2020-05-18 + +# There was no beta 2, the PEP statest that it was recalled. + +[[release."3.9"]] +stage = "3.9.0 beta 3" +state = "actual" +date = 2020-06-09 +note = "beta 2 was recalled." + +[[release."3.9"]] +stage = "3.9.0 beta 4" +state = "actual" +date = 2020-07-03 + +[[release."3.9"]] +stage = "3.9.0 beta 5" +state = "actual" +date = 2020-07-20 + +[[release."3.9"]] +stage = "3.9.0 candidate 1" +state = "actual" +date = 2020-08-11 + +[[release."3.9"]] +stage = "3.9.0 candidate 2" +state = "actual" +date = 2020-09-17 + +[[release."3.9"]] +stage = "3.9.0 final" +state = "actual" +date = 2020-10-05 + +[[release."3.9"]] +stage = "3.9.1 candidate 1" +state = "actual" +date = 2020-11-24 + +[[release."3.9"]] +stage = "3.9.1 final" +state = "actual" +date = 2020-12-07 + +[[release."3.9"]] +stage = "3.9.2 candidate 1" +state = "actual" +date = 2021-02-16 + +[[release."3.9"]] +stage = "3.9.2 final" +state = "actual" +date = 2021-02-19 + +[[release."3.9"]] +stage = "3.9.3" +state = "actual" +date = 2021-04-02 +note = "security hotfix; recalled due to bpo-43710" + +[[release."3.9"]] +stage = "3.9.4" +state = "actual" +date = 2021-04-04 +note = "ABI compatibility hotfix" + +[[release."3.9"]] +stage = "3.9.5" +state = "actual" +date = 2021-05-03 + +[[release."3.9"]] +stage = "3.9.6" +state = "actual" +date = 2021-06-28 + +[[release."3.9"]] +stage = "3.9.7" +state = "actual" +date = 2021-08-30 + +[[release."3.9"]] +stage = "3.9.8" +state = "actual" +date = 2021-11-05 +note = "recalled due to bpo-45235" + +[[release."3.9"]] +stage = "3.9.9" +state = "actual" +date = 2021-11-15 + +[[release."3.9"]] +stage = "3.9.10" +state = "actual" +date = 2022-01-14 + +[[release."3.9"]] +stage = "3.9.11" +state = "actual" +date = 2022-03-16 + +[[release."3.9"]] +stage = "3.9.12" +state = "actual" +date = 2022-03-23 + +[[release."3.9"]] +stage = "3.9.13" +state = "actual" +date = 2022-05-17 + +[[release."3.9"]] +stage = "3.9.14" +state = "actual" +date = 2022-09-06 + +[[release."3.9"]] +stage = "3.9.15" +state = "actual" +date = 2022-10-11 + +[[release."3.9"]] +stage = "3.9.16" +state = "actual" +date = 2022-12-06 + +[[release."3.9"]] +stage = "3.9.17" +state = "actual" +date = 2023-06-06 + +[[release."3.9"]] +stage = "3.9.18" +state = "actual" +date = 2023-08-24 + +[[release."3.9"]] +stage = "3.9.19" +state = "actual" +date = 2024-03-19 + +[[release."3.9"]] +stage = "3.9.20" +state = "actual" +date = 2024-09-06 + +[[release."3.9"]] +stage = "3.9.21" +state = "actual" +date = 2024-12-03 + +# -- Python 3.10 -------------------------------------------------------------- + +[metadata."3.10"] +pep = 619 +status = "security" +branch = "3.10" +release-manager = "Pablo Galindo Salgado" +start-of-development = 2020-05-18 +first-release = 2021-10-04 +feature-freeze = 2021-05-03 +end-of-bugfix = 2023-04-05 +end-of-life = 2026-10-01 + +[[release."3.10"]] +stage = "3.10.0 alpha 1" +state = "actual" +date = 2020-10-05 + +[[release."3.10"]] +stage = "3.10.0 alpha 2" +state = "actual" +date = 2020-11-03 + +[[release."3.10"]] +stage = "3.10.0 alpha 3" +state = "actual" +date = 2020-12-07 + +[[release."3.10"]] +stage = "3.10.0 alpha 4" +state = "actual" +date = 2021-01-04 + +[[release."3.10"]] +stage = "3.10.0 alpha 5" +state = "actual" +date = 2021-02-03 + +[[release."3.10"]] +stage = "3.10.0 alpha 6" +state = "actual" +date = 2021-03-01 + +[[release."3.10"]] +stage = "3.10.0 alpha 7" +state = "actual" +date = 2021-04-06 + +[[release."3.10"]] +stage = "3.10.0 beta 1" +state = "actual" +date = 2021-05-03 + +[[release."3.10"]] +stage = "3.10.0 beta 2" +state = "actual" +date = 2021-05-31 + +[[release."3.10"]] +stage = "3.10.0 beta 3" +state = "actual" +date = 2021-06-17 + +[[release."3.10"]] +stage = "3.10.0 beta 4" +state = "actual" +date = 2021-07-10 + +[[release."3.10"]] +stage = "3.10.0 candidate 1" +state = "actual" +date = 2021-08-03 + +[[release."3.10"]] +stage = "3.10.0 candidate 2" +state = "actual" +date = 2021-09-07 + +[[release."3.10"]] +stage = "3.10.0 final" +state = "actual" +date = 2021-10-04 + +[[release."3.10"]] +stage = "3.10.1" +state = "actual" +date = 2021-12-06 + +[[release."3.10"]] +stage = "3.10.2" +state = "actual" +date = 2022-01-14 + +[[release."3.10"]] +stage = "3.10.3" +state = "actual" +date = 2022-03-16 + +[[release."3.10"]] +stage = "3.10.4" +state = "actual" +date = 2022-03-24 + +[[release."3.10"]] +stage = "3.10.5" +state = "actual" +date = 2022-06-06 + +[[release."3.10"]] +stage = "3.10.6" +state = "actual" +date = 2022-08-02 + +[[release."3.10"]] +stage = "3.10.7" +state = "actual" +date = 2022-09-06 + +[[release."3.10"]] +stage = "3.10.8" +state = "actual" +date = 2022-10-11 + +[[release."3.10"]] +stage = "3.10.9" +state = "actual" +date = 2022-12-06 + +[[release."3.10"]] +stage = "3.10.10" +state = "actual" +date = 2023-02-08 + +[[release."3.10"]] +stage = "3.10.11" +state = "actual" +date = 2023-04-05 + +[[release."3.10"]] +stage = "3.10.12" +state = "actual" +date = 2023-06-06 + +[[release."3.10"]] +stage = "3.10.13" +state = "actual" +date = 2023-08-24 + +[[release."3.10"]] +stage = "3.10.14" +state = "actual" +date = 2024-03-19 + +[[release."3.10"]] +stage = "3.10.15" +state = "actual" +date = 2024-09-07 + +[[release."3.10"]] +stage = "3.10.16" +state = "actual" +date = 2024-12-03 + +# -- Python 3.11 -------------------------------------------------------------- + +[metadata."3.11"] +pep = 664 +status = "security" +branch = "3.11" +release-manager = "Pablo Galindo Salgado" +start-of-development = 2021-05-03 +first-release = 2022-10-24 +feature-freeze = 2022-05-08 +end-of-bugfix = 2024-04-24 +end-of-life = 2027-10-01 + +[[release."3.11"]] +stage = "3.11.0 alpha 1" +state = "actual" +date = 2021-10-05 + +[[release."3.11"]] +stage = "3.11.0 alpha 2" +state = "actual" +date = 2021-11-02 + +[[release."3.11"]] +stage = "3.11.0 alpha 3" +state = "actual" +date = 2021-12-08 + +[[release."3.11"]] +stage = "3.11.0 alpha 4" +state = "actual" +date = 2022-01-14 + +[[release."3.11"]] +stage = "3.11.0 alpha 5" +state = "actual" +date = 2022-02-03 + +[[release."3.11"]] +stage = "3.11.0 alpha 6" +state = "actual" +date = 2022-03-07 + +[[release."3.11"]] +stage = "3.11.0 alpha 7" +state = "actual" +date = 2022-04-05 + +[[release."3.11"]] +stage = "3.11.0 beta 1" +state = "actual" +date = 2022-05-08 + +[[release."3.11"]] +stage = "3.11.0 beta 2" +state = "actual" +date = 2022-05-31 + +[[release."3.11"]] +stage = "3.11.0 beta 3" +state = "actual" +date = 2022-06-01 + +[[release."3.11"]] +stage = "3.11.0 beta 4" +state = "actual" +date = 2022-07-11 + +[[release."3.11"]] +stage = "3.11.0 beta 5" +state = "actual" +date = 2022-07-26 + +[[release."3.11"]] +stage = "3.11.0 candidate 1" +state = "actual" +date = 2022-08-08 + +[[release."3.11"]] +stage = "3.11.0 candidate 2" +state = "actual" +date = 2022-09-12 + +[[release."3.11"]] +stage = "3.11.0 final" +state = "actual" +date = 2022-10-24 + +[[release."3.11"]] +stage = "3.11.1" +state = "actual" +date = 2022-12-06 + +[[release."3.11"]] +stage = "3.11.2" +state = "actual" +date = 2023-02-08 + +[[release."3.11"]] +stage = "3.11.3" +state = "actual" +date = 2023-04-05 + +[[release."3.11"]] +stage = "3.11.4" +state = "actual" +date = 2023-06-06 + +[[release."3.11"]] +stage = "3.11.5" +state = "actual" +date = 2023-08-24 + +[[release."3.11"]] +stage = "3.11.6" +state = "actual" +date = 2023-10-02 + +[[release."3.11"]] +stage = "3.11.7" +state = "actual" +date = 2023-12-04 + +[[release."3.11"]] +stage = "3.11.8" +state = "actual" +date = 2024-02-06 + +[[release."3.11"]] +stage = "3.11.9" +state = "actual" +date = 2024-04-02 + +[[release."3.11"]] +stage = "3.11.10" +state = "actual" +date = 2024-09-07 + +[[release."3.11"]] +stage = "3.11.11" +state = "actual" +date = 2024-12-03 + +# -- Python 3.12 -------------------------------------------------------------- + +[metadata."3.12"] +pep = 693 +status = "bugfix" +branch = "3.12" +release-manager = "Thomas Wouters" +start-of-development = 2022-05-08 +first-release = 2023-10-02 +feature-freeze = 2023-05-22 +end-of-bugfix = 2025-04-08 +end-of-life = 2028-10-01 + +[[release."3.12"]] +stage = "3.12.0 alpha 1" +state = "actual" +date = 2022-10-24 + +[[release."3.12"]] +stage = "3.12.0 alpha 2" +state = "actual" +date = 2022-11-14 + +[[release."3.12"]] +stage = "3.12.0 alpha 3" +state = "actual" +date = 2022-12-06 + +[[release."3.12"]] +stage = "3.12.0 alpha 4" +state = "actual" +date = 2023-01-10 + +[[release."3.12"]] +stage = "3.12.0 alpha 5" +state = "actual" +date = 2023-02-07 + +[[release."3.12"]] +stage = "3.12.0 alpha 6" +state = "actual" +date = 2023-03-07 + +[[release."3.12"]] +stage = "3.12.0 alpha 7" +state = "actual" +date = 2023-04-04 + +[[release."3.12"]] +stage = "3.12.0 beta 1" +state = "actual" +date = 2023-05-22 + +[[release."3.12"]] +stage = "3.12.0 beta 2" +state = "actual" +date = 2023-06-06 + +[[release."3.12"]] +stage = "3.12.0 beta 3" +state = "actual" +date = 2023-06-19 + +[[release."3.12"]] +stage = "3.12.0 beta 4" +state = "actual" +date = 2023-07-11 + +[[release."3.12"]] +stage = "3.12.0 candidate 1" +state = "actual" +date = 2023-08-06 + +[[release."3.12"]] +stage = "3.12.0 candidate 2" +state = "actual" +date = 2023-09-06 + +[[release."3.12"]] +stage = "3.12.0 candidate 3" +state = "actual" +date = 2023-09-19 + +[[release."3.12"]] +stage = "3.12.0 final" +state = "actual" +date = 2023-10-02 + +[[release."3.12"]] +stage = "3.12.1" +state = "actual" +date = 2023-12-07 + +[[release."3.12"]] +stage = "3.12.2" +state = "actual" +date = 2024-02-06 + +[[release."3.12"]] +stage = "3.12.3" +state = "actual" +date = 2024-04-09 + +[[release."3.12"]] +stage = "3.12.4" +state = "actual" +date = 2024-06-06 + +[[release."3.12"]] +stage = "3.12.5" +state = "actual" +date = 2024-08-06 + +[[release."3.12"]] +stage = "3.12.6" +state = "actual" +date = 2024-09-06 + +[[release."3.12"]] +stage = "3.12.7" +state = "actual" +date = 2024-10-01 + +[[release."3.12"]] +stage = "3.12.8" +state = "actual" +date = 2024-12-03 + +[[release."3.12"]] +stage = "3.12.9" +state = "actual" +date = 2025-02-04 + +[[release."3.12"]] +stage = "3.12.10" +state = "expected" +date = 2025-04-08 + +# -- Python 3.13 -------------------------------------------------------------- + +[metadata."3.13"] +pep = 719 +status = "bugfix" +branch = "3.13" +release-manager = "Thomas Wouters" +start-of-development = 2023-05-22 +first-release = 2024-10-07 +feature-freeze = 2024-05-08 +end-of-bugfix = 2026-10-07 +end-of-life = 2029-10-01 + +[[release."3.13"]] +stage = "3.13.0 alpha 1" +state = "actual" +date = 2023-10-13 + +[[release."3.13"]] +stage = "3.13.0 alpha 2" +state = "actual" +date = 2023-11-22 + +[[release."3.13"]] +stage = "3.13.0 alpha 3" +state = "actual" +date = 2024-01-17 + +[[release."3.13"]] +stage = "3.13.0 alpha 4" +state = "actual" +date = 2024-02-15 + +[[release."3.13"]] +stage = "3.13.0 alpha 5" +state = "actual" +date = 2024-03-12 + +[[release."3.13"]] +stage = "3.13.0 alpha 6" +state = "actual" +date = 2024-04-09 + +[[release."3.13"]] +stage = "3.13.0 beta 1" +state = "actual" +date = 2024-05-08 + +[[release."3.13"]] +stage = "3.13.0 beta 2" +state = "actual" +date = 2024-06-05 + +[[release."3.13"]] +stage = "3.13.0 beta 3" +state = "actual" +date = 2024-06-27 + +[[release."3.13"]] +stage = "3.13.0 beta 4" +state = "actual" +date = 2024-07-18 + +[[release."3.13"]] +stage = "3.13.0 candidate 1" +state = "actual" +date = 2024-08-01 + +[[release."3.13"]] +stage = "3.13.0 candidate 2" +state = "actual" +date = 2024-09-06 + +[[release."3.13"]] +stage = "3.13.0 candidate 3" +state = "actual" +date = 2024-10-01 + +[[release."3.13"]] +stage = "3.13.0 final" +state = "actual" +date = 2024-10-07 + +[[release."3.13"]] +stage = "3.13.1" +state = "actual" +date = 2024-12-03 + +[[release."3.13"]] +stage = "3.13.2" +state = "actual" +date = 2025-02-04 + +[[release."3.13"]] +stage = "3.13.3" +state = "expected" +date = 2025-04-08 + +[[release."3.13"]] +stage = "3.13.4" +state = "expected" +date = 2025-06-03 + +[[release."3.13"]] +stage = "3.13.5" +state = "expected" +date = 2025-08-05 + +[[release."3.13"]] +stage = "3.13.6" +state = "expected" +date = 2025-10-07 + +[[release."3.13"]] +stage = "3.13.7" +state = "expected" +date = 2025-12-02 + +[[release."3.13"]] +stage = "3.13.8" +state = "expected" +date = 2026-02-03 + +[[release."3.13"]] +stage = "3.13.9" +state = "expected" +date = 2026-04-07 + +[[release."3.13"]] +stage = "3.13.10" +state = "expected" +date = 2026-06-09 + +[[release."3.13"]] +stage = "3.13.11" +state = "expected" +date = 2026-08-04 + +[[release."3.13"]] +stage = "3.13.12" +state = "expected" +date = 2026-10-06 + +# -- Python 3.14 -------------------------------------------------------------- + +[metadata."3.14"] +pep = 745 +status = "feature" +branch = "main" +release-manager = "Hugo van Kemenade" +start-of-development = 2024-05-08 +first-release = 2025-10-07 +feature-freeze = 2025-05-06 +end-of-bugfix = 2027-10-07 +end-of-life = 2030-10-01 + +[[release."3.14"]] +stage = "3.14.0 alpha 1" +state = "actual" +date = 2024-10-15 + +[[release."3.14"]] +stage = "3.14.0 alpha 2" +state = "actual" +date = 2024-11-19 + +[[release."3.14"]] +stage = "3.14.0 alpha 3" +state = "actual" +date = 2024-12-17 + +[[release."3.14"]] +stage = "3.14.0 alpha 4" +state = "actual" +date = 2025-01-14 + +[[release."3.14"]] +stage = "3.14.0 alpha 5" +state = "actual" +date = 2025-02-11 + +[[release."3.14"]] +stage = "3.14.0 alpha 6" +state = "actual" +date = 2025-03-14 + +[[release."3.14"]] +stage = "3.14.0 alpha 7" +state = "expected" +date = 2025-04-08 + +[[release."3.14"]] +stage = "3.14.0 beta 1" +state = "expected" +date = 2025-05-06 + +[[release."3.14"]] +stage = "3.14.0 beta 2" +state = "expected" +date = 2025-05-27 + +[[release."3.14"]] +stage = "3.14.0 beta 3" +state = "expected" +date = 2025-06-17 + +[[release."3.14"]] +stage = "3.14.0 beta 4" +state = "expected" +date = 2025-07-08 + +[[release."3.14"]] +stage = "3.14.0 candidate 1" +state = "expected" +date = 2025-07-22 + +[[release."3.14"]] +stage = "3.14.0 candidate 2" +state = "expected" +date = 2025-08-26 + +[[release."3.14"]] +stage = "3.14.0 final" +state = "expected" +date = 2025-10-07 From 813ac0d2eaa1a43f5a80a3a5d2bed9dff830decc Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 18:42:04 +0000 Subject: [PATCH 02/15] Add initial scripts --- release_engineering/__init__.py | 71 ++++++++ release_engineering/__main__.py | 21 +++ release_engineering/generate_release_cycle.py | 41 +++++ .../update_release_schedules.py | 167 ++++++++++++++++++ 4 files changed, 300 insertions(+) create mode 100644 release_engineering/__init__.py create mode 100644 release_engineering/__main__.py create mode 100644 release_engineering/generate_release_cycle.py create mode 100644 release_engineering/update_release_schedules.py diff --git a/release_engineering/__init__.py b/release_engineering/__init__.py new file mode 100644 index 00000000000..c6cdee60785 --- /dev/null +++ b/release_engineering/__init__.py @@ -0,0 +1,71 @@ +from __future__ import annotations + +import dataclasses +import datetime as dt +import tomllib +from pathlib import Path + +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import Literal, TypeAlias + + ReleaseState: TypeAlias = Literal['actual', 'expected'] + ReleaseSchedules: TypeAlias = dict[tuple[str, ReleaseState], list['ReleaseInfo']] + +RELEASE_DIR = Path(__file__).resolve().parent +ROOT_DIR = RELEASE_DIR.parent +PEP_ROOT = ROOT_DIR / 'peps' + + +@dataclasses.dataclass(frozen=True, kw_only=True, slots=True) +class PythonReleases: + metadata: dict[str, 'VersionMetadata'] + releases: dict[str, list['ReleaseInfo']] + + +@dataclasses.dataclass(frozen=True, kw_only=True, slots=True) +class VersionMetadata: + """Metadata for a given interpreter version (MAJOR.MINOR).""" + + pep: int + status: str + branch: str + release_manager: str + start_of_development: dt.date + first_release: dt.date + feature_freeze: dt.date + end_of_bugfix: dt.date # a.k.a. security mode or source-only releases + end_of_life: dt.date + + @classmethod + def from_toml(cls, data: dict[str, int | str | dt.date]): + return cls(**{k.replace('-', '_'): v for k, v in data.items()}) + + +@dataclasses.dataclass(frozen=True, kw_only=True, slots=True) +class ReleaseInfo: + """Information about a release.""" + + stage: str + state: ReleaseState + date: dt.date + note: str = '' # optional note / comment, displayed in the schedule + + @property + def schedule_bullet(self): + """Return a formatted bullet point for the schedule list.""" + return f'- {self.stage}: {self.date:%A, %Y-%m-%d}' + + +def load_python_releases() -> PythonReleases: + with open(RELEASE_DIR / 'python-releases.toml', 'rb') as f: + python_releases = tomllib.load(f) + all_metadata = { + v: VersionMetadata.from_toml(metadata) + for v, metadata in python_releases['metadata'].items() + } + all_releases = { + v: [ReleaseInfo(**r) for r in releases] + for v, releases in python_releases['release'].items() + } + return PythonReleases(metadata=all_metadata, releases=all_releases) diff --git a/release_engineering/__main__.py b/release_engineering/__main__.py new file mode 100644 index 00000000000..d6ed83d2542 --- /dev/null +++ b/release_engineering/__main__.py @@ -0,0 +1,21 @@ +from __future__ import annotations + +import argparse + +CMD_UPDATE_PEPS = 'update-peps' +CMD_RELEASE_CYCLE = 'release-cycle' + +PARSER = argparse.ArgumentParser(allow_abbrev=False) +PARSER.add_argument('COMMAND', choices=[CMD_UPDATE_PEPS, CMD_RELEASE_CYCLE]) + +args = PARSER.parse_args() +if args.COMMAND == CMD_UPDATE_PEPS: + from release_engineering.update_release_schedules import update_peps + + update_peps() +elif args.COMMAND == CMD_RELEASE_CYCLE: + from pathlib import Path + + from release_engineering.generate_release_cycle import create_release_cycle + + Path('release-cycle.json').write_text(create_release_cycle(), encoding='utf-8') diff --git a/release_engineering/generate_release_cycle.py b/release_engineering/generate_release_cycle.py new file mode 100644 index 00000000000..0e379b357a7 --- /dev/null +++ b/release_engineering/generate_release_cycle.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +import json + +from release_engineering import load_python_releases + +TYPE_CHECKING = False +if TYPE_CHECKING: + from release_engineering import VersionMetadata + + +def create_release_cycle() -> str: + metadata = load_python_releases().metadata + versions = [v for v in metadata if version_to_tuple(v) >= (2, 6)] + versions.sort(key=version_to_tuple, reverse=True) + if '2.7' in versions: + versions.remove('2.7') + versions.insert(versions.index('3.1'), '2.7') + + release_cycle = {version: version_info(metadata[version]) for version in versions} + return ( + json.dumps(release_cycle, indent=2, sort_keys=False, ensure_ascii=False) + '\n' + ) + + +def version_to_tuple(version: str, /) -> tuple[int, ...]: + return tuple(map(int, version.split('.'))) + + +def version_info(metadata: VersionMetadata, /) -> dict[str, str]: + end_of_life = metadata.end_of_life.isoformat() + if metadata.status != 'end-of-life': + end_of_life = end_of_life.removesuffix('-01') + return { + 'branch': metadata.branch, + 'pep': metadata.pep, + 'status': metadata.status, + 'first_release': metadata.first_release.isoformat(), + 'end_of_life': end_of_life, + 'release_manager': metadata.release_manager, + } diff --git a/release_engineering/update_release_schedules.py b/release_engineering/update_release_schedules.py new file mode 100644 index 00000000000..b631849a89b --- /dev/null +++ b/release_engineering/update_release_schedules.py @@ -0,0 +1,167 @@ +"""Update release schedules in PEPs. + +The ``python-releases.toml`` data is treated as authoritative for the given +versions in ``VERSIONS_TO_REGENERATE``. Each PEP must contain markers for the +start and end of each release schedule (feature, bugfix, and security, as +appropriate). These are: + + .. feature release schedule + .. bugfix release schedule + .. security release schedule + .. end of schedule + +This script will use the dates in the [[release."{version}"]] tables to create +and update the release schedule lists in each PEP. + +Optionally, to add a comment or note to a particular release, use the ``note`` +field, which will append the given text in brackets to the relevant line. + +Usage: + + $ python -m release_engineering update-peps + $ # or + $ make regen-all +""" + +from __future__ import annotations + +import datetime as dt + +from release_engineering import ( + PEP_ROOT, + ReleaseInfo, + VersionMetadata, + load_python_releases, +) + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Iterator + + from release_engineering import ReleaseSchedules, ReleaseState, VersionMetadata + +TODAY = dt.date.today() + +VERSIONS_TO_REGENERATE = ( + '3.8', + '3.9', + '3.10', + '3.11', + '3.12', + '3.13', + '3.14', +) + + +def update_peps() -> None: + python_releases = load_python_releases() + for version in VERSIONS_TO_REGENERATE: + metadata = python_releases.metadata[version] + schedules = create_schedules( + version, + python_releases.releases[version], + metadata.start_of_development, + metadata.end_of_bugfix, + ) + update_pep(metadata, schedules) + + +def create_schedules( + version: str, + releases: list[ReleaseInfo], + start_of_development: dt.date, + bugfix_ends: dt.date, +) -> ReleaseSchedules: + schedules: ReleaseSchedules = { + ('feature', 'actual'): [], + ('feature', 'expected'): [], + ('bugfix', 'actual'): [], + ('bugfix', 'expected'): [], + ('security', 'actual'): [], + } + + # first entry into the dictionary + db_state: ReleaseState = 'actual' if TODAY >= start_of_development else 'expected' + schedules['feature', db_state].append( + ReleaseInfo( + stage=f'{version} development begins', + state=db_state, + date=start_of_development, + ) + ) + + for release_info in releases: + if release_info.stage.startswith(f'{version}.0'): + schedules['feature', release_info.state].append(release_info) + elif release_info.date <= bugfix_ends: + schedules['bugfix', release_info.state].append(release_info) + else: + assert release_info.state == 'actual', release_info + schedules['security', release_info.state].append(release_info) + + return schedules + + +def update_pep(metadata: VersionMetadata, schedules: ReleaseSchedules) -> None: + pep_path = PEP_ROOT.joinpath(f'pep-{metadata.pep:0>4}.rst') + pep_lines = iter(pep_path.read_text(encoding='utf-8').splitlines()) + output_lines: list[str] = [] + schedule_name = '' + for line in pep_lines: + output_lines.append(line) + if line.startswith('.. ') and 'schedule' in line: + schedule_name = line.split()[1] + assert schedule_name in {'feature', 'bugfix', 'security'} + output_lines += generate_schedule_lists( + schedules, + schedule_name=schedule_name, + feature_freeze_date=metadata.feature_freeze, + ) + + # skip source lines until the end of schedule marker + while True: + line = next(pep_lines, None) + if line == '.. end of schedule': + output_lines.append(line) + break + if line is None: + raise ValueError('No end of schedule marker found!') + + if not schedule_name: + raise ValueError('No schedule markers found!') + + with open(pep_path, 'w', encoding='utf-8') as f: + f.write('\n'.join(output_lines)) + f.write('\n') # trailing newline + + +def generate_schedule_lists( + schedules: ReleaseSchedules, + *, + schedule_name: str, + feature_freeze_date: dt.date = dt.date.min, +) -> Iterator[str]: + state: ReleaseState + for state in 'actual', 'expected': + if not schedules.get((schedule_name, state)): + continue + + yield '' + if schedule_name != 'security': + yield f'{state.title()}:' + yield '' + for release_info in schedules[schedule_name, state]: + yield release_info.schedule_bullet + if release_info.note: + yield f' ({release_info.note})' + if release_info.date == feature_freeze_date: + yield ' (No new features beyond this point.)' + + if schedule_name == 'bugfix': + yield ' (final regular bugfix release with binary installers)' + + yield '' + + +if __name__ == '__main__': + update_peps() From 1615b1d1a51c1bc6ecbfd49235401dbfd0deeb3a Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 18:42:19 +0000 Subject: [PATCH 03/15] Add release schedule markers --- peps/pep-0569.rst | 12 ++++++++++++ peps/pep-0596.rst | 12 ++++++++++++ peps/pep-0619.rst | 12 ++++++++++++ peps/pep-0664.rst | 12 ++++++++++++ peps/pep-0693.rst | 8 ++++++++ peps/pep-0719.rst | 8 ++++++++ peps/pep-0745.rst | 4 ++++ 7 files changed, 68 insertions(+) diff --git a/peps/pep-0569.rst b/peps/pep-0569.rst index fc8d32d73ed..6057bcb0e69 100644 --- a/peps/pep-0569.rst +++ b/peps/pep-0569.rst @@ -51,6 +51,8 @@ Release Schedule 3.8.0 schedule -------------- +.. feature release schedule + - 3.8 development begins: Monday, 2018-01-29 - 3.8.0 alpha 1: Sunday, 2019-02-03 - 3.8.0 alpha 2: Monday, 2019-02-25 @@ -65,9 +67,13 @@ Release Schedule - 3.8.0 candidate 1: Tuesday, 2019-10-01 - 3.8.0 final: Monday, 2019-10-14 +.. end of schedule + Bugfix releases --------------- +.. bugfix release schedule + - 3.8.1rc1: Tuesday, 2019-12-10 - 3.8.1: Wednesday, 2019-12-18 - 3.8.2rc1: Monday, 2020-02-10 @@ -88,11 +94,15 @@ Bugfix releases - 3.8.10: Monday, 2021-05-03 (final regular bugfix release with binary installers) +.. end of schedule + Source-only security fix releases --------------------------------- Provided irregularly on an "as-needed" basis until October 7th 2024. +.. security release schedule + - 3.8.11: Monday, 2021-06-28 - 3.8.12: Monday, 2021-08-30 - 3.8.13: Wednesday, 2022-03-16 @@ -104,6 +114,8 @@ Provided irregularly on an "as-needed" basis until October 7th 2024. - 3.8.19: Tuesday, 2024-03-19 - 3.8.20: Friday, 2024-09-06 (final security release) +.. end of schedule + Features for 3.8 ================ diff --git a/peps/pep-0596.rst b/peps/pep-0596.rst index e981947a86b..6beb8552ed9 100644 --- a/peps/pep-0596.rst +++ b/peps/pep-0596.rst @@ -40,6 +40,8 @@ Note: the dates below use a 17-month development period that results in a 12-month release cadence between feature versions, as defined by :pep:`602`. +.. feature release schedule + Actual: - 3.9 development begins: Tuesday, 2019-06-04 @@ -59,10 +61,14 @@ Actual: - 3.9.0 candidate 2: Thursday, 2020-09-17 - 3.9.0 final: Monday, 2020-10-05 +.. end of schedule + Bugfix releases --------------- +.. bugfix release schedule + Actual: - 3.9.1 candidate 1: Tuesday, 2020-11-24 @@ -82,12 +88,16 @@ Actual: - 3.9.13: Tuesday, 2022-05-17 (final regular bugfix release with binary installers) +.. end of schedule + Source-only security fix releases --------------------------------- Provided irregularly on an "as-needed" basis until October 2025. +.. security release schedule + - 3.9.14: Tuesday, 2022-09-06 - 3.9.15: Tuesday, 2022-10-11 - 3.9.16: Tuesday, 2022-12-06 @@ -97,6 +107,8 @@ Provided irregularly on an "as-needed" basis until October 2025. - 3.9.20: Friday, 2024-09-06 - 3.9.21: Tuesday, 2024-12-03 +.. end of schedule + 3.9 Lifespan ------------ diff --git a/peps/pep-0619.rst b/peps/pep-0619.rst index cdb81a2224b..e96e295190a 100644 --- a/peps/pep-0619.rst +++ b/peps/pep-0619.rst @@ -37,6 +37,8 @@ Note: the dates below use a 17-month development period that results in a 12-month release cadence between feature versions, as defined by :pep:`602`. +.. feature release schedule + Actual: - 3.10 development begins: Monday, 2020-05-18 @@ -56,9 +58,13 @@ Actual: - 3.10.0 candidate 2: Tuesday, 2021-09-07 - 3.10.0 final: Monday, 2021-10-04 +.. end of schedule + Bugfix releases --------------- +.. bugfix release schedule + Actual: - 3.10.1: Monday, 2021-12-06 @@ -74,17 +80,23 @@ Actual: - 3.10.11: Wednesday, 2023-04-05 (final regular bugfix release with binary installers) +.. end of schedule + Source-only security fix releases --------------------------------- Provided irregularly on an "as-needed" basis until October 2026. +.. security release schedule + - 3.10.12: Tuesday, 2023-06-06 - 3.10.13: Thursday, 2023-08-24 - 3.10.14: Tuesday, 2024-03-19 - 3.10.15: Saturday, 2024-09-07 - 3.10.16: Tuesday, 2024-12-03 +.. end of schedule + 3.10 Lifespan ------------- diff --git a/peps/pep-0664.rst b/peps/pep-0664.rst index 8c7c53c054c..aecf3c7ccf3 100644 --- a/peps/pep-0664.rst +++ b/peps/pep-0664.rst @@ -38,6 +38,8 @@ Note: the dates below use a 17-month development period that results in a 12-month release cadence between feature versions, as defined by :pep:`602`. +.. feature release schedule + Actual: - 3.11 development begins: Monday, 2021-05-03 @@ -58,9 +60,13 @@ Actual: - 3.11.0 candidate 2: Monday, 2022-09-12 - 3.11.0 final: Monday, 2022-10-24 +.. end of schedule + Bugfix releases --------------- +.. bugfix release schedule + Actual: - 3.11.1: Tuesday, 2022-12-06 @@ -74,14 +80,20 @@ Actual: - 3.11.9: Tuesday, 2024-04-02 (final regular bugfix release with binary installers) +.. end of schedule + Source-only security fix releases --------------------------------- Provided irregularly on an "as-needed" basis until October 2027. +.. security release schedule + - 3.11.10: Saturday, 2024-09-07 - 3.11.11: Tuesday, 2024-12-03 +.. end of schedule + 3.11 Lifespan ------------- diff --git a/peps/pep-0693.rst b/peps/pep-0693.rst index c4895b4bb79..6e8645a73af 100644 --- a/peps/pep-0693.rst +++ b/peps/pep-0693.rst @@ -32,6 +32,8 @@ Note: the dates below use a 17-month development period that results in a 12-month release cadence between feature versions, as defined by :pep:`602`. +.. feature release schedule + Actual: - 3.12 development begins: Sunday, 2022-05-08 @@ -52,9 +54,13 @@ Actual: - 3.12.0 candidate 3: Tuesday, 2023-09-19 - 3.12.0 final: Monday, 2023-10-02 +.. end of schedule + Bugfix releases --------------- +.. bugfix release schedule + Actual: - 3.12.1: Thursday, 2023-12-07 @@ -71,6 +77,8 @@ Expected: - 3.12.10: Tuesday, 2025-04-08 +.. end of schedule + Source-only security fix releases --------------------------------- diff --git a/peps/pep-0719.rst b/peps/pep-0719.rst index f75deeaad49..a07bd427337 100644 --- a/peps/pep-0719.rst +++ b/peps/pep-0719.rst @@ -33,6 +33,8 @@ Note: the dates below use a 17-month development period that results in a 12-month release cadence between feature versions, as defined by :pep:`602`. +.. feature release schedule + Actual: - 3.13 development begins: Monday, 2023-05-22 @@ -54,9 +56,13 @@ Actual: - 3.13.1: Tuesday, 2024-12-03 - 3.13.2: Tuesday, 2025-02-04 +.. end of schedule + Bugfix releases --------------- +.. bugfix release schedule + Expected: - 3.13.3: Tuesday, 2025-04-08 @@ -70,6 +76,8 @@ Expected: - 3.13.11: Tuesday, 2026-08-04 - 3.13.12: Tuesday, 2026-10-06 +.. end of schedule + Source-only security fix releases --------------------------------- diff --git a/peps/pep-0745.rst b/peps/pep-0745.rst index 6c79ff20b25..bdd7db1f7f9 100644 --- a/peps/pep-0745.rst +++ b/peps/pep-0745.rst @@ -33,6 +33,8 @@ The dates below use a 17-month development period that results in a 12-month release cadence between feature versions, as defined by :pep:`602`. +.. feature release schedule + Actual: - 3.14 development begins: Wednesday, 2024-05-08 @@ -55,6 +57,8 @@ Expected: - 3.14.0 candidate 2: Tuesday, 2025-08-26 - 3.14.0 final: Tuesday, 2025-10-07 +.. end of schedule + Subsequent bugfix releases every two months. From 3414c2e4e9e9c49dd8ae7b54f487d13cdb9d05d4 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 18:42:39 +0000 Subject: [PATCH 04/15] Integrate into the build process --- .pre-commit-config.yaml | 8 ++++++++ Makefile | 5 +++++ .../pep_zero_generator/pep_index_generator.py | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4f7f3380ee0..8a7f38e9c19 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -111,3 +111,11 @@ repos: language: "python" files: '^peps/pep-\d{4}\.rst$' require_serial: true + + # Hook to regenerate release schedules + - id: "regen-schedules" + name: "Regenerate release schedules from python-releases.toml" + entry: "python -m release_engineering update-peps" + language: "python" + pass_filenames: false + require_serial: true diff --git a/Makefile b/Makefile index 988eba44892..68428c22dea 100644 --- a/Makefile +++ b/Makefile @@ -107,6 +107,11 @@ test: venv spellcheck: _ensure-pre-commit $(VENVDIR)/bin/python3 -m pre_commit run --all-files --hook-stage manual codespell +## regen-all to regenerate generated source files +.PHONY: regen-all +regen-all: + $(PYTHON) -m release_engineering update-peps + .PHONY: help help : Makefile @echo "Please use \`make ' where is one of" diff --git a/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py b/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py index 2dc3e7ff52d..a9df9ea4d23 100644 --- a/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py +++ b/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py @@ -26,6 +26,7 @@ from pep_sphinx_extensions.pep_zero_generator import subindices from pep_sphinx_extensions.pep_zero_generator import writer from pep_sphinx_extensions.pep_zero_generator.constants import SUBINDICES_BY_TOPIC +from release_engineering.generate_release_cycle import create_release_cycle if TYPE_CHECKING: from sphinx.application import Sphinx @@ -73,3 +74,6 @@ def create_pep_zero(app: Sphinx, env: BuildEnvironment, docnames: list[str]) -> subindices.generate_subindices(SUBINDICES_BY_TOPIC, peps, docnames, env) write_peps_json(peps, Path(app.outdir)) + + release_cycle = create_release_cycle() + app.outdir.joinpath('release-cycle.json').write_text(release_cycle, encoding="utf-8") From d81a00da2b7b7162e7601773108f45fbb580413b Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 18:43:00 +0000 Subject: [PATCH 05/15] Regenerate release schedules --- peps/pep-0569.rst | 66 ++++++++++++++++++++++++++--------------------- peps/pep-0596.rst | 13 ++++++---- peps/pep-0619.rst | 4 +-- peps/pep-0664.rst | 6 ++--- peps/pep-0693.rst | 3 ++- peps/pep-0719.rst | 8 ++++-- 6 files changed, 57 insertions(+), 43 deletions(-) diff --git a/peps/pep-0569.rst b/peps/pep-0569.rst index 6057bcb0e69..7d9227cd21c 100644 --- a/peps/pep-0569.rst +++ b/peps/pep-0569.rst @@ -53,6 +53,8 @@ Release Schedule .. feature release schedule +Actual: + - 3.8 development begins: Monday, 2018-01-29 - 3.8.0 alpha 1: Sunday, 2019-02-03 - 3.8.0 alpha 2: Monday, 2019-02-25 @@ -60,7 +62,6 @@ Release Schedule - 3.8.0 alpha 4: Monday, 2019-05-06 - 3.8.0 beta 1: Tuesday, 2019-06-04 (No new features beyond this point.) - - 3.8.0 beta 2: Thursday, 2019-07-04 - 3.8.0 beta 3: Monday, 2019-07-29 - 3.8.0 beta 4: Friday, 2019-08-30 @@ -74,25 +75,29 @@ Bugfix releases .. bugfix release schedule -- 3.8.1rc1: Tuesday, 2019-12-10 -- 3.8.1: Wednesday, 2019-12-18 -- 3.8.2rc1: Monday, 2020-02-10 -- 3.8.2rc2: Monday, 2020-02-17 -- 3.8.2: Monday, 2020-02-24 -- 3.8.3rc1: Wednesday, 2020-04-29 -- 3.8.3: Wednesday, 2020-05-13 -- 3.8.4rc1: Tuesday, 2020-06-30 -- 3.8.4: Monday, 2020-07-13 -- 3.8.5: Monday, 2020-07-20 (security hotfix) -- 3.8.6rc1: Tuesday, 2020-09-08 -- 3.8.6: Thursday, 2020-09-24 -- 3.8.7rc1: Monday, 2020-12-07 -- 3.8.7: Monday, 2020-12-21 -- 3.8.8rc1: Tuesday, 2021-02-16 -- 3.8.8: Friday, 2021-02-19 -- 3.8.9: Friday, 2021-04-02 (security hotfix) -- 3.8.10: Monday, 2021-05-03 (final regular bugfix release with binary - installers) +Actual: + +- 3.8.1 candidate 1: Tuesday, 2019-12-10 +- 3.8.1 final: Wednesday, 2019-12-18 +- 3.8.2 candidate 1: Monday, 2020-02-10 +- 3.8.2 candidate 2: Monday, 2020-02-17 +- 3.8.2 final: Monday, 2020-02-24 +- 3.8.3 candidate 1: Wednesday, 2020-04-29 +- 3.8.3 final: Wednesday, 2020-05-13 +- 3.8.4 candidate 1: Tuesday, 2020-06-30 +- 3.8.4 final: Monday, 2020-07-13 +- 3.8.5 final: Monday, 2020-07-20 + (security hotfix) +- 3.8.6 candidate 1: Tuesday, 2020-09-08 +- 3.8.6 final: Thursday, 2020-09-24 +- 3.8.7 candidate 1: Monday, 2020-12-07 +- 3.8.7 final: Monday, 2020-12-21 +- 3.8.8 candidate 1: Tuesday, 2021-02-16 +- 3.8.8 final: Friday, 2021-02-19 +- 3.8.9 final: Friday, 2021-04-02 + (security hotfix) +- 3.8.10 final: Monday, 2021-05-03 + (final regular bugfix release with binary installers) .. end of schedule @@ -103,16 +108,17 @@ Provided irregularly on an "as-needed" basis until October 7th 2024. .. security release schedule -- 3.8.11: Monday, 2021-06-28 -- 3.8.12: Monday, 2021-08-30 -- 3.8.13: Wednesday, 2022-03-16 -- 3.8.14: Tuesday, 2022-09-06 -- 3.8.15: Tuesday, 2022-10-11 -- 3.8.16: Tuesday, 2022-12-06 -- 3.8.17: Tuesday, 2023-06-06 -- 3.8.18: Thursday, 2023-08-24 -- 3.8.19: Tuesday, 2024-03-19 -- 3.8.20: Friday, 2024-09-06 (final security release) +- 3.8.11 final: Monday, 2021-06-28 +- 3.8.12 final: Monday, 2021-08-30 +- 3.8.13 final: Wednesday, 2022-03-16 +- 3.8.14 final: Tuesday, 2022-09-06 +- 3.8.15 final: Tuesday, 2022-10-11 +- 3.8.16 final: Tuesday, 2022-12-06 +- 3.8.17 final: Tuesday, 2023-06-06 +- 3.8.18 final: Thursday, 2023-08-24 +- 3.8.19 final: Tuesday, 2024-03-19 +- 3.8.20 final: Friday, 2024-09-06 + (final security release) .. end of schedule diff --git a/peps/pep-0596.rst b/peps/pep-0596.rst index 6beb8552ed9..45ad90c4174 100644 --- a/peps/pep-0596.rst +++ b/peps/pep-0596.rst @@ -75,18 +75,21 @@ Actual: - 3.9.1 final: Monday, 2020-12-07 - 3.9.2 candidate 1: Tuesday, 2021-02-16 - 3.9.2 final: Friday, 2021-02-19 -- 3.9.3: Friday, 2021-04-02 (security hotfix; recalled due to bpo-43710) -- 3.9.4: Sunday, 2021-04-04 (ABI compatibility hotfix) +- 3.9.3: Friday, 2021-04-02 + (security hotfix; recalled due to bpo-43710) +- 3.9.4: Sunday, 2021-04-04 + (ABI compatibility hotfix) - 3.9.5: Monday, 2021-05-03 - 3.9.6: Monday, 2021-06-28 - 3.9.7: Monday, 2021-08-30 -- 3.9.8: Friday, 2021-11-05 (recalled due to bpo-45235) +- 3.9.8: Friday, 2021-11-05 + (recalled due to bpo-45235) - 3.9.9: Monday, 2021-11-15 - 3.9.10: Friday, 2022-01-14 - 3.9.11: Wednesday, 2022-03-16 - 3.9.12: Wednesday, 2022-03-23 -- 3.9.13: Tuesday, 2022-05-17 (final regular bugfix release with binary - installers) +- 3.9.13: Tuesday, 2022-05-17 + (final regular bugfix release with binary installers) .. end of schedule diff --git a/peps/pep-0619.rst b/peps/pep-0619.rst index e96e295190a..b59b2bf92f5 100644 --- a/peps/pep-0619.rst +++ b/peps/pep-0619.rst @@ -77,8 +77,8 @@ Actual: - 3.10.8: Tuesday, 2022-10-11 - 3.10.9: Tuesday, 2022-12-06 - 3.10.10: Wednesday, 2023-02-08 -- 3.10.11: Wednesday, 2023-04-05 (final regular bugfix release with binary - installers) +- 3.10.11: Wednesday, 2023-04-05 + (final regular bugfix release with binary installers) .. end of schedule diff --git a/peps/pep-0664.rst b/peps/pep-0664.rst index aecf3c7ccf3..1a996a841bc 100644 --- a/peps/pep-0664.rst +++ b/peps/pep-0664.rst @@ -58,7 +58,7 @@ Actual: - 3.11.0 beta 5: Tuesday, 2022-07-26 - 3.11.0 candidate 1: Monday, 2022-08-08 - 3.11.0 candidate 2: Monday, 2022-09-12 -- 3.11.0 final: Monday, 2022-10-24 +- 3.11.0 final: Monday, 2022-10-24 .. end of schedule @@ -77,8 +77,8 @@ Actual: - 3.11.6: Monday, 2023-10-02 - 3.11.7: Monday, 2023-12-04 - 3.11.8: Tuesday, 2024-02-06 -- 3.11.9: Tuesday, 2024-04-02 (final regular bugfix release with binary - installers) +- 3.11.9: Tuesday, 2024-04-02 + (final regular bugfix release with binary installers) .. end of schedule diff --git a/peps/pep-0693.rst b/peps/pep-0693.rst index 6e8645a73af..77598f021fe 100644 --- a/peps/pep-0693.rst +++ b/peps/pep-0693.rst @@ -52,7 +52,7 @@ Actual: - 3.12.0 candidate 1: Sunday, 2023-08-06 - 3.12.0 candidate 2: Wednesday, 2023-09-06 - 3.12.0 candidate 3: Tuesday, 2023-09-19 -- 3.12.0 final: Monday, 2023-10-02 +- 3.12.0 final: Monday, 2023-10-02 .. end of schedule @@ -76,6 +76,7 @@ Actual: Expected: - 3.12.10: Tuesday, 2025-04-08 + (final regular bugfix release with binary installers) .. end of schedule diff --git a/peps/pep-0719.rst b/peps/pep-0719.rst index a07bd427337..2f07a5e828a 100644 --- a/peps/pep-0719.rst +++ b/peps/pep-0719.rst @@ -53,8 +53,6 @@ Actual: - 3.13.0 candidate 2: Friday, 2024-09-06 - 3.13.0 candidate 3: Tuesday, 2024-10-01 - 3.13.0 final: Monday, 2024-10-07 -- 3.13.1: Tuesday, 2024-12-03 -- 3.13.2: Tuesday, 2025-02-04 .. end of schedule @@ -63,6 +61,11 @@ Bugfix releases .. bugfix release schedule +Actual: + +- 3.13.1: Tuesday, 2024-12-03 +- 3.13.2: Tuesday, 2025-02-04 + Expected: - 3.13.3: Tuesday, 2025-04-08 @@ -75,6 +78,7 @@ Expected: - 3.13.10: Tuesday, 2026-06-09 - 3.13.11: Tuesday, 2026-08-04 - 3.13.12: Tuesday, 2026-10-06 + (final regular bugfix release with binary installers) .. end of schedule From 27be901702dd77564efc2cf65882fdfff81c8509 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 18:43:37 +0000 Subject: [PATCH 06/15] Standardise versions --- release_engineering/python-releases.toml | 136 +++++++++++------------ 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/release_engineering/python-releases.toml b/release_engineering/python-releases.toml index 5ac36734ffb..b9384df01f9 100644 --- a/release_engineering/python-releases.toml +++ b/release_engineering/python-releases.toml @@ -2542,100 +2542,100 @@ state = "actual" date = 2021-02-19 [[release."3.9"]] -stage = "3.9.3" +stage = "3.9.3 final" state = "actual" date = 2021-04-02 note = "security hotfix; recalled due to bpo-43710" [[release."3.9"]] -stage = "3.9.4" +stage = "3.9.4 final" state = "actual" date = 2021-04-04 note = "ABI compatibility hotfix" [[release."3.9"]] -stage = "3.9.5" +stage = "3.9.5 final" state = "actual" date = 2021-05-03 [[release."3.9"]] -stage = "3.9.6" +stage = "3.9.6 final" state = "actual" date = 2021-06-28 [[release."3.9"]] -stage = "3.9.7" +stage = "3.9.7 final" state = "actual" date = 2021-08-30 [[release."3.9"]] -stage = "3.9.8" +stage = "3.9.8 final" state = "actual" date = 2021-11-05 note = "recalled due to bpo-45235" [[release."3.9"]] -stage = "3.9.9" +stage = "3.9.9 final" state = "actual" date = 2021-11-15 [[release."3.9"]] -stage = "3.9.10" +stage = "3.9.10 final" state = "actual" date = 2022-01-14 [[release."3.9"]] -stage = "3.9.11" +stage = "3.9.11 final" state = "actual" date = 2022-03-16 [[release."3.9"]] -stage = "3.9.12" +stage = "3.9.12 final" state = "actual" date = 2022-03-23 [[release."3.9"]] -stage = "3.9.13" +stage = "3.9.13 final" state = "actual" date = 2022-05-17 [[release."3.9"]] -stage = "3.9.14" +stage = "3.9.14 final" state = "actual" date = 2022-09-06 [[release."3.9"]] -stage = "3.9.15" +stage = "3.9.15 final" state = "actual" date = 2022-10-11 [[release."3.9"]] -stage = "3.9.16" +stage = "3.9.16 final" state = "actual" date = 2022-12-06 [[release."3.9"]] -stage = "3.9.17" +stage = "3.9.17 final" state = "actual" date = 2023-06-06 [[release."3.9"]] -stage = "3.9.18" +stage = "3.9.18 final" state = "actual" date = 2023-08-24 [[release."3.9"]] -stage = "3.9.19" +stage = "3.9.19 final" state = "actual" date = 2024-03-19 [[release."3.9"]] -stage = "3.9.20" +stage = "3.9.20 final" state = "actual" date = 2024-09-06 [[release."3.9"]] -stage = "3.9.21" +stage = "3.9.21 final" state = "actual" date = 2024-12-03 @@ -2723,82 +2723,82 @@ state = "actual" date = 2021-10-04 [[release."3.10"]] -stage = "3.10.1" +stage = "3.10.1 final" state = "actual" date = 2021-12-06 [[release."3.10"]] -stage = "3.10.2" +stage = "3.10.2 final" state = "actual" date = 2022-01-14 [[release."3.10"]] -stage = "3.10.3" +stage = "3.10.3 final" state = "actual" date = 2022-03-16 [[release."3.10"]] -stage = "3.10.4" +stage = "3.10.4 final" state = "actual" date = 2022-03-24 [[release."3.10"]] -stage = "3.10.5" +stage = "3.10.5 final" state = "actual" date = 2022-06-06 [[release."3.10"]] -stage = "3.10.6" +stage = "3.10.6 final" state = "actual" date = 2022-08-02 [[release."3.10"]] -stage = "3.10.7" +stage = "3.10.7 final" state = "actual" date = 2022-09-06 [[release."3.10"]] -stage = "3.10.8" +stage = "3.10.8 final" state = "actual" date = 2022-10-11 [[release."3.10"]] -stage = "3.10.9" +stage = "3.10.9 final" state = "actual" date = 2022-12-06 [[release."3.10"]] -stage = "3.10.10" +stage = "3.10.10 final" state = "actual" date = 2023-02-08 [[release."3.10"]] -stage = "3.10.11" +stage = "3.10.11 final" state = "actual" date = 2023-04-05 [[release."3.10"]] -stage = "3.10.12" +stage = "3.10.12 final" state = "actual" date = 2023-06-06 [[release."3.10"]] -stage = "3.10.13" +stage = "3.10.13 final" state = "actual" date = 2023-08-24 [[release."3.10"]] -stage = "3.10.14" +stage = "3.10.14 final" state = "actual" date = 2024-03-19 [[release."3.10"]] -stage = "3.10.15" +stage = "3.10.15 final" state = "actual" date = 2024-09-07 [[release."3.10"]] -stage = "3.10.16" +stage = "3.10.16 final" state = "actual" date = 2024-12-03 @@ -2891,57 +2891,57 @@ state = "actual" date = 2022-10-24 [[release."3.11"]] -stage = "3.11.1" +stage = "3.11.1 final" state = "actual" date = 2022-12-06 [[release."3.11"]] -stage = "3.11.2" +stage = "3.11.2 final" state = "actual" date = 2023-02-08 [[release."3.11"]] -stage = "3.11.3" +stage = "3.11.3 final" state = "actual" date = 2023-04-05 [[release."3.11"]] -stage = "3.11.4" +stage = "3.11.4 final" state = "actual" date = 2023-06-06 [[release."3.11"]] -stage = "3.11.5" +stage = "3.11.5 final" state = "actual" date = 2023-08-24 [[release."3.11"]] -stage = "3.11.6" +stage = "3.11.6 final" state = "actual" date = 2023-10-02 [[release."3.11"]] -stage = "3.11.7" +stage = "3.11.7 final" state = "actual" date = 2023-12-04 [[release."3.11"]] -stage = "3.11.8" +stage = "3.11.8 final" state = "actual" date = 2024-02-06 [[release."3.11"]] -stage = "3.11.9" +stage = "3.11.9 final" state = "actual" date = 2024-04-02 [[release."3.11"]] -stage = "3.11.10" +stage = "3.11.10 final" state = "actual" date = 2024-09-07 [[release."3.11"]] -stage = "3.11.11" +stage = "3.11.11 final" state = "actual" date = 2024-12-03 @@ -3034,52 +3034,52 @@ state = "actual" date = 2023-10-02 [[release."3.12"]] -stage = "3.12.1" +stage = "3.12.1 final" state = "actual" date = 2023-12-07 [[release."3.12"]] -stage = "3.12.2" +stage = "3.12.2 final" state = "actual" date = 2024-02-06 [[release."3.12"]] -stage = "3.12.3" +stage = "3.12.3 final" state = "actual" date = 2024-04-09 [[release."3.12"]] -stage = "3.12.4" +stage = "3.12.4 final" state = "actual" date = 2024-06-06 [[release."3.12"]] -stage = "3.12.5" +stage = "3.12.5 final" state = "actual" date = 2024-08-06 [[release."3.12"]] -stage = "3.12.6" +stage = "3.12.6 final" state = "actual" date = 2024-09-06 [[release."3.12"]] -stage = "3.12.7" +stage = "3.12.7 final" state = "actual" date = 2024-10-01 [[release."3.12"]] -stage = "3.12.8" +stage = "3.12.8 final" state = "actual" date = 2024-12-03 [[release."3.12"]] -stage = "3.12.9" +stage = "3.12.9 final" state = "actual" date = 2025-02-04 [[release."3.12"]] -stage = "3.12.10" +stage = "3.12.10 final" state = "expected" date = 2025-04-08 @@ -3167,62 +3167,62 @@ state = "actual" date = 2024-10-07 [[release."3.13"]] -stage = "3.13.1" +stage = "3.13.1 final" state = "actual" date = 2024-12-03 [[release."3.13"]] -stage = "3.13.2" +stage = "3.13.2 final" state = "actual" date = 2025-02-04 [[release."3.13"]] -stage = "3.13.3" +stage = "3.13.3 final" state = "expected" date = 2025-04-08 [[release."3.13"]] -stage = "3.13.4" +stage = "3.13.4 final" state = "expected" date = 2025-06-03 [[release."3.13"]] -stage = "3.13.5" +stage = "3.13.5 final" state = "expected" date = 2025-08-05 [[release."3.13"]] -stage = "3.13.6" +stage = "3.13.6 final" state = "expected" date = 2025-10-07 [[release."3.13"]] -stage = "3.13.7" +stage = "3.13.7 final" state = "expected" date = 2025-12-02 [[release."3.13"]] -stage = "3.13.8" +stage = "3.13.8 final" state = "expected" date = 2026-02-03 [[release."3.13"]] -stage = "3.13.9" +stage = "3.13.9 final" state = "expected" date = 2026-04-07 [[release."3.13"]] -stage = "3.13.10" +stage = "3.13.10 final" state = "expected" date = 2026-06-09 [[release."3.13"]] -stage = "3.13.11" +stage = "3.13.11 final" state = "expected" date = 2026-08-04 [[release."3.13"]] -stage = "3.13.12" +stage = "3.13.12 final" state = "expected" date = 2026-10-06 From 7836259e8e5895c60b72b914c5543cb49cc23733 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 18:43:45 +0000 Subject: [PATCH 07/15] Regenerate release schedules --- peps/pep-0596.rst | 38 +++++++++++++++++++------------------- peps/pep-0619.rst | 32 ++++++++++++++++---------------- peps/pep-0664.rst | 22 +++++++++++----------- peps/pep-0693.rst | 20 ++++++++++---------- peps/pep-0719.rst | 24 ++++++++++++------------ 5 files changed, 68 insertions(+), 68 deletions(-) diff --git a/peps/pep-0596.rst b/peps/pep-0596.rst index 45ad90c4174..6f709cbdfde 100644 --- a/peps/pep-0596.rst +++ b/peps/pep-0596.rst @@ -75,20 +75,20 @@ Actual: - 3.9.1 final: Monday, 2020-12-07 - 3.9.2 candidate 1: Tuesday, 2021-02-16 - 3.9.2 final: Friday, 2021-02-19 -- 3.9.3: Friday, 2021-04-02 +- 3.9.3 final: Friday, 2021-04-02 (security hotfix; recalled due to bpo-43710) -- 3.9.4: Sunday, 2021-04-04 +- 3.9.4 final: Sunday, 2021-04-04 (ABI compatibility hotfix) -- 3.9.5: Monday, 2021-05-03 -- 3.9.6: Monday, 2021-06-28 -- 3.9.7: Monday, 2021-08-30 -- 3.9.8: Friday, 2021-11-05 +- 3.9.5 final: Monday, 2021-05-03 +- 3.9.6 final: Monday, 2021-06-28 +- 3.9.7 final: Monday, 2021-08-30 +- 3.9.8 final: Friday, 2021-11-05 (recalled due to bpo-45235) -- 3.9.9: Monday, 2021-11-15 -- 3.9.10: Friday, 2022-01-14 -- 3.9.11: Wednesday, 2022-03-16 -- 3.9.12: Wednesday, 2022-03-23 -- 3.9.13: Tuesday, 2022-05-17 +- 3.9.9 final: Monday, 2021-11-15 +- 3.9.10 final: Friday, 2022-01-14 +- 3.9.11 final: Wednesday, 2022-03-16 +- 3.9.12 final: Wednesday, 2022-03-23 +- 3.9.13 final: Tuesday, 2022-05-17 (final regular bugfix release with binary installers) .. end of schedule @@ -101,14 +101,14 @@ Provided irregularly on an "as-needed" basis until October 2025. .. security release schedule -- 3.9.14: Tuesday, 2022-09-06 -- 3.9.15: Tuesday, 2022-10-11 -- 3.9.16: Tuesday, 2022-12-06 -- 3.9.17: Tuesday, 2023-06-06 -- 3.9.18: Thursday, 2023-08-24 -- 3.9.19: Tuesday, 2024-03-19 -- 3.9.20: Friday, 2024-09-06 -- 3.9.21: Tuesday, 2024-12-03 +- 3.9.14 final: Tuesday, 2022-09-06 +- 3.9.15 final: Tuesday, 2022-10-11 +- 3.9.16 final: Tuesday, 2022-12-06 +- 3.9.17 final: Tuesday, 2023-06-06 +- 3.9.18 final: Thursday, 2023-08-24 +- 3.9.19 final: Tuesday, 2024-03-19 +- 3.9.20 final: Friday, 2024-09-06 +- 3.9.21 final: Tuesday, 2024-12-03 .. end of schedule diff --git a/peps/pep-0619.rst b/peps/pep-0619.rst index b59b2bf92f5..2504a9725e9 100644 --- a/peps/pep-0619.rst +++ b/peps/pep-0619.rst @@ -67,17 +67,17 @@ Bugfix releases Actual: -- 3.10.1: Monday, 2021-12-06 -- 3.10.2: Friday, 2022-01-14 -- 3.10.3: Wednesday, 2022-03-16 -- 3.10.4: Thursday, 2022-03-24 -- 3.10.5: Monday, 2022-06-06 -- 3.10.6: Tuesday, 2022-08-02 -- 3.10.7: Tuesday, 2022-09-06 -- 3.10.8: Tuesday, 2022-10-11 -- 3.10.9: Tuesday, 2022-12-06 -- 3.10.10: Wednesday, 2023-02-08 -- 3.10.11: Wednesday, 2023-04-05 +- 3.10.1 final: Monday, 2021-12-06 +- 3.10.2 final: Friday, 2022-01-14 +- 3.10.3 final: Wednesday, 2022-03-16 +- 3.10.4 final: Thursday, 2022-03-24 +- 3.10.5 final: Monday, 2022-06-06 +- 3.10.6 final: Tuesday, 2022-08-02 +- 3.10.7 final: Tuesday, 2022-09-06 +- 3.10.8 final: Tuesday, 2022-10-11 +- 3.10.9 final: Tuesday, 2022-12-06 +- 3.10.10 final: Wednesday, 2023-02-08 +- 3.10.11 final: Wednesday, 2023-04-05 (final regular bugfix release with binary installers) .. end of schedule @@ -89,11 +89,11 @@ Provided irregularly on an "as-needed" basis until October 2026. .. security release schedule -- 3.10.12: Tuesday, 2023-06-06 -- 3.10.13: Thursday, 2023-08-24 -- 3.10.14: Tuesday, 2024-03-19 -- 3.10.15: Saturday, 2024-09-07 -- 3.10.16: Tuesday, 2024-12-03 +- 3.10.12 final: Tuesday, 2023-06-06 +- 3.10.13 final: Thursday, 2023-08-24 +- 3.10.14 final: Tuesday, 2024-03-19 +- 3.10.15 final: Saturday, 2024-09-07 +- 3.10.16 final: Tuesday, 2024-12-03 .. end of schedule diff --git a/peps/pep-0664.rst b/peps/pep-0664.rst index 1a996a841bc..55eadec04d9 100644 --- a/peps/pep-0664.rst +++ b/peps/pep-0664.rst @@ -69,15 +69,15 @@ Bugfix releases Actual: -- 3.11.1: Tuesday, 2022-12-06 -- 3.11.2: Wednesday, 2023-02-08 -- 3.11.3: Wednesday, 2023-04-05 -- 3.11.4: Tuesday, 2023-06-06 -- 3.11.5: Thursday, 2023-08-24 -- 3.11.6: Monday, 2023-10-02 -- 3.11.7: Monday, 2023-12-04 -- 3.11.8: Tuesday, 2024-02-06 -- 3.11.9: Tuesday, 2024-04-02 +- 3.11.1 final: Tuesday, 2022-12-06 +- 3.11.2 final: Wednesday, 2023-02-08 +- 3.11.3 final: Wednesday, 2023-04-05 +- 3.11.4 final: Tuesday, 2023-06-06 +- 3.11.5 final: Thursday, 2023-08-24 +- 3.11.6 final: Monday, 2023-10-02 +- 3.11.7 final: Monday, 2023-12-04 +- 3.11.8 final: Tuesday, 2024-02-06 +- 3.11.9 final: Tuesday, 2024-04-02 (final regular bugfix release with binary installers) .. end of schedule @@ -89,8 +89,8 @@ Provided irregularly on an "as-needed" basis until October 2027. .. security release schedule -- 3.11.10: Saturday, 2024-09-07 -- 3.11.11: Tuesday, 2024-12-03 +- 3.11.10 final: Saturday, 2024-09-07 +- 3.11.11 final: Tuesday, 2024-12-03 .. end of schedule diff --git a/peps/pep-0693.rst b/peps/pep-0693.rst index 77598f021fe..a2a6558c0fa 100644 --- a/peps/pep-0693.rst +++ b/peps/pep-0693.rst @@ -63,19 +63,19 @@ Bugfix releases Actual: -- 3.12.1: Thursday, 2023-12-07 -- 3.12.2: Tuesday, 2024-02-06 -- 3.12.3: Tuesday, 2024-04-09 -- 3.12.4: Thursday, 2024-06-06 -- 3.12.5: Tuesday, 2024-08-06 -- 3.12.6: Friday, 2024-09-06 -- 3.12.7: Tuesday, 2024-10-01 -- 3.12.8: Tuesday, 2024-12-03 -- 3.12.9: Tuesday, 2025-02-04 +- 3.12.1 final: Thursday, 2023-12-07 +- 3.12.2 final: Tuesday, 2024-02-06 +- 3.12.3 final: Tuesday, 2024-04-09 +- 3.12.4 final: Thursday, 2024-06-06 +- 3.12.5 final: Tuesday, 2024-08-06 +- 3.12.6 final: Friday, 2024-09-06 +- 3.12.7 final: Tuesday, 2024-10-01 +- 3.12.8 final: Tuesday, 2024-12-03 +- 3.12.9 final: Tuesday, 2025-02-04 Expected: -- 3.12.10: Tuesday, 2025-04-08 +- 3.12.10 final: Tuesday, 2025-04-08 (final regular bugfix release with binary installers) .. end of schedule diff --git a/peps/pep-0719.rst b/peps/pep-0719.rst index 2f07a5e828a..f713248a19d 100644 --- a/peps/pep-0719.rst +++ b/peps/pep-0719.rst @@ -63,21 +63,21 @@ Bugfix releases Actual: -- 3.13.1: Tuesday, 2024-12-03 -- 3.13.2: Tuesday, 2025-02-04 +- 3.13.1 final: Tuesday, 2024-12-03 +- 3.13.2 final: Tuesday, 2025-02-04 Expected: -- 3.13.3: Tuesday, 2025-04-08 -- 3.13.4: Tuesday, 2025-06-03 -- 3.13.5: Tuesday, 2025-08-05 -- 3.13.6: Tuesday, 2025-10-07 -- 3.13.7: Tuesday, 2025-12-02 -- 3.13.8: Tuesday, 2026-02-03 -- 3.13.9: Tuesday, 2026-04-07 -- 3.13.10: Tuesday, 2026-06-09 -- 3.13.11: Tuesday, 2026-08-04 -- 3.13.12: Tuesday, 2026-10-06 +- 3.13.3 final: Tuesday, 2025-04-08 +- 3.13.4 final: Tuesday, 2025-06-03 +- 3.13.5 final: Tuesday, 2025-08-05 +- 3.13.6 final: Tuesday, 2025-10-07 +- 3.13.7 final: Tuesday, 2025-12-02 +- 3.13.8 final: Tuesday, 2026-02-03 +- 3.13.9 final: Tuesday, 2026-04-07 +- 3.13.10 final: Tuesday, 2026-06-09 +- 3.13.11 final: Tuesday, 2026-08-04 +- 3.13.12 final: Tuesday, 2026-10-06 (final regular bugfix release with binary installers) .. end of schedule From 9a70c0a0118320b8883ba19aba55f3a03ef3c962 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 18:59:02 +0000 Subject: [PATCH 08/15] Temporary workaround for tests on 3.9 & 3.10 --- .../pep_zero_generator/pep_index_generator.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py b/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py index a9df9ea4d23..5eee8822ba6 100644 --- a/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py +++ b/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py @@ -19,6 +19,7 @@ import json import os +import sys from pathlib import Path from typing import TYPE_CHECKING @@ -26,7 +27,11 @@ from pep_sphinx_extensions.pep_zero_generator import subindices from pep_sphinx_extensions.pep_zero_generator import writer from pep_sphinx_extensions.pep_zero_generator.constants import SUBINDICES_BY_TOPIC -from release_engineering.generate_release_cycle import create_release_cycle +if sys.version_info >= (3, 11): + from release_engineering.generate_release_cycle import create_release_cycle +else: + def create_release_cycle(): + return '' if TYPE_CHECKING: from sphinx.application import Sphinx From 2207db2b170fe69000e65cbaa0136385eab93908 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 21:35:15 +0000 Subject: [PATCH 09/15] Add 1.6.1 --- release_engineering/python-releases.toml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/release_engineering/python-releases.toml b/release_engineering/python-releases.toml index b9384df01f9..140a84fca6f 100644 --- a/release_engineering/python-releases.toml +++ b/release_engineering/python-releases.toml @@ -21,6 +21,11 @@ stage = "1.6 final" state = "actual" date = 2000-09-05 +[[release."1.6"]] +stage = "1.6.1 final" +state = "actual" +date = 2000-09-05 + # -- Python 2.0 -------------------------------------------------------------- [metadata."2.0"] From 674eba11351261591f8d540e05d663363f6138a4 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 21:35:26 +0000 Subject: [PATCH 10/15] Standardise versions --- release_engineering/python-releases.toml | 178 +++++++++++------------ 1 file changed, 89 insertions(+), 89 deletions(-) diff --git a/release_engineering/python-releases.toml b/release_engineering/python-releases.toml index 140a84fca6f..a40a8dc6d8d 100644 --- a/release_engineering/python-releases.toml +++ b/release_engineering/python-releases.toml @@ -12,12 +12,12 @@ end-of-bugfix = 2000-09-05 end-of-life = 2000-09-05 [[release."1.6"]] -stage = "1.6 beta 1" +stage = "1.6.0 beta 1" state = "actual" date = 2000-08-03 [[release."1.6"]] -stage = "1.6 final" +stage = "1.6.0 final" state = "actual" date = 2000-09-05 @@ -40,22 +40,22 @@ end-of-bugfix = 2001-06-22 end-of-life = 2001-06-22 [[release."2.0"]] -stage = "2.0 beta 1" +stage = "2.0.0 beta 1" state = "actual" date = 2000-09-05 [[release."2.0"]] -stage = "2.0 beta 2" +stage = "2.0.0 beta 2" state = "actual" date = 2000-09-26 [[release."2.0"]] -stage = "2.0 candidate 1" +stage = "2.0.0 candidate 1" state = "actual" date = 2000-10-09 [[release."2.0"]] -stage = "2.0 final" +stage = "2.0.0 final" state = "actual" date = 2000-10-16 @@ -87,37 +87,37 @@ end-of-bugfix = 2002-04-09 end-of-life = 2002-04-09 [[release."2.1"]] -stage = "2.1 alpha 1" +stage = "2.1.0 alpha 1" state = "actual" date = 2001-01-22 [[release."2.1"]] -stage = "2.1 alpha 2" +stage = "2.1.0 alpha 2" state = "actual" date = 2001-02-02 [[release."2.1"]] -stage = "2.1 beta 1" +stage = "2.1.0 beta 1" state = "actual" date = 2001-03-02 [[release."2.1"]] -stage = "2.1 beta 2" +stage = "2.1.0 beta 2" state = "actual" date = 2001-03-23 [[release."2.1"]] -stage = "2.1 candidate 1" +stage = "2.1.0 candidate 1" state = "actual" date = 2001-04-13 [[release."2.1"]] -stage = "2.1 candidate 2" +stage = "2.1.0 candidate 2" state = "actual" date = 2001-04-15 [[release."2.1"]] -stage = "2.1 final" +stage = "2.1.0 final" state = "actual" date = 2001-04-17 @@ -166,42 +166,42 @@ end-of-bugfix = 2003-05-30 end-of-life = 2003-05-30 [[release."2.2"]] -stage = "2.2 alpha 1" +stage = "2.2.0 alpha 1" state = "actual" date = 2001-07-18 [[release."2.2"]] -stage = "2.2 alpha 2" +stage = "2.2.0 alpha 2" state = "actual" date = 2001-08-22 [[release."2.2"]] -stage = "2.2 alpha 3" +stage = "2.2.0 alpha 3" state = "actual" date = 2001-09-07 [[release."2.2"]] -stage = "2.2 alpha 4" +stage = "2.2.0 alpha 4" state = "actual" date = 2001-09-28 [[release."2.2"]] -stage = "2.2 beta 1" +stage = "2.2.0 beta 1" state = "actual" date = 2001-10-19 [[release."2.2"]] -stage = "2.2 beta 2" +stage = "2.2.0 beta 2" state = "actual" date = 2001-11-14 [[release."2.2"]] -stage = "2.2 candidate 1" +stage = "2.2.0 candidate 1" state = "actual" date = 2001-12-14 [[release."2.2"]] -stage = "2.2 final" +stage = "2.2.0 final" state = "actual" date = 2001-12-21 @@ -262,37 +262,37 @@ end-of-bugfix = 2008-03-11 end-of-life = 2008-03-11 [[release."2.3"]] -stage = "2.3 alpha 1" +stage = "2.3.0 alpha 1" state = "actual" date = 2002-12-31 [[release."2.3"]] -stage = "2.3 alpha 2" +stage = "2.3.0 alpha 2" state = "actual" date = 2003-02-19 [[release."2.3"]] -stage = "2.3 beta 1" +stage = "2.3.0 beta 1" state = "actual" date = 2003-04-25 [[release."2.3"]] -stage = "2.3 beta 2" +stage = "2.3.0 beta 2" state = "actual" date = 2003-06-29 [[release."2.3"]] -stage = "2.3 candidate 1" +stage = "2.3.0 candidate 1" state = "actual" date = 2003-07-18 [[release."2.3"]] -stage = "2.3 candidate 2" +stage = "2.3.0 candidate 2" state = "actual" date = 2003-07-24 [[release."2.3"]] -stage = "2.3 final" +stage = "2.3.0 final" state = "actual" date = 2003-07-29 @@ -396,37 +396,37 @@ end-of-bugfix = 2008-12-19 end-of-life = 2008-12-19 [[release."2.4"]] -stage = "2.4 alpha 1" +stage = "2.4.0 alpha 1" state = "actual" date = 2004-07-09 [[release."2.4"]] -stage = "2.4 alpha 2" +stage = "2.4.0 alpha 2" state = "actual" date = 2004-08-05 [[release."2.4"]] -stage = "2.4 alpha 3" +stage = "2.4.0 alpha 3" state = "actual" date = 2004-09-03 [[release."2.4"]] -stage = "2.4 beta 1" +stage = "2.4.0 beta 1" state = "actual" date = 2004-10-15 [[release."2.4"]] -stage = "2.4 beta 2" +stage = "2.4.0 beta 2" state = "actual" date = 2004-11-03 [[release."2.4"]] -stage = "2.4 candidate 1" +stage = "2.4.0 candidate 1" state = "actual" date = 2004-11-18 [[release."2.4"]] -stage = "2.4 final" +stage = "2.4.0 final" state = "actual" date = 2004-11-30 @@ -523,42 +523,42 @@ end-of-bugfix = 2011-05-26 end-of-life = 2011-05-26 [[release."2.5"]] -stage = "2.5 alpha 1" +stage = "2.5.0 alpha 1" state = "actual" date = 2006-04-05 [[release."2.5"]] -stage = "2.5 alpha 2" +stage = "2.5.0 alpha 2" state = "actual" date = 2006-04-27 [[release."2.5"]] -stage = "2.5 beta 1" +stage = "2.5.0 beta 1" state = "actual" date = 2006-06-20 [[release."2.5"]] -stage = "2.5 beta 2" +stage = "2.5.0 beta 2" state = "actual" date = 2006-07-11 [[release."2.5"]] -stage = "2.5 beta 3" +stage = "2.5.0 beta 3" state = "actual" date = 2006-08-03 [[release."2.5"]] -stage = "2.5 candidate 1" +stage = "2.5.0 candidate 1" state = "actual" date = 2006-08-17 [[release."2.5"]] -stage = "2.5 candidate 2" +stage = "2.5.0 candidate 2" state = "actual" date = 2006-09-12 [[release."2.5"]] -stage = "2.5 final" +stage = "2.5.0 final" state = "actual" date = 2006-09-19 @@ -650,47 +650,47 @@ end-of-bugfix = 2010-08-24 end-of-life = 2013-10-29 [[release."2.6"]] -stage = "2.6 alpha 1" +stage = "2.6.0 alpha 1" state = "actual" date = 2008-02-29 [[release."2.6"]] -stage = "2.6 alpha 2" +stage = "2.6.0 alpha 2" state = "actual" date = 2008-04-02 [[release."2.6"]] -stage = "2.6 alpha 3" +stage = "2.6.0 alpha 3" state = "actual" date = 2008-05-08 [[release."2.6"]] -stage = "2.6 beta 1" +stage = "2.6.0 beta 1" state = "actual" date = 2008-06-18 [[release."2.6"]] -stage = "2.6 beta 2" +stage = "2.6.0 beta 2" state = "actual" date = 2008-07-17 [[release."2.6"]] -stage = "2.6 beta 3" +stage = "2.6.0 beta 3" state = "actual" date = 2008-08-20 [[release."2.6"]] -stage = "2.6 candidate 1" +stage = "2.6.0 candidate 1" state = "actual" date = 2008-09-12 [[release."2.6"]] -stage = "2.6 candidate 2" +stage = "2.6.0 candidate 2" state = "actual" date = 2008-09-17 [[release."2.6"]] -stage = "2.6 final" +stage = "2.6.0 final" state = "actual" date = 2008-10-01 @@ -818,47 +818,47 @@ end-of-bugfix = 2020-01-01 end-of-life = 2020-01-01 [[release."2.7"]] -stage = "2.7 alpha 1" +stage = "2.7.0 alpha 1" state = "actual" date = 2009-12-05 [[release."2.7"]] -stage = "2.7 alpha 2" +stage = "2.7.0 alpha 2" state = "actual" date = 2010-01-09 [[release."2.7"]] -stage = "2.7 alpha 3" +stage = "2.7.0 alpha 3" state = "actual" date = 2010-02-06 [[release."2.7"]] -stage = "2.7 alpha 4" +stage = "2.7.0 alpha 4" state = "actual" date = 2010-03-06 [[release."2.7"]] -stage = "2.7 beta 1" +stage = "2.7.0 beta 1" state = "actual" date = 2010-04-03 [[release."2.7"]] -stage = "2.7 beta 2" +stage = "2.7.0 beta 2" state = "actual" date = 2010-05-08 [[release."2.7"]] -stage = "2.7 candidate 1" +stage = "2.7.0 candidate 1" state = "actual" date = 2010-06-05 [[release."2.7"]] -stage = "2.7 candidate 2" +stage = "2.7.0 candidate 2" state = "actual" date = 2010-06-19 [[release."2.7"]] -stage = "2.7 final" +stage = "2.7.0 final" state = "actual" date = 2010-07-03 @@ -1046,62 +1046,62 @@ end-of-bugfix = 2009-06-27 end-of-life = 2009-06-27 [[release."3.0"]] -stage = "3.0 alpha 1" +stage = "3.0.0 alpha 1" state = "actual" date = 2007-08-31 [[release."3.0"]] -stage = "3.0 alpha 2" +stage = "3.0.0 alpha 2" state = "actual" date = 2007-12-06 [[release."3.0"]] -stage = "3.0 alpha 3" +stage = "3.0.0 alpha 3" state = "actual" date = 2008-02-29 [[release."3.0"]] -stage = "3.0 alpha 4" +stage = "3.0.0 alpha 4" state = "actual" date = 2008-04-02 [[release."3.0"]] -stage = "3.0 alpha 5" +stage = "3.0.0 alpha 5" state = "actual" date = 2008-05-08 [[release."3.0"]] -stage = "3.0 beta 1" +stage = "3.0.0 beta 1" state = "actual" date = 2008-06-18 [[release."3.0"]] -stage = "3.0 beta 2" +stage = "3.0.0 beta 2" state = "actual" date = 2008-07-17 [[release."3.0"]] -stage = "3.0 beta 3" +stage = "3.0.0 beta 3" state = "actual" date = 2008-08-20 [[release."3.0"]] -stage = "3.0 candidate 1" +stage = "3.0.0 candidate 1" state = "actual" date = 2008-09-17 [[release."3.0"]] -stage = "3.0 candidate 2" +stage = "3.0.0 candidate 2" state = "actual" date = 2008-11-06 [[release."3.0"]] -stage = "3.0 candidate 3" +stage = "3.0.0 candidate 3" state = "actual" date = 2008-11-21 [[release."3.0"]] -stage = "3.0 final" +stage = "3.0.0 final" state = "actual" date = 2008-12-03 @@ -1128,32 +1128,32 @@ end-of-bugfix = 2011-06-11 end-of-life = 2012-04-09 [[release."3.1"]] -stage = "3.1 alpha 1" +stage = "3.1.0 alpha 1" state = "actual" date = 2009-03-07 [[release."3.1"]] -stage = "3.1 alpha 2" +stage = "3.1.0 alpha 2" state = "actual" date = 2009-04-04 [[release."3.1"]] -stage = "3.1 beta 1" +stage = "3.1.0 beta 1" state = "actual" date = 2009-05-06 [[release."3.1"]] -stage = "3.1 candidate 1" +stage = "3.1.0 candidate 1" state = "actual" date = 2009-05-30 [[release."3.1"]] -stage = "3.1 candidate 2" +stage = "3.1.0 candidate 2" state = "actual" date = 2009-06-13 [[release."3.1"]] -stage = "3.1 final" +stage = "3.1.0 final" state = "actual" date = 2009-06-27 @@ -1229,52 +1229,52 @@ end-of-bugfix = 2013-05-13 end-of-life = 2016-02-20 [[release."3.2"]] -stage = "3.2 alpha 1" +stage = "3.2.0 alpha 1" state = "actual" date = 2010-08-01 [[release."3.2"]] -stage = "3.2 alpha 2" +stage = "3.2.0 alpha 2" state = "actual" date = 2010-09-06 [[release."3.2"]] -stage = "3.2 alpha 3" +stage = "3.2.0 alpha 3" state = "actual" date = 2010-10-12 [[release."3.2"]] -stage = "3.2 alpha 4" +stage = "3.2.0 alpha 4" state = "actual" date = 2010-11-16 [[release."3.2"]] -stage = "3.2 beta 1" +stage = "3.2.0 beta 1" state = "actual" date = 2010-12-06 [[release."3.2"]] -stage = "3.2 beta 2" +stage = "3.2.0 beta 2" state = "actual" date = 2010-12-20 [[release."3.2"]] -stage = "3.2 candidate 1" +stage = "3.2.0 candidate 1" state = "actual" date = 2011-01-16 [[release."3.2"]] -stage = "3.2 candidate 2" +stage = "3.2.0 candidate 2" state = "actual" date = 2011-01-31 [[release."3.2"]] -stage = "3.2 candidate 3" +stage = "3.2.0 candidate 3" state = "actual" date = 2011-02-14 [[release."3.2"]] -stage = "3.2 final" +stage = "3.2.0 final" state = "actual" date = 2011-02-20 From 3dc6277c025de8c8132d09f40611a6d6776c8ccc Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 29 Mar 2025 22:45:35 +0000 Subject: [PATCH 11/15] Add explicit licence (Public Domain or CC0) --- release_engineering/LICENCE.rst | 2 ++ release_engineering/python-releases.toml | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 release_engineering/LICENCE.rst diff --git a/release_engineering/LICENCE.rst b/release_engineering/LICENCE.rst new file mode 100644 index 00000000000..c4665c1ad48 --- /dev/null +++ b/release_engineering/LICENCE.rst @@ -0,0 +1,2 @@ +This files in this directory are placed in the public domain or under the +CC0-1.0-Universal license, whichever is more permissive. diff --git a/release_engineering/python-releases.toml b/release_engineering/python-releases.toml index a40a8dc6d8d..b5421a00bf3 100644 --- a/release_engineering/python-releases.toml +++ b/release_engineering/python-releases.toml @@ -1,3 +1,22 @@ +# This file is placed in the public domain or under the +# CC0-1.0-Universal licence, whichever is more permissive. +# +# This document contains the history of every release of the Python project, +# and specifically the CPython intepreter. The data in this file were initially +# compiled in 2025 by Adam Turner, with information primarily sourced from the +# release PEPs and supplemented by the 'releases' section of www.python.org. +# +# The release schedules for Python 3.8 onwards are created from data in this +# document. After editing this file, run the following command to regenerate +# the relevant PEPs: +# +# python -m release_engineering update-peps +# +# The PEP rendering system, via Sphinx, uses this document to regenerate the +# 'release-cycle' JSON file, found at https://peps.python.org/release-cycle.json. +# This JSON file is intended for public consumption. The format of this TOML +# document is not guaranteed and may change without notice. + # -- Python 1.6 -------------------------------------------------------------- [metadata."1.6"] From a72c1f9cc8ff0df54093c516140bedf4c004ef01 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 5 Apr 2025 20:53:56 +0100 Subject: [PATCH 12/15] Initial review notes --- .pre-commit-config.yaml | 1 + .../pep_zero_generator/pep_index_generator.py | 1 + release_engineering/LICENCE.rst | 2 +- .../update_release_schedules.py | 33 ++++++++++++------- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8a7f38e9c19..b7b9b4e574d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -117,5 +117,6 @@ repos: name: "Regenerate release schedules from python-releases.toml" entry: "python -m release_engineering update-peps" language: "python" + files: "^release_engineering/" pass_filenames: false require_serial: true diff --git a/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py b/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py index 5eee8822ba6..6fc45a90499 100644 --- a/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py +++ b/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py @@ -30,6 +30,7 @@ if sys.version_info >= (3, 11): from release_engineering.generate_release_cycle import create_release_cycle else: + # this function uses tomllib, which requires Python 3.11+ def create_release_cycle(): return '' diff --git a/release_engineering/LICENCE.rst b/release_engineering/LICENCE.rst index c4665c1ad48..d68de666acb 100644 --- a/release_engineering/LICENCE.rst +++ b/release_engineering/LICENCE.rst @@ -1,2 +1,2 @@ -This files in this directory are placed in the public domain or under the +The files in this directory are placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive. diff --git a/release_engineering/update_release_schedules.py b/release_engineering/update_release_schedules.py index b631849a89b..4bdb4b81a46 100644 --- a/release_engineering/update_release_schedules.py +++ b/release_engineering/update_release_schedules.py @@ -42,21 +42,32 @@ TODAY = dt.date.today() -VERSIONS_TO_REGENERATE = ( - '3.8', - '3.9', - '3.10', - '3.11', - '3.12', - '3.13', - '3.14', -) +SKIPPED_VERSIONS = frozenset({ + '1.6', + '2.0', + '2.1', + '2.2', + '2.3', + '2.4', + '2.5', + '2.6', + '2.7', + '3.0', + '3.1', + '3.2', + '3.3', + '3.4', + '3.5', + '3.6', + '3.7', +}) def update_peps() -> None: python_releases = load_python_releases() - for version in VERSIONS_TO_REGENERATE: - metadata = python_releases.metadata[version] + for version, metadata in python_releases.metadata.items(): + if version in SKIPPED_VERSIONS: + continue schedules = create_schedules( version, python_releases.releases[version], From e4f42ac753c04306ea1cb7c693e70e230b9b6edd Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Fri, 2 May 2025 23:05:10 +0100 Subject: [PATCH 13/15] Update for 3.15, from PEP 790 --- release_engineering/python-releases.toml | 83 ++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/release_engineering/python-releases.toml b/release_engineering/python-releases.toml index b5421a00bf3..d496e076305 100644 --- a/release_engineering/python-releases.toml +++ b/release_engineering/python-releases.toml @@ -3332,3 +3332,86 @@ date = 2025-08-26 stage = "3.14.0 final" state = "expected" date = 2025-10-07 + +# -- Python 3.15 -------------------------------------------------------------- + +[metadata."3.15"] +pep = 790 +#status = # TODO! pre-branch status? +#branch = # TODO! pre-branch branch? +release-manager = "Hugo van Kemenade" +start-of-development = 2025-05-06 +first-release = 2026-10-01 +feature-freeze = 2026-05-05 +end-of-bugfix = 2028-10-01 +end-of-life = 2031-10-01 + +[[release."3.15"]] +stage = "3.15.0 alpha 1" +state = "expected" +date = 2025-10-14 + +[[release."3.15"]] +stage = "3.15.0 alpha 2" +state = "expected" +date = 2025-11-18 + +[[release."3.15"]] +stage = "3.15.0 alpha 3" +state = "expected" +date = 2025-12-16 + +[[release."3.15"]] +stage = "3.15.0 alpha 4" +state = "expected" +date = 2026-01-13 + +[[release."3.15"]] +stage = "3.15.0 alpha 5" +state = "expected" +date = 2026-02-10 + +[[release."3.15"]] +stage = "3.15.0 alpha 6" +state = "expected" +date = 2026-03-10 + +[[release."3.15"]] +stage = "3.15.0 alpha 7" +state = "expected" +date = 2026-04-07 + +[[release."3.15"]] +stage = "3.15.0 beta 1" +state = "expected" +date = 2026-05-05 + +[[release."3.15"]] +stage = "3.15.0 beta 2" +state = "expected" +date = 2026-05-26 + +[[release."3.15"]] +stage = "3.15.0 beta 3" +state = "expected" +date = 2026-06-16 + +[[release."3.15"]] +stage = "3.15.0 beta 4" +state = "expected" +date = 2026-07-14 + +[[release."3.15"]] +stage = "3.15.0 candidate 1" +state = "expected" +date = 2026-07-28 + +[[release."3.15"]] +stage = "3.15.0 candidate 2" +state = "expected" +date = 2026-09-01 + +[[release."3.15"]] +stage = "3.15.0 final" +state = "expected" +date = 2026-10-01 From 7b18f8d63dd153578ba3d5deacdffa4e006c5a9b Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Fri, 2 May 2025 23:29:52 +0100 Subject: [PATCH 14/15] fixup! Update for 3.15, from PEP 790 --- peps/pep-0790.rst | 4 ++++ release_engineering/python-releases.toml | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/peps/pep-0790.rst b/peps/pep-0790.rst index a57937aaa79..6d51471eaee 100644 --- a/peps/pep-0790.rst +++ b/peps/pep-0790.rst @@ -31,6 +31,8 @@ Release schedule The dates below use a 17-month development period that results in a 12-month release cadence between feature versions, as defined by :pep:`602`. +.. feature release schedule + Expected: - 3.15 development begins: Tuesday, 2025-05-06 @@ -50,6 +52,8 @@ Expected: - 3.15.0 candidate 2: Tuesday, 2026-09-01 - 3.15.0 final: Thursday, 2026-10-01 +.. end of schedule + Subsequent bugfix releases every two months. diff --git a/release_engineering/python-releases.toml b/release_engineering/python-releases.toml index d496e076305..e1871e2415c 100644 --- a/release_engineering/python-releases.toml +++ b/release_engineering/python-releases.toml @@ -3337,8 +3337,8 @@ date = 2025-10-07 [metadata."3.15"] pep = 790 -#status = # TODO! pre-branch status? -#branch = # TODO! pre-branch branch? +status = "" # TODO! pre-branch status? +branch = "" # TODO! pre-branch branch? release-manager = "Hugo van Kemenade" start-of-development = 2025-05-06 first-release = 2026-10-01 From 1f1c73def769e531b81eff8a0fadd2f557b62f36 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Fri, 2 May 2025 23:27:05 +0100 Subject: [PATCH 15/15] 8/4/25 releases --- release_engineering/python-releases.toml | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/release_engineering/python-releases.toml b/release_engineering/python-releases.toml index e1871e2415c..f2721d5490e 100644 --- a/release_engineering/python-releases.toml +++ b/release_engineering/python-releases.toml @@ -2663,6 +2663,11 @@ stage = "3.9.21 final" state = "actual" date = 2024-12-03 +[[release."3.9"]] +stage = "3.9.22 final" +state = "actual" +date = 2025-04-08 + # -- Python 3.10 -------------------------------------------------------------- [metadata."3.10"] @@ -2826,6 +2831,11 @@ stage = "3.10.16 final" state = "actual" date = 2024-12-03 +[[release."3.10"]] +stage = "3.10.17 final" +state = "actual" +date = 2025-04-08 + # -- Python 3.11 -------------------------------------------------------------- [metadata."3.11"] @@ -2969,6 +2979,11 @@ stage = "3.11.11 final" state = "actual" date = 2024-12-03 +[[release."3.11"]] +stage = "3.11.12 final" +state = "actual" +date = 2025-04-08 + # -- Python 3.12 -------------------------------------------------------------- [metadata."3.12"] @@ -3104,7 +3119,7 @@ date = 2025-02-04 [[release."3.12"]] stage = "3.12.10 final" -state = "expected" +state = "actual" date = 2025-04-08 # -- Python 3.13 -------------------------------------------------------------- @@ -3202,7 +3217,7 @@ date = 2025-02-04 [[release."3.13"]] stage = "3.13.3 final" -state = "expected" +state = "actual" date = 2025-04-08 [[release."3.13"]] @@ -3295,7 +3310,7 @@ date = 2025-03-14 [[release."3.14"]] stage = "3.14.0 alpha 7" -state = "expected" +state = "actual" date = 2025-04-08 [[release."3.14"]]