diff --git a/config/versions.history.json b/config/versions.history.json new file mode 100644 index 00000000000..7ce2b5265e8 --- /dev/null +++ b/config/versions.history.json @@ -0,0 +1,3675 @@ +{ + "csharp": { + "1.1.0.0": { + "releaseDate": "2013-08-04" + }, + "1.4.0": { + "releaseDate": "2013-11-08" + }, + "1.5.0": { + "releaseDate": "2013-11-08" + }, + "1.6.0": { + "releaseDate": "2013-12-06" + }, + "1.7.0": { + "releaseDate": "2014-01-02" + }, + "1.9.0": { + "releaseDate": "2014-02-24" + }, + "1.10.0": { + "releaseDate": "2014-03-27" + }, + "1.11.0": { + "releaseDate": "2014-05-02" + }, + "1.12.0": { + "releaseDate": "2014-06-10" + }, + "1.13.0": { + "releaseDate": "2014-07-17" + }, + "1.14.0": { + "releaseDate": "2014-07-24" + }, + "1.15.0": { + "releaseDate": "2014-07-24" + }, + "1.16.0": { + "releaseDate": "2014-08-04" + }, + "2.0.0": { + "releaseDate": "2014-08-13" + }, + "2.2.0": { + "releaseDate": "2014-09-14" + }, + "2.3.0": { + "releaseDate": "2014-10-14" + }, + "2.3.1": { + "releaseDate": "2014-10-22" + }, + "2.3.2": { + "releaseDate": "2014-11-24" + }, + "2.3.3": { + "releaseDate": "2014-11-25" + }, + "2.4.0": { + "releaseDate": "2014-11-30" + }, + "2.4.1": { + "releaseDate": "2014-12-04" + }, + "2.5.1": { + "releaseDate": "2015-01-02" + }, + "3.0.0": { + "releaseDate": "2015-01-02" + }, + "3.0.1": { + "releaseDate": "2015-01-03" + }, + "3.0.2": { + "releaseDate": "2015-01-04" + }, + "3.0.3": { + "releaseDate": "2015-01-09" + }, + "3.0.4": { + "releaseDate": "2015-01-21" + }, + "3.0.5": { + "releaseDate": "2015-02-18" + }, + "3.1.0": { + "releaseDate": "2015-04-10" + }, + "3.1.1": { + "releaseDate": "2015-05-04" + }, + "3.1.2": { + "releaseDate": "2015-06-03" + }, + "3.1.4": { + "releaseDate": "2015-06-30" + }, + "3.1.5": { + "releaseDate": "2015-08-30" + }, + "3.1.6": { + "releaseDate": "2015-08-30" + }, + "3.1.7": { + "releaseDate": "2015-08-31" + }, + "3.2.0": { + "releaseDate": "2015-09-08" + }, + "3.3.0": { + "releaseDate": "2015-09-08" + }, + "3.3.1": { + "releaseDate": "2015-10-09" + }, + "3.3.2": { + "releaseDate": "2015-10-12" + }, + "3.3.3": { + "releaseDate": "2015-10-13" + }, + "3.4.0": { + "releaseDate": "2015-10-16" + }, + "3.4.1": { + "releaseDate": "2015-11-11" + }, + "3.4.2": { + "releaseDate": "2015-11-11" + }, + "3.4.3": { + "releaseDate": "2016-02-05" + }, + "3.4.4": { + "releaseDate": "2016-02-11" + }, + "3.5.0": { + "releaseDate": "2016-03-25" + }, + "3.6.0": { + "releaseDate": "2016-04-12" + }, + "3.6.1": { + "releaseDate": "2016-04-14" + }, + "3.6.10": { + "releaseDate": "2016-11-17" + }, + "3.7.0": { + "releaseDate": "2016-12-12" + }, + "3.7.1": { + "releaseDate": "2017-01-03" + }, + "3.7.2": { + "releaseDate": "2017-01-30" + }, + "3.7.3": { + "releaseDate": "2017-02-07" + }, + "4.0.0": { + "releaseDate": "2017-05-23" + }, + "5.0.0": { + "releaseDate": "2018-06-14" + }, + "5.1.0": { + "releaseDate": "2018-06-25" + }, + "5.2.0": { + "releaseDate": "2018-10-10" + }, + "5.2.1": { + "releaseDate": "2018-12-03" + }, + "5.3.0": { + "releaseDate": "2018-12-17" + }, + "5.3.1": { + "releaseDate": "2018-12-18" + }, + "6.0.0": { + "releaseDate": "2019-02-07" + }, + "6.0.1": { + "releaseDate": "2019-02-11" + }, + "6.0.2": { + "releaseDate": "2019-02-13" + }, + "6.1.0": { + "releaseDate": "2019-02-26" + }, + "6.1.1": { + "releaseDate": "2019-02-27" + }, + "6.1.2": { + "releaseDate": "2019-03-14" + }, + "6.1.3": { + "releaseDate": "2019-04-03" + }, + "6.2.0": { + "releaseDate": "2019-06-25" + }, + "6.3.0": { + "releaseDate": "2019-08-22" + }, + "6.4.0": { + "releaseDate": "2019-08-30" + }, + "6.4.1": { + "releaseDate": "2019-10-03" + }, + "6.5.0": { + "releaseDate": "2019-11-06" + }, + "6.5.1": { + "releaseDate": "2019-11-26" + }, + "6.6.0": { + "releaseDate": "2020-04-01" + }, + "6.7.0": { + "releaseDate": "2020-07-20" + }, + "6.8.0": { + "releaseDate": "2020-08-17" + }, + "6.9.0": { + "releaseDate": "2020-12-07" + }, + "6.9.1": { + "releaseDate": "2021-01-28" + }, + "6.10.0": { + "releaseDate": "2021-05-07" + }, + "6.10.1": { + "releaseDate": "2021-06-02" + }, + "6.10.2": { + "releaseDate": "2021-09-23" + }, + "6.11.0": { + "releaseDate": "2021-10-19" + }, + "6.12.0": { + "releaseDate": "2021-11-05" + }, + "6.12.1": { + "releaseDate": "2022-02-14" + }, + "6.13.0": { + "releaseDate": "2022-08-31" + }, + "6.14.0": { + "releaseDate": "2022-11-08" + }, + "6.15.0": { + "releaseDate": "2023-08-08" + }, + "6.16.0": { + "releaseDate": "2023-11-20" + }, + "6.17.0": { + "releaseDate": "2024-02-26" + }, + "7.0.0": { + "releaseDate": "2024-08-14" + }, + "7.0.1": { + "releaseDate": "2024-08-14" + }, + "7.0.2": { + "releaseDate": "2024-08-19" + }, + "7.1.0": { + "releaseDate": "2024-08-20" + }, + "7.1.1": { + "releaseDate": "2024-08-21" + }, + "7.2.0": { + "releaseDate": "2024-08-27" + }, + "7.2.1": { + "releaseDate": "2024-08-28" + }, + "7.2.2": { + "releaseDate": "2024-08-29" + }, + "7.2.3": { + "releaseDate": "2024-09-02" + }, + "7.2.4": { + "releaseDate": "2024-09-03" + }, + "7.3.0": { + "releaseDate": "2024-09-06" + }, + "7.3.1": { + "releaseDate": "2024-09-12" + }, + "7.3.2": { + "releaseDate": "2024-09-17" + }, + "7.4.0": { + "releaseDate": "2024-09-18" + }, + "7.4.1": { + "releaseDate": "2024-09-19" + }, + "7.4.2": { + "releaseDate": "2024-09-24" + }, + "7.4.3": { + "releaseDate": "2024-09-25" + } + }, + "ruby": { + "1.1.6": { + "releaseDate": "2013-11-08" + }, + "1.1.5": { + "releaseDate": "2013-11-08" + }, + "1.1.4": { + "releaseDate": "2013-11-08" + }, + "1.1.3": { + "releaseDate": "2013-11-08" + }, + "1.1.7": { + "releaseDate": "2013-11-08" + }, + "1.1.8": { + "releaseDate": "2013-11-26" + }, + "1.1.10": { + "releaseDate": "2013-11-29" + }, + "1.1.11": { + "releaseDate": "2013-11-29" + }, + "1.1.14": { + "releaseDate": "2013-12-11" + }, + "1.1.15": { + "releaseDate": "2013-12-16" + }, + "1.1.16": { + "releaseDate": "2013-12-20" + }, + "1.1.17": { + "releaseDate": "2014-01-02" + }, + "1.2.0": { + "releaseDate": "2014-01-07" + }, + "1.2.1": { + "releaseDate": "2014-01-07" + }, + "1.2.2": { + "releaseDate": "2014-01-11" + }, + "1.2.3": { + "releaseDate": "2014-02-10" + }, + "1.2.6": { + "releaseDate": "2014-03-19" + }, + "1.2.7": { + "releaseDate": "2014-03-25" + }, + "1.2.8": { + "releaseDate": "2014-03-28" + }, + "1.2.9": { + "releaseDate": "2014-07-10" + }, + "1.2.10": { + "releaseDate": "2014-08-22" + }, + "1.2.11": { + "releaseDate": "2014-09-14" + }, + "1.2.12": { + "releaseDate": "2014-10-08" + }, + "1.2.13": { + "releaseDate": "2014-10-22" + }, + "1.2.14": { + "releaseDate": "2014-11-10" + }, + "1.3.0": { + "releaseDate": "2014-11-29" + }, + "1.3.1": { + "releaseDate": "2014-11-29" + }, + "1.4.0": { + "releaseDate": "2015-03-17" + }, + "1.4.1": { + "releaseDate": "2015-04-10" + }, + "1.4.2": { + "releaseDate": "2015-05-04" + }, + "1.4.3": { + "releaseDate": "2015-05-27" + }, + "1.5.0": { + "releaseDate": "2015-06-05" + }, + "1.5.1": { + "releaseDate": "2015-07-14" + }, + "1.6.0": { + "releaseDate": "2015-07-20" + }, + "1.6.1": { + "releaseDate": "2015-08-01" + }, + "1.7.0": { + "releaseDate": "2016-01-09" + }, + "1.8.1": { + "releaseDate": "2016-04-14" + }, + "1.9.0": { + "releaseDate": "2016-06-17" + }, + "1.10.0": { + "releaseDate": "2016-07-11" + }, + "1.11.0": { + "releaseDate": "2016-08-21" + }, + "1.12.0": { + "releaseDate": "2016-10-31" + }, + "1.12.1": { + "releaseDate": "2016-11-25" + }, + "1.12.2": { + "releaseDate": "2016-12-05" + }, + "1.12.3": { + "releaseDate": "2016-12-06" + }, + "1.12.4": { + "releaseDate": "2016-12-07" + }, + "1.12.5": { + "releaseDate": "2017-01-11" + }, + "1.12.6": { + "releaseDate": "2017-01-25" + }, + "1.12.7": { + "releaseDate": "2017-03-01" + }, + "1.13.0": { + "releaseDate": "2017-03-17" + }, + "1.14.0": { + "releaseDate": "2017-07-31" + }, + "1.15.0": { + "releaseDate": "2017-08-17" + }, + "1.15.1": { + "releaseDate": "2017-08-17" + }, + "1.16.0": { + "releaseDate": "2017-09-14" + }, + "1.17.0": { + "releaseDate": "2017-10-10" + }, + "1.18.0": { + "releaseDate": "2017-11-02" + }, + "1.18.1": { + "releaseDate": "2017-11-15" + }, + "1.18.2": { + "releaseDate": "2017-11-28" + }, + "1.18.3": { + "releaseDate": "2017-12-04" + }, + "1.18.4": { + "releaseDate": "2017-12-06" + }, + "1.18.5": { + "releaseDate": "2017-12-07" + }, + "1.19.0": { + "releaseDate": "2017-12-15" + }, + "1.19.1": { + "releaseDate": "2017-12-18" + }, + "1.19.2": { + "releaseDate": "2018-04-03" + }, + "1.20.0": { + "releaseDate": "2018-05-07" + }, + "1.20.1": { + "releaseDate": "2018-05-15" + }, + "1.21.0": { + "releaseDate": "2018-05-24" + }, + "1.22.0": { + "releaseDate": "2018-05-30" + }, + "1.23.0": { + "releaseDate": "2018-06-19" + }, + "1.24.0": { + "releaseDate": "2018-11-28" + }, + "1.25.0": { + "releaseDate": "2018-12-19" + }, + "1.25.1": { + "releaseDate": "2018-12-19" + }, + "1.25.2": { + "releaseDate": "2018-12-19" + }, + "1.26.0": { + "releaseDate": "2019-02-12" + }, + "1.26.1": { + "releaseDate": "2019-07-31" + }, + "1.27.0": { + "releaseDate": "2019-09-16" + }, + "1.27.1": { + "releaseDate": "2019-09-26" + }, + "1.27.2": { + "releaseDate": "2020-04-28" + }, + "1.27.3": { + "releaseDate": "2020-06-03" + }, + "1.27.4": { + "releaseDate": "2020-09-16" + }, + "2.0.0": { + "releaseDate": "2020-10-27" + }, + "1.27.5": { + "releaseDate": "2020-10-28" + }, + "2.0.1": { + "releaseDate": "2020-11-02" + }, + "2.0.2": { + "releaseDate": "2020-11-09" + }, + "2.0.3": { + "releaseDate": "2020-11-24" + }, + "2.0.4": { + "releaseDate": "2021-01-05" + }, + "2.1.0": { + "releaseDate": "2021-03-31" + }, + "2.1.1": { + "releaseDate": "2021-05-27" + }, + "2.2.0": { + "releaseDate": "2021-11-08" + }, + "2.2.1": { + "releaseDate": "2021-11-12" + }, + "2.2.2": { + "releaseDate": "2021-12-08" + }, + "2.2.3": { + "releaseDate": "2022-04-21" + }, + "2.2.4": { + "releaseDate": "2022-05-24" + }, + "2.2.5": { + "releaseDate": "2022-05-24" + }, + "2.3.0": { + "releaseDate": "2022-09-26" + }, + "2.3.1": { + "releaseDate": "2022-10-21" + }, + "2.3.2": { + "releaseDate": "2023-06-07" + }, + "2.3.3": { + "releaseDate": "2023-11-14" + }, + "2.3.4": { + "releaseDate": "2023-11-27" + }, + "3.0.0": { + "releaseDate": "2024-08-14" + }, + "3.0.2": { + "releaseDate": "2024-08-19" + }, + "3.1.0": { + "releaseDate": "2024-08-20" + }, + "3.1.1": { + "releaseDate": "2024-08-21" + }, + "3.2.0": { + "releaseDate": "2024-08-27" + }, + "3.2.1": { + "releaseDate": "2024-08-28" + }, + "3.2.2": { + "releaseDate": "2024-08-29" + }, + "3.2.3": { + "releaseDate": "2024-09-02" + }, + "3.2.4": { + "releaseDate": "2024-09-03" + }, + "3.3.0": { + "releaseDate": "2024-09-06" + }, + "3.3.1": { + "releaseDate": "2024-09-12" + }, + "3.3.2": { + "releaseDate": "2024-09-17" + }, + "3.3.3": { + "releaseDate": "2024-09-19" + }, + "3.3.4": { + "releaseDate": "2024-09-25" + } + }, + "scala": { + "1.0.0": { + "releaseDate": "2015-12-22" + }, + "1.1.0": { + "releaseDate": "2016-01-25" + }, + "1.2.0": { + "releaseDate": "2016-02-02" + }, + "1.3.0": { + "releaseDate": "2016-02-18" + }, + "1.4.0": { + "releaseDate": "2016-02-18" + }, + "1.5": { + "releaseDate": "2016-03-09" + }, + "1.6.0": { + "releaseDate": "2016-03-23" + }, + "1.6.1": { + "releaseDate": "2016-05-17" + }, + "1.6.2": { + "releaseDate": "2016-05-18" + }, + "1.7.0": { + "releaseDate": "2016-06-01" + }, + "1.7.1": { + "releaseDate": "2016-06-06" + }, + "1.7.2": { + "releaseDate": "2016-06-06" + }, + "1.8.0": { + "releaseDate": "2016-06-06" + }, + "1.9.0": { + "releaseDate": "2016-06-09" + }, + "1.10.0": { + "releaseDate": "2016-06-21" + }, + "1.11.0": { + "releaseDate": "2016-07-12" + }, + "1.12": { + "releaseDate": "2016-07-13" + }, + "1.12.0": { + "releaseDate": "2016-07-13" + }, + "1.13.0": { + "releaseDate": "2016-07-26" + }, + "1.13.1": { + "releaseDate": "2016-08-03" + }, + "1.14.0": { + "releaseDate": "2016-08-19" + }, + "1.15.0": { + "releaseDate": "2016-10-06" + }, + "1.16.0": { + "releaseDate": "2016-12-09" + }, + "1.17.0": { + "releaseDate": "2016-12-20" + }, + "1.18.0": { + "releaseDate": "2017-02-06" + }, + "1.19.0": { + "releaseDate": "2017-03-13" + }, + "1.19.1": { + "releaseDate": "2017-03-17" + }, + "1.20.0": { + "releaseDate": "2017-04-10" + }, + "1.21.0": { + "releaseDate": "2017-04-25" + }, + "1.22.0": { + "releaseDate": "2017-05-24" + }, + "1.22.1": { + "releaseDate": "2017-07-18" + }, + "1.23.0": { + "releaseDate": "2017-07-25" + }, + "1.23.1": { + "releaseDate": "2017-08-01" + }, + "1.23.2": { + "releaseDate": "2017-08-01" + }, + "1.24.0": { + "releaseDate": "2017-08-22" + }, + "1.24.1": { + "releaseDate": "2017-09-04" + }, + "1.25.0": { + "releaseDate": "2017-09-12" + }, + "1.26.0": { + "releaseDate": "2017-09-14" + }, + "1.26.1": { + "releaseDate": "2017-10-09" + }, + "1.27.0": { + "releaseDate": "2018-01-03" + }, + "1.28.0": { + "releaseDate": "2018-07-10" + }, + "1.29.0": { + "releaseDate": "2018-09-04" + }, + "1.30.0": { + "releaseDate": "2018-11-30" + }, + "1.31.0": { + "releaseDate": "2018-12-17" + }, + "1.32.0": { + "releaseDate": "2019-01-08" + }, + "1.33.0": { + "releaseDate": "2019-07-18" + }, + "1.34.0": { + "releaseDate": "2019-08-07" + }, + "1.35.0": { + "releaseDate": "2020-01-27" + }, + "1.35.1": { + "releaseDate": "2020-04-06" + }, + "1.36.0": { + "releaseDate": "2020-07-20" + }, + "1.37.0": { + "releaseDate": "2020-08-03" + }, + "1.38.0": { + "releaseDate": "2020-08-06" + }, + "1.38.1": { + "releaseDate": "2020-09-11" + }, + "1.38.2": { + "releaseDate": "2020-10-05" + }, + "1.39.0": { + "releaseDate": "2020-11-03" + }, + "1.39.1": { + "releaseDate": "2021-03-01" + }, + "1.40.0": { + "releaseDate": "2021-04-28" + }, + "1.41.0": { + "releaseDate": "2021-07-23" + }, + "1.42.0": { + "releaseDate": "2021-08-03" + }, + "1.43.0": { + "releaseDate": "2021-08-03" + }, + "1.43.1": { + "releaseDate": "2021-09-22" + }, + "1.44.0": { + "releaseDate": "2021-10-29" + }, + "1.44.1": { + "releaseDate": "2022-02-24" + }, + "1.45.0": { + "releaseDate": "2022-05-17" + }, + "1.45.1": { + "releaseDate": "2022-12-15" + }, + "1.45.2": { + "releaseDate": "2024-05-16" + }, + "2.0.0": { + "releaseDate": "2024-08-14" + }, + "2.0.1": { + "releaseDate": "2024-08-14" + }, + "2.0.2": { + "releaseDate": "2024-08-19" + }, + "2.1.0": { + "releaseDate": "2024-08-20" + }, + "2.1.1": { + "releaseDate": "2024-08-21" + }, + "2.2.0": { + "releaseDate": "2024-08-27" + }, + "2.2.1": { + "releaseDate": "2024-08-28" + }, + "2.2.2": { + "releaseDate": "2024-08-29" + }, + "2.2.3": { + "releaseDate": "2024-09-02" + }, + "2.2.4": { + "releaseDate": "2024-09-03" + }, + "2.3.0": { + "releaseDate": "2024-09-06" + }, + "2.3.1": { + "releaseDate": "2024-09-12" + }, + "2.3.2": { + "releaseDate": "2024-09-17" + }, + "2.3.3": { + "releaseDate": "2024-09-19" + }, + "2.3.4": { + "releaseDate": "2024-09-19" + }, + "2.3.5": { + "releaseDate": "2024-09-20" + }, + "2.3.6": { + "releaseDate": "2024-09-24" + }, + "2.3.7": { + "releaseDate": "2024-09-25" + } + }, + "dart": { + "1.0.0": { + "releaseDate": "2023-10-19" + }, + "1.1.0": { + "releaseDate": "2023-11-07" + }, + "1.2.0": { + "releaseDate": "2023-11-09" + }, + "1.2.1": { + "releaseDate": "2023-12-28" + }, + "1.2.2": { + "releaseDate": "2024-01-04" + }, + "1.3.0": { + "releaseDate": "2024-01-09" + }, + "1.4.0": { + "releaseDate": "2024-01-16" + }, + "1.5.0": { + "releaseDate": "2024-01-23" + }, + "1.5.1": { + "releaseDate": "2024-02-29" + }, + "1.6.0": { + "releaseDate": "2024-03-13" + }, + "1.6.1": { + "releaseDate": "2024-03-19" + }, + "1.6.2": { + "releaseDate": "2024-03-25" + }, + "1.6.3": { + "releaseDate": "2024-04-03" + }, + "1.7.0": { + "releaseDate": "2024-04-09" + }, + "1.8.0": { + "releaseDate": "2024-04-16" + }, + "1.9.0": { + "releaseDate": "2024-04-23" + }, + "1.10.0": { + "releaseDate": "2024-05-17" + }, + "1.11.0": { + "releaseDate": "2024-06-11" + }, + "1.12.0": { + "releaseDate": "2024-06-13" + }, + "1.13.0": { + "releaseDate": "2024-06-21" + }, + "1.14.0": { + "releaseDate": "2024-06-24" + }, + "1.15.0": { + "releaseDate": "2024-06-26" + }, + "1.15.1": { + "releaseDate": "2024-06-27" + }, + "1.16.0": { + "releaseDate": "2024-07-01" + }, + "1.17.0": { + "releaseDate": "2024-07-08" + }, + "1.17.1": { + "releaseDate": "2024-07-12" + }, + "1.18.0": { + "releaseDate": "2024-07-19" + }, + "1.19.0": { + "releaseDate": "2024-07-26" + }, + "1.20.0": { + "releaseDate": "2024-08-01" + }, + "1.21.0": { + "releaseDate": "2024-08-06" + }, + "1.22.0": { + "releaseDate": "2024-08-09" + }, + "1.22.1": { + "releaseDate": "2024-08-14" + }, + "1.22.2": { + "releaseDate": "2024-08-19" + }, + "1.22.3": { + "releaseDate": "2024-08-21" + }, + "1.23.0": { + "releaseDate": "2024-08-27" + }, + "1.23.1": { + "releaseDate": "2024-08-28" + }, + "1.23.2": { + "releaseDate": "2024-08-29" + }, + "1.23.3": { + "releaseDate": "2024-09-02" + }, + "1.23.4": { + "releaseDate": "2024-09-03" + }, + "1.24.0": { + "releaseDate": "2024-09-06" + }, + "1.24.1": { + "releaseDate": "2024-09-17" + }, + "1.24.2": { + "releaseDate": "2024-09-19" + } + }, + "kotlin": { + "1.0.0": { + "releaseDate": "2019-06-03" + }, + "1.1.0": { + "releaseDate": "2019-07-29" + }, + "1.1.1": { + "releaseDate": "2019-08-01" + }, + "1.1.2": { + "releaseDate": "2019-08-09" + }, + "1.1.3": { + "releaseDate": "2019-08-27" + }, + "1.1.4": { + "releaseDate": "2019-09-05" + }, + "1.2.0": { + "releaseDate": "2019-11-26" + }, + "1.2.1": { + "releaseDate": "2019-12-12" + }, + "1.2.2": { + "releaseDate": "2020-02-20" + }, + "1.3.1": { + "releaseDate": "2020-02-24" + }, + "1.4.0": { + "releaseDate": "2020-06-04" + }, + "1.5.0": { + "releaseDate": "2020-09-21" + }, + "1.5.1": { + "releaseDate": "2020-11-02" + }, + "1.5.2": { + "releaseDate": "2020-11-10" + }, + "1.6.0": { + "releaseDate": "2020-11-24" + }, + "1.6.1": { + "releaseDate": "2020-12-15" + }, + "1.6.2": { + "releaseDate": "2021-01-20" + }, + "1.7.0": { + "releaseDate": "2021-02-22" + }, + "1.8.0": { + "releaseDate": "2021-06-21" + }, + "1.9.0": { + "releaseDate": "2021-07-13" + }, + "1.9.1": { + "releaseDate": "2021-07-23" + }, + "1.9.2": { + "releaseDate": "2021-08-10" + }, + "1.10.0": { + "releaseDate": "2021-09-21" + }, + "1.11.0": { + "releaseDate": "2021-10-07" + }, + "1.12.0": { + "releaseDate": "2021-10-28" + }, + "1.12.1": { + "releaseDate": "2022-01-27" + }, + "1.12.2": { + "releaseDate": "2022-03-08" + }, + "1.13.0": { + "releaseDate": "2022-04-14" + }, + "2.0.0": { + "releaseDate": "2022-05-17" + }, + "2.1.0": { + "releaseDate": "2022-06-16" + }, + "2.1.1": { + "releaseDate": "2022-09-26" + }, + "2.1.2": { + "releaseDate": "2023-01-30" + }, + "2.1.3": { + "releaseDate": "2023-02-03" + }, + "2.1.4": { + "releaseDate": "2023-06-08" + }, + "2.1.5": { + "releaseDate": "2023-06-22" + }, + "2.1.6": { + "releaseDate": "2023-08-21" + }, + "2.1.7": { + "releaseDate": "2023-09-04" + }, + "2.1.8": { + "releaseDate": "2023-10-10" + }, + "2.1.9": { + "releaseDate": "2023-12-07" + }, + "2.1.10": { + "releaseDate": "2024-03-27" + }, + "2.1.11": { + "releaseDate": "2024-05-16" + }, + "2.1.12": { + "releaseDate": "2024-05-28" + }, + "2.1.13": { + "releaseDate": "2024-06-17" + }, + "2.1.14": { + "releaseDate": "2024-08-06" + }, + "3.0.0": { + "releaseDate": "2024-08-14" + }, + "3.0.1": { + "releaseDate": "2024-08-14" + }, + "3.0.2": { + "releaseDate": "2024-08-19" + }, + "3.1.0": { + "releaseDate": "2024-08-20" + }, + "3.1.1": { + "releaseDate": "2024-08-21" + }, + "3.2.0": { + "releaseDate": "2024-08-27" + }, + "3.2.1": { + "releaseDate": "2024-08-28" + }, + "3.2.2": { + "releaseDate": "2024-08-29" + }, + "3.2.3": { + "releaseDate": "2024-09-02" + }, + "3.2.4": { + "releaseDate": "2024-09-03" + }, + "3.3.0": { + "releaseDate": "2024-09-06" + }, + "3.3.1": { + "releaseDate": "2024-09-12" + }, + "3.3.2": { + "releaseDate": "2024-09-17" + }, + "3.3.3": { + "releaseDate": "2024-09-19" + }, + "3.4.0": { + "releaseDate": "2024-09-24" + }, + "3.4.1": { + "releaseDate": "2024-09-25" + } + }, + "swift": { + "1.0": { + "releaseDate": "2015-03-09" + }, + "1.1.0": { + "releaseDate": "2015-03-30" + }, + "1.1.1": { + "releaseDate": "2015-04-09" + }, + "1.1.2": { + "releaseDate": "2015-05-27" + }, + "1.2.0": { + "releaseDate": "2015-06-08" + }, + "1.2.1": { + "releaseDate": "2015-06-09" + }, + "1.2.2": { + "releaseDate": "2015-06-16" + }, + "1.2.3": { + "releaseDate": "2015-06-20" + }, + "1.3.0": { + "releaseDate": "2015-06-30" + }, + "1.4.0": { + "releaseDate": "2015-07-06" + }, + "1.4.1": { + "releaseDate": "2015-07-10" + }, + "1.4.2": { + "releaseDate": "2015-08-18" + }, + "2.0.0": { + "releaseDate": "2015-09-22" + }, + "2.1.0": { + "releaseDate": "2015-10-20" + }, + "2.2.0": { + "releaseDate": "2015-12-11" + }, + "2.2.1": { + "releaseDate": "2016-02-05" + }, + "2.3": { + "releaseDate": "2016-04-01" + }, + "3.0a1": { + "releaseDate": "2016-04-13" + }, + "3.0": { + "releaseDate": "2016-04-13" + }, + "3.1": { + "releaseDate": "2016-05-09" + }, + "3.2": { + "releaseDate": "2016-05-26" + }, + "3.2.1": { + "releaseDate": "2016-05-27" + }, + "3.3": { + "releaseDate": "2016-06-29" + }, + "3.4": { + "releaseDate": "2016-07-25" + }, + "3.5": { + "releaseDate": "2016-07-29" + }, + "3.6": { + "releaseDate": "2016-08-09" + }, + "3.7": { + "releaseDate": "2016-09-07" + }, + "4.0a1": { + "releaseDate": "2016-09-12" + }, + "4.0": { + "releaseDate": "2016-09-14" + }, + "4.0.1": { + "releaseDate": "2016-09-15" + }, + "4.1": { + "releaseDate": "2016-10-03" + }, + "4.2": { + "releaseDate": "2016-11-02" + }, + "4.3": { + "releaseDate": "2016-11-09" + }, + "4.4": { + "releaseDate": "2016-11-18" + }, + "4.5": { + "releaseDate": "2016-12-07" + }, + "4.6": { + "releaseDate": "2016-12-28" + }, + "4.6.1": { + "releaseDate": "2017-01-10" + }, + "4.7": { + "releaseDate": "2017-02-08" + }, + "4.8": { + "releaseDate": "2017-04-03" + }, + "4.8.1": { + "releaseDate": "2017-04-18" + }, + "5.0.0": { + "releaseDate": "2017-09-26" + }, + "5.0.1": { + "releaseDate": "2017-09-26" + }, + "5.0.2": { + "releaseDate": "2017-09-27" + }, + "5.0.3": { + "releaseDate": "2017-10-03" + }, + "5.0.4": { + "releaseDate": "2017-10-10" + }, + "4.8.2": { + "releaseDate": "2017-10-11" + }, + "5.0.5": { + "releaseDate": "2017-10-13" + }, + "5.0.6": { + "releaseDate": "2017-10-17" + }, + "5.1.0": { + "releaseDate": "2017-10-20" + }, + "5.1.1": { + "releaseDate": "2018-01-10" + }, + "5.1.2": { + "releaseDate": "2018-02-02" + }, + "5.1.3": { + "releaseDate": "2018-03-02" + }, + "5.1.4": { + "releaseDate": "2018-03-02" + }, + "5.1.5": { + "releaseDate": "2018-03-02" + }, + "5.1.6": { + "releaseDate": "2018-03-05" + }, + "5.1.7": { + "releaseDate": "2018-05-04" + }, + "5.1.8": { + "releaseDate": "2018-05-17" + }, + "5.1.9": { + "releaseDate": "2018-05-24" + }, + "5.1.10": { + "releaseDate": "2018-05-28" + }, + "5.2.0": { + "releaseDate": "2018-06-15" + }, + "5.3.0": { + "releaseDate": "2018-06-21" + }, + "5.4": { + "releaseDate": "2018-09-21" + }, + "5.4.0": { + "releaseDate": "2018-09-21" + }, + "6.0.0": { + "releaseDate": "2018-09-24" + }, + "6.1.0": { + "releaseDate": "2018-10-15" + }, + "6.1.1": { + "releaseDate": "2018-11-30" + }, + "6.2.0": { + "releaseDate": "2019-02-11" + }, + "6.3.0": { + "releaseDate": "2019-03-18" + }, + "7.0.0": { + "releaseDate": "2019-04-18" + }, + "7.0.1": { + "releaseDate": "2019-11-15" + }, + "7.0.2": { + "releaseDate": "2019-12-13" + }, + "7.0.3": { + "releaseDate": "2019-12-16" + }, + "2dev": { + "releaseDate": "2020-03-23" + }, + "7.0.4": { + "releaseDate": "2020-03-24" + }, + "7.0.5": { + "releaseDate": "2020-05-26" + }, + "8.0.0": { + "releaseDate": "2020-07-20" + }, + "8.0.1": { + "releaseDate": "2020-07-28" + }, + "8.1.0": { + "releaseDate": "2020-08-04" + }, + "8.1.1": { + "releaseDate": "2020-09-17" + }, + "8.1.2": { + "releaseDate": "2020-10-06" + }, + "8.1.3": { + "releaseDate": "2020-10-27" + }, + "8.2.0": { + "releaseDate": "2020-11-03" + }, + "8.3.0": { + "releaseDate": "2020-11-23" + }, + "8.4.0": { + "releaseDate": "2020-12-17" + }, + "8.4.1": { + "releaseDate": "2020-12-18" + }, + "8.4.2": { + "releaseDate": "2020-12-21" + }, + "8.5.0": { + "releaseDate": "2021-01-18" + }, + "8.6.0": { + "releaseDate": "2021-02-03" + }, + "8.7.0": { + "releaseDate": "2021-02-15" + }, + "8.8.0": { + "releaseDate": "2021-03-02" + }, + "8.8.1": { + "releaseDate": "2021-03-03" + }, + "8.9.0": { + "releaseDate": "2021-07-07" + }, + "8.10.0": { + "releaseDate": "2021-07-13" + }, + "8.11.0": { + "releaseDate": "2021-10-06" + }, + "8.12.0": { + "releaseDate": "2021-11-05" + }, + "8.13.0": { + "releaseDate": "2021-12-13" + }, + "8.13.1": { + "releaseDate": "2021-12-22" + }, + "8.13.2": { + "releaseDate": "2022-01-12" + }, + "8.13.3": { + "releaseDate": "2022-01-21" + }, + "8.13.4": { + "releaseDate": "2022-02-21" + }, + "8.14.0": { + "releaseDate": "2022-03-18" + }, + "8.15.0": { + "releaseDate": "2022-08-04" + }, + "8.15.1": { + "releaseDate": "2022-08-29" + }, + "8.16.0": { + "releaseDate": "2022-10-24" + }, + "8.17.0": { + "releaseDate": "2023-02-06" + }, + "8.18.0": { + "releaseDate": "2023-03-24" + }, + "8.18.1": { + "releaseDate": "2023-06-22" + }, + "8.18.2": { + "releaseDate": "2023-08-15" + }, + "8.19.0": { + "releaseDate": "2023-12-07" + }, + "8.20.0": { + "releaseDate": "2024-02-02" + }, + "8.20.1": { + "releaseDate": "2024-03-04" + }, + "9.0.0": { + "releaseDate": "2024-08-14" + }, + "9.0.1": { + "releaseDate": "2024-08-14" + }, + "9.0.2": { + "releaseDate": "2024-08-19" + }, + "9.1.0": { + "releaseDate": "2024-08-20" + }, + "9.1.1": { + "releaseDate": "2024-08-21" + }, + "9.2.0": { + "releaseDate": "2024-08-27" + }, + "9.2.1": { + "releaseDate": "2024-08-28" + }, + "9.2.2": { + "releaseDate": "2024-08-29" + }, + "9.2.3": { + "releaseDate": "2024-09-02" + }, + "9.2.4": { + "releaseDate": "2024-09-03" + }, + "9.3.0": { + "releaseDate": "2024-09-06" + }, + "9.3.1": { + "releaseDate": "2024-09-12" + }, + "9.3.2": { + "releaseDate": "2024-09-17" + }, + "8.21.0": { + "releaseDate": "2024-09-18" + }, + "9.3.3": { + "releaseDate": "2024-09-19" + }, + "9.4.0": { + "releaseDate": "2024-09-19" + }, + "9.5.0": { + "releaseDate": "2024-09-24" + }, + "9.5.1": { + "releaseDate": "2024-09-25" + } + }, + "php": { + "1.0.0": { + "releaseDate": "2013-12-16" + }, + "1.1.0": { + "releaseDate": "2013-12-23" + }, + "1.1.1": { + "releaseDate": "2014-01-20" + }, + "1.1.2": { + "releaseDate": "2014-01-29" + }, + "1.1.3": { + "releaseDate": "2014-01-29" + }, + "1.1.5": { + "releaseDate": "2014-01-31" + }, + "1.1.6": { + "releaseDate": "2014-02-13" + }, + "1.1.7": { + "releaseDate": "2014-03-06" + }, + "1.1.8": { + "releaseDate": "2014-04-02" + }, + "1.1.9": { + "releaseDate": "2014-04-30" + }, + "1.2.0": { + "releaseDate": "2014-06-14" + }, + "1.2.1": { + "releaseDate": "2014-07-08" + }, + "1.2.2": { + "releaseDate": "2014-07-17" + }, + "1.3.0": { + "releaseDate": "2014-07-24" + }, + "1.3.1": { + "releaseDate": "2014-07-24" + }, + "1.3.2": { + "releaseDate": "2014-07-28" + }, + "1.3.3": { + "releaseDate": "2014-07-28" + }, + "1.3.4": { + "releaseDate": "2014-08-18" + }, + "1.3.5": { + "releaseDate": "2014-09-14" + }, + "1.4.0": { + "releaseDate": "2014-10-17" + }, + "1.4.1": { + "releaseDate": "2014-10-22" + }, + "1.5.0": { + "releaseDate": "2014-11-29" + }, + "1.5.1": { + "releaseDate": "2014-12-11" + }, + "1.5.2": { + "releaseDate": "2015-01-07" + }, + "1.5.3": { + "releaseDate": "2015-01-20" + }, + "1.5.4": { + "releaseDate": "2015-03-12" + }, + "1.5.5": { + "releaseDate": "2015-04-09" + }, + "1.5.6": { + "releaseDate": "2015-04-30" + }, + "1.5.8": { + "releaseDate": "2015-05-27" + }, + "1.6.0": { + "releaseDate": "2015-07-03" + }, + "1.6.1": { + "releaseDate": "2015-09-07" + }, + "1.7.0": { + "releaseDate": "2015-10-16" + }, + "1.6.2": { + "releaseDate": "2015-11-19" + }, + "1.6.3": { + "releaseDate": "2015-12-07" + }, + "1.7.1": { + "releaseDate": "2016-02-23" + }, + "1.8.0": { + "releaseDate": "2016-02-24" + }, + "1.8.1": { + "releaseDate": "2016-03-08" + }, + "1.8.2": { + "releaseDate": "2016-05-05" + }, + "1.9.0": { + "releaseDate": "2016-05-10" + }, + "1.9.1": { + "releaseDate": "2016-05-17" + }, + "1.9.2": { + "releaseDate": "2016-05-18" + }, + "1.9.3": { + "releaseDate": "2016-06-03" + }, + "1.9.4": { + "releaseDate": "2016-06-14" + }, + "1.10.0": { + "releaseDate": "2016-06-23" + }, + "1.10.1": { + "releaseDate": "2016-06-29" + }, + "1.10.2": { + "releaseDate": "2016-08-05" + }, + "1.10.3": { + "releaseDate": "2016-10-03" + }, + "1.11.0": { + "releaseDate": "2016-10-20" + }, + "1.12.0": { + "releaseDate": "2016-12-08" + }, + "1.12.1": { + "releaseDate": "2016-12-09" + }, + "1.13.0": { + "releaseDate": "2016-12-21" + }, + "1.14.0": { + "releaseDate": "2017-02-07" + }, + "1.15.0": { + "releaseDate": "2017-02-25" + }, + "1.16.0": { + "releaseDate": "2017-02-28" + }, + "1.17.0": { + "releaseDate": "2017-04-03" + }, + "1.18.0": { + "releaseDate": "2017-05-22" + }, + "1.19.0": { + "releaseDate": "2017-08-28" + }, + "1.20.0": { + "releaseDate": "2017-08-30" + }, + "1.21.0": { + "releaseDate": "2017-10-06" + }, + "1.22.0": { + "releaseDate": "2017-10-17" + }, + "1.23.0": { + "releaseDate": "2017-10-26" + }, + "1.23.1": { + "releaseDate": "2017-11-07" + }, + "1.24.0": { + "releaseDate": "2017-12-12" + }, + "1.25.0": { + "releaseDate": "2017-12-28" + }, + "1.25.1": { + "releaseDate": "2018-03-02" + }, + "1.26.0": { + "releaseDate": "2018-06-07" + }, + "1.26.1": { + "releaseDate": "2018-06-15" + }, + "1.27.0": { + "releaseDate": "2018-06-19" + }, + "1.28.0": { + "releaseDate": "2018-11-06" + }, + "2.0.0": { + "releaseDate": "2018-11-22" + }, + "2.0.1": { + "releaseDate": "2018-12-12" + }, + "2.1.0": { + "releaseDate": "2018-12-19" + }, + "2.1.1": { + "releaseDate": "2018-12-19" + }, + "2.1.2": { + "releaseDate": "2018-12-26" + }, + "2.1.3": { + "releaseDate": "2019-01-11" + }, + "2.2.0": { + "releaseDate": "2019-01-23" + }, + "2.2.1": { + "releaseDate": "2019-02-21" + }, + "2.2.2": { + "releaseDate": "2019-02-26" + }, + "2.2.3": { + "releaseDate": "2019-02-26" + }, + "2.2.4": { + "releaseDate": "2019-05-07" + }, + "2.2.5": { + "releaseDate": "2019-05-14" + }, + "2.2.6": { + "releaseDate": "2019-05-15" + }, + "2.3.0": { + "releaseDate": "2019-07-18" + }, + "2.4.0": { + "releaseDate": "2019-09-11" + }, + "2.5.0": { + "releaseDate": "2019-11-05" + }, + "2.5.1": { + "releaseDate": "2020-01-27" + }, + "2.6.0": { + "releaseDate": "2020-03-09" + }, + "2.6.1": { + "releaseDate": "2020-04-16" + }, + "1.28.1": { + "releaseDate": "2020-06-03" + }, + "2.6.2": { + "releaseDate": "2020-06-23" + }, + "2.7.0": { + "releaseDate": "2020-06-25" + }, + "2.7.1": { + "releaseDate": "2020-11-12" + }, + "2.7.2": { + "releaseDate": "2020-11-24" + }, + "2.7.3": { + "releaseDate": "2020-12-22" + }, + "2.8.0": { + "releaseDate": "2021-04-07" + }, + "3.0.0": { + "releaseDate": "2021-04-14" + }, + "3.0.1": { + "releaseDate": "2021-04-23" + }, + "3.0.2": { + "releaseDate": "2021-05-04" + }, + "3.1.0": { + "releaseDate": "2021-08-31" + }, + "3.2.0": { + "releaseDate": "2022-01-04" + }, + "3.3.0": { + "releaseDate": "2022-07-06" + }, + "3.3.1": { + "releaseDate": "2022-08-02" + }, + "3.3.2": { + "releaseDate": "2022-09-22" + }, + "3.4.0": { + "releaseDate": "2023-08-10" + }, + "3.4.1": { + "releaseDate": "2023-08-28" + }, + "4.0.0": { + "releaseDate": "2024-08-14" + }, + "4.0.1": { + "releaseDate": "2024-08-14" + }, + "4.0.2": { + "releaseDate": "2024-08-19" + }, + "4.1.0": { + "releaseDate": "2024-08-20" + }, + "4.2.0": { + "releaseDate": "2024-08-21" + }, + "4.3.0": { + "releaseDate": "2024-08-27" + }, + "4.3.1": { + "releaseDate": "2024-08-28" + }, + "4.3.2": { + "releaseDate": "2024-08-29" + }, + "4.3.3": { + "releaseDate": "2024-08-29" + }, + "4.3.4": { + "releaseDate": "2024-09-02" + }, + "4.3.5": { + "releaseDate": "2024-09-03" + }, + "4.4.0": { + "releaseDate": "2024-09-06" + }, + "4.4.1": { + "releaseDate": "2024-09-12" + }, + "4.4.2": { + "releaseDate": "2024-09-17" + }, + "4.4.3": { + "releaseDate": "2024-09-19" + }, + "4.4.4": { + "releaseDate": "2024-09-25" + } + }, + "go": { + "1.0.0": { + "releaseDate": "2014-10-16" + }, + "1.0.1": { + "releaseDate": "2014-10-22" + }, + "1.0.2": { + "releaseDate": "2014-11-27" + }, + "1.1.0": { + "releaseDate": "2014-11-30" + }, + "1.1.1": { + "releaseDate": "2015-01-23" + }, + "1.2.0": { + "releaseDate": "2015-04-09" + }, + "1.2.1": { + "releaseDate": "2015-05-04" + }, + "1.3.0": { + "releaseDate": "2015-07-07" + }, + "1.4.0": { + "releaseDate": "2015-10-16" + }, + "1.5.0": { + "releaseDate": "2016-06-01" + }, + "2.0.0": { + "releaseDate": "2016-06-06" + }, + "2.1.0": { + "releaseDate": "2016-10-03" + }, + "2.1.1": { + "releaseDate": "2016-10-03" + }, + "2.1.2": { + "releaseDate": "2016-10-19" + }, + "2.2.0": { + "releaseDate": "2016-10-19" + }, + "2.3.0": { + "releaseDate": "2016-11-02" + }, + "2.3.1": { + "releaseDate": "2016-11-02" + }, + "2.4.0": { + "releaseDate": "2016-11-02" + }, + "2.5.0": { + "releaseDate": "2016-11-29" + }, + "2.6.0": { + "releaseDate": "2016-12-08" + }, + "2.7.0": { + "releaseDate": "2016-12-28" + }, + "2.7.1": { + "releaseDate": "2017-01-25" + }, + "2.8.0": { + "releaseDate": "2017-02-14" + }, + "2.9.0": { + "releaseDate": "2017-02-24" + }, + "2.9.1": { + "releaseDate": "2017-03-22" + }, + "2.10.0": { + "releaseDate": "2017-03-24" + }, + "2.11.0": { + "releaseDate": "2017-03-24" + }, + "2.12.0": { + "releaseDate": "2017-04-12" + }, + "2.13.0": { + "releaseDate": "2017-04-26" + }, + "2.14.0": { + "releaseDate": "2017-06-06" + }, + "2.15.0": { + "releaseDate": "2017-06-30" + }, + "2.16.0": { + "releaseDate": "2017-08-02" + }, + "2.17.0": { + "releaseDate": "2017-08-07" + }, + "2.18.0": { + "releaseDate": "2017-08-23" + }, + "2.19.0": { + "releaseDate": "2017-08-28" + }, + "2.19.1": { + "releaseDate": "2017-09-06" + }, + "2.20.0": { + "releaseDate": "2017-10-11" + }, + "2.21.0": { + "releaseDate": "2017-11-14" + }, + "2.21.1": { + "releaseDate": "2017-11-29" + }, + "2.21.2": { + "releaseDate": "2018-02-05" + }, + "2.21.3": { + "releaseDate": "2018-02-13" + }, + "2.22.0": { + "releaseDate": "2018-03-26" + }, + "2.23.0": { + "releaseDate": "2018-06-19" + }, + "2.23.1": { + "releaseDate": "2018-06-29" + }, + "2.24.0": { + "releaseDate": "2018-08-24" + }, + "2.25.0": { + "releaseDate": "2018-09-06" + }, + "2.26.0": { + "releaseDate": "2018-12-07" + }, + "2.26.1": { + "releaseDate": "2018-12-07" + }, + "2.27.0": { + "releaseDate": "2018-12-17" + }, + "2.28.0": { + "releaseDate": "2019-04-10" + }, + "3.0.0": { + "releaseDate": "2019-06-11" + }, + "3.1.0": { + "releaseDate": "2019-07-08" + }, + "3.2.0": { + "releaseDate": "2019-08-20" + }, + "3.2.1": { + "releaseDate": "2019-08-21" + }, + "3.3.0": { + "releaseDate": "2019-09-06" + }, + "3.4.0": { + "releaseDate": "2019-09-25" + }, + "3.5.0": { + "releaseDate": "2019-12-13" + }, + "3.5.1": { + "releaseDate": "2020-01-24" + }, + "3.5.2": { + "releaseDate": "2020-01-24" + }, + "3.6.0": { + "releaseDate": "2020-03-09" + }, + "3.6.1": { + "releaseDate": "2020-04-06" + }, + "3.7.0": { + "releaseDate": "2020-05-07" + }, + "3.8.0": { + "releaseDate": "2020-05-20" + }, + "3.8.1": { + "releaseDate": "2020-06-26" + }, + "3.8.2": { + "releaseDate": "2020-07-03" + }, + "3.9.0": { + "releaseDate": "2020-07-20" + }, + "3.10.0": { + "releaseDate": "2020-08-12" + }, + "3.11.0": { + "releaseDate": "2020-08-13" + }, + "3.12.0": { + "releaseDate": "2020-09-29" + }, + "3.12.1": { + "releaseDate": "2020-10-02" + }, + "3.13.0": { + "releaseDate": "2020-10-15" + }, + "3.14.0": { + "releaseDate": "2020-11-24" + }, + "3.15.0": { + "releaseDate": "2021-01-06" + }, + "3.15.1": { + "releaseDate": "2021-01-14" + }, + "3.16.0": { + "releaseDate": "2021-01-30" + }, + "3.17.0": { + "releaseDate": "2021-03-08" + }, + "3.18.0": { + "releaseDate": "2021-03-26" + }, + "3.18.1": { + "releaseDate": "2021-04-02" + }, + "3.19.0": { + "releaseDate": "2021-06-23" + }, + "3.20.0": { + "releaseDate": "2021-07-05" + }, + "3.21.0": { + "releaseDate": "2021-07-26" + }, + "3.22.0": { + "releaseDate": "2021-11-08" + }, + "3.23.0": { + "releaseDate": "2022-01-11" + }, + "3.24.0": { + "releaseDate": "2022-03-25" + }, + "3.25.0": { + "releaseDate": "2022-04-13" + }, + "3.26.0": { + "releaseDate": "2022-07-04" + }, + "3.26.1": { + "releaseDate": "2022-08-31" + }, + "3.26.2": { + "releaseDate": "2023-01-18" + }, + "3.26.3": { + "releaseDate": "2023-02-16" + }, + "3.26.4": { + "releaseDate": "2023-02-24" + }, + "3.26.5": { + "releaseDate": "2023-03-29" + }, + "3.27.0": { + "releaseDate": "2023-03-30" + }, + "3.28.0": { + "releaseDate": "2023-04-13" + }, + "3.28.1": { + "releaseDate": "2023-04-19" + }, + "3.29.0": { + "releaseDate": "2023-05-09" + }, + "3.29.1": { + "releaseDate": "2023-05-09" + }, + "3.29.2": { + "releaseDate": "2023-05-11" + }, + "3.29.4": { + "releaseDate": "2023-05-22" + }, + "3.30.0": { + "releaseDate": "2023-06-06" + }, + "3.30.1": { + "releaseDate": "2023-07-05" + }, + "3.31.0": { + "releaseDate": "2023-08-25" + }, + "3.31.1": { + "releaseDate": "2024-03-04" + }, + "3.31.2": { + "releaseDate": "2024-06-25" + }, + "4.0.0": { + "releaseDate": "2024-08-14" + }, + "4.0.1": { + "releaseDate": "2024-08-14" + }, + "4.0.2": { + "releaseDate": "2024-08-19" + }, + "4.1.0": { + "releaseDate": "2024-08-20" + }, + "4.1.1": { + "releaseDate": "2024-08-21" + }, + "4.2.0": { + "releaseDate": "2024-08-27" + }, + "4.2.1": { + "releaseDate": "2024-08-28" + }, + "4.2.2": { + "releaseDate": "2024-08-29" + }, + "4.2.3": { + "releaseDate": "2024-09-02" + }, + "4.2.4": { + "releaseDate": "2024-09-03" + }, + "4.3.0": { + "releaseDate": "2024-09-06" + }, + "4.3.1": { + "releaseDate": "2024-09-12" + }, + "4.3.2": { + "releaseDate": "2024-09-17" + }, + "4.3.3": { + "releaseDate": "2024-09-19" + }, + "3.31.3": { + "releaseDate": "2024-09-23" + }, + "4.3.4": { + "releaseDate": "2024-09-24" + }, + "4.3.5": { + "releaseDate": "2024-09-25" + } + }, + "java": { + "2.0.0": { + "releaseDate": "2016-07-06" + }, + "2.1.0": { + "releaseDate": "2016-07-12" + }, + "2.2.0": { + "releaseDate": "2016-07-27" + }, + "2.2.1": { + "releaseDate": "2016-08-03" + }, + "2.3.0": { + "releaseDate": "2016-08-22" + }, + "2.3.1": { + "releaseDate": "2016-09-01" + }, + "2.4.0": { + "releaseDate": "2016-10-03" + }, + "2.4.1": { + "releaseDate": "2016-10-04" + }, + "2.5.0": { + "releaseDate": "2016-11-08" + }, + "2.6.0": { + "releaseDate": "2016-12-09" + }, + "2.6.1": { + "releaseDate": "2016-12-09" + }, + "2.7.0": { + "releaseDate": "2016-12-20" + }, + "2.8.0": { + "releaseDate": "2017-02-06" + }, + "2.9.0": { + "releaseDate": "2017-04-11" + }, + "2.10.0": { + "releaseDate": "2017-05-30" + }, + "2.11.0": { + "releaseDate": "2017-07-03" + }, + "2.11.1": { + "releaseDate": "2017-07-07" + }, + "2.11.2": { + "releaseDate": "2017-07-21" + }, + "2.11.3": { + "releaseDate": "2017-08-01" + }, + "2.12.0": { + "releaseDate": "2017-08-22" + }, + "2.13.0": { + "releaseDate": "2017-09-13" + }, + "2.13.1": { + "releaseDate": "2017-09-25" + }, + "2.13.2": { + "releaseDate": "2017-09-27" + }, + "2.13.3": { + "releaseDate": "2017-10-09" + }, + "2.14.0": { + "releaseDate": "2017-10-19" + }, + "2.15.0": { + "releaseDate": "2017-11-14" + }, + "2.15.1": { + "releaseDate": "2017-11-17" + }, + "2.15.2": { + "releaseDate": "2017-11-20" + }, + "2.15.3": { + "releaseDate": "2017-12-07" + }, + "2.15.4": { + "releaseDate": "2017-12-11" + }, + "2.15.5": { + "releaseDate": "2017-12-29" + }, + "2.15.6": { + "releaseDate": "2018-01-24" + }, + "2.15.7": { + "releaseDate": "2018-02-20" + }, + "2.16.0": { + "releaseDate": "2018-02-26" + }, + "2.16.1": { + "releaseDate": "2018-02-27" + }, + "2.16.2": { + "releaseDate": "2018-02-28" + }, + "2.16.3": { + "releaseDate": "2018-03-05" + }, + "2.16.4": { + "releaseDate": "2018-03-06" + }, + "2.16.5": { + "releaseDate": "2018-03-07" + }, + "2.16.6": { + "releaseDate": "2018-03-09" + }, + "2.16.7": { + "releaseDate": "2018-04-03" + }, + "2.16.8": { + "releaseDate": "2018-04-03" + }, + "2.17.0": { + "releaseDate": "2018-06-07" + }, + "2.17.1": { + "releaseDate": "2018-06-07" + }, + "2.17.2": { + "releaseDate": "2018-06-12" + }, + "2.17.3": { + "releaseDate": "2018-06-15" + }, + "2.18.0": { + "releaseDate": "2018-07-26" + }, + "2.18.1": { + "releaseDate": "2018-08-07" + }, + "2.19.0": { + "releaseDate": "2018-09-03" + }, + "2.20.0": { + "releaseDate": "2018-10-18" + }, + "2.21.0": { + "releaseDate": "2018-12-17" + }, + "2.21.1": { + "releaseDate": "2018-12-18" + }, + "2.22.0": { + "releaseDate": "2019-01-17" + }, + "3.0.0": { + "releaseDate": "2019-06-10" + }, + "2.23.0": { + "releaseDate": "2019-07-10" + }, + "3.1.0": { + "releaseDate": "2019-08-07" + }, + "3.2.0": { + "releaseDate": "2019-08-14" + }, + "3.2.1": { + "releaseDate": "2019-08-19" + }, + "3.3.0": { + "releaseDate": "2019-10-21" + }, + "3.4.0": { + "releaseDate": "2019-10-24" + }, + "3.5.0": { + "releaseDate": "2019-10-31" + }, + "3.6.0": { + "releaseDate": "2019-11-06" + }, + "3.6.1": { + "releaseDate": "2019-11-12" + }, + "3.6.2": { + "releaseDate": "2019-11-26" + }, + "3.7.0": { + "releaseDate": "2020-02-06" + }, + "3.8.0": { + "releaseDate": "2020-03-25" + }, + "3.8.1": { + "releaseDate": "2020-03-26" + }, + "3.9.0": { + "releaseDate": "2020-04-21" + }, + "3.10.0": { + "releaseDate": "2020-06-12" + }, + "3.11.0": { + "releaseDate": "2020-07-17" + }, + "3.12.0": { + "releaseDate": "2020-07-28" + }, + "3.12.1": { + "releaseDate": "2020-11-03" + }, + "3.13.0": { + "releaseDate": "2021-03-31" + }, + "3.14.0": { + "releaseDate": "2021-04-29" + }, + "3.14.1": { + "releaseDate": "2021-05-03" + }, + "3.14.2": { + "releaseDate": "2021-06-02" + }, + "3.14.3": { + "releaseDate": "2021-06-29" + }, + "3.15.0": { + "releaseDate": "2021-07-23" + }, + "3.15.1": { + "releaseDate": "2021-08-20" + }, + "3.16.0": { + "releaseDate": "2021-10-14" + }, + "3.16.1": { + "releaseDate": "2021-10-29" + }, + "3.16.2": { + "releaseDate": "2022-01-07" + }, + "3.16.3": { + "releaseDate": "2022-01-27" + }, + "3.16.4": { + "releaseDate": "2022-02-07" + }, + "3.16.5": { + "releaseDate": "2022-03-18" + }, + "3.16.6": { + "releaseDate": "2022-08-03" + }, + "3.16.7": { + "releaseDate": "2023-06-02" + }, + "3.16.8": { + "releaseDate": "2023-12-20" + }, + "3.16.9": { + "releaseDate": "2024-02-08" + }, + "4.0.0": { + "releaseDate": "2024-08-14" + }, + "4.0.1": { + "releaseDate": "2024-08-14" + }, + "4.0.2": { + "releaseDate": "2024-08-19" + }, + "4.1.0": { + "releaseDate": "2024-08-20" + }, + "4.1.1": { + "releaseDate": "2024-08-21" + }, + "4.2.0": { + "releaseDate": "2024-08-27" + }, + "4.2.1": { + "releaseDate": "2024-08-28" + }, + "4.2.2": { + "releaseDate": "2024-08-29" + }, + "4.2.3": { + "releaseDate": "2024-08-29" + }, + "4.2.4": { + "releaseDate": "2024-09-02" + }, + "4.2.5": { + "releaseDate": "2024-09-03" + }, + "4.3.0": { + "releaseDate": "2024-09-06" + }, + "4.3.1": { + "releaseDate": "2024-09-12" + }, + "4.3.2": { + "releaseDate": "2024-09-17" + }, + "4.3.3": { + "releaseDate": "2024-09-19" + }, + "4.3.4": { + "releaseDate": "2024-09-19" + }, + "4.3.5": { + "releaseDate": "2024-09-20" + }, + "4.3.6": { + "releaseDate": "2024-09-24" + }, + "4.3.7": { + "releaseDate": "2024-09-25" + } + }, + "javascript": { + "2.0.0": { + "releaseDate": "2013-10-07" + }, + "2.0.1": { + "releaseDate": "2013-10-15" + }, + "2.1.0": { + "releaseDate": "2013-11-03" + }, + "2.2.0": { + "releaseDate": "2013-11-07" + }, + "2.3.0": { + "releaseDate": "2013-11-07" + }, + "2.3.1": { + "releaseDate": "2013-11-08" + }, + "2.3.2": { + "releaseDate": "2013-11-22" + }, + "2.3.3": { + "releaseDate": "2013-11-29" + }, + "2.3.4": { + "releaseDate": "2013-12-04" + }, + "2.3.6": { + "releaseDate": "2013-12-17" + }, + "2.3.7": { + "releaseDate": "2014-01-08" + }, + "2.3.8": { + "releaseDate": "2014-01-16" + }, + "2.4.0": { + "releaseDate": "2014-02-12" + }, + "2.4.1": { + "releaseDate": "2014-02-19" + }, + "2.4.3": { + "releaseDate": "2014-03-12" + }, + "2.4.4": { + "releaseDate": "2014-03-19" + }, + "2.4.6": { + "releaseDate": "2014-04-05" + }, + "2.4.7": { + "releaseDate": "2014-04-23" + }, + "2.5.0": { + "releaseDate": "2014-05-09" + }, + "2.5.1": { + "releaseDate": "2014-05-14" + }, + "2.5.2": { + "releaseDate": "2014-06-05" + }, + "2.5.3": { + "releaseDate": "2014-07-23" + }, + "2.6.0": { + "releaseDate": "2014-09-06" + }, + "2.6.1": { + "releaseDate": "2014-09-20" + }, + "2.6.2": { + "releaseDate": "2014-09-20" + }, + "2.6.3": { + "releaseDate": "2014-09-23" + }, + "2.6.4": { + "releaseDate": "2014-09-23" + }, + "2.6.5": { + "releaseDate": "2014-09-26" + }, + "2.6.6": { + "releaseDate": "2014-10-07" + }, + "2.7.0": { + "releaseDate": "2014-10-15" + }, + "2.7.1": { + "releaseDate": "2014-10-15" + }, + "2.7.2": { + "releaseDate": "2014-10-27" + }, + "2.7.3": { + "releaseDate": "2014-10-29" + }, + "2.7.4": { + "releaseDate": "2014-11-12" + }, + "2.7.5": { + "releaseDate": "2014-11-25" + }, + "2.8.0": { + "releaseDate": "2014-11-29" + }, + "2.8.1": { + "releaseDate": "2014-12-09" + }, + "2.8.2": { + "releaseDate": "2014-12-23" + }, + "2.8.3": { + "releaseDate": "2014-12-30" + }, + "2.8.4": { + "releaseDate": "2014-12-31" + }, + "2.8.5": { + "releaseDate": "2015-01-07" + }, + "2.8.6": { + "releaseDate": "2015-01-13" + }, + "2.9.0": { + "releaseDate": "2015-01-14" + }, + "2.9.1": { + "releaseDate": "2015-02-03" + }, + "2.9.2": { + "releaseDate": "2015-02-16" + }, + "2.9.3": { + "releaseDate": "2015-03-19" + }, + "2.9.4": { + "releaseDate": "2015-03-20" + }, + "3.0.0": { + "releaseDate": "2015-03-25" + }, + "3.0.1": { + "releaseDate": "2015-03-26" + }, + "3.0.2": { + "releaseDate": "2015-03-26" + }, + "3.0.3": { + "releaseDate": "2015-03-28" + }, + "2.9.5": { + "releaseDate": "2015-04-02" + }, + "3.0.4": { + "releaseDate": "2015-04-02" + }, + "3.0.5": { + "releaseDate": "2015-04-02" + }, + "3.0.6": { + "releaseDate": "2015-04-03" + }, + "2.9.6": { + "releaseDate": "2015-04-10" + }, + "3.0.7": { + "releaseDate": "2015-04-10" + }, + "3.1.0": { + "releaseDate": "2015-04-14" + }, + "3.2.0": { + "releaseDate": "2015-04-24" + }, + "3.2.1": { + "releaseDate": "2015-04-29" + }, + "3.2.2": { + "releaseDate": "2015-05-06" + }, + "3.2.3": { + "releaseDate": "2015-05-09" + }, + "3.2.4": { + "releaseDate": "2015-05-11" + }, + "3.3.0": { + "releaseDate": "2015-05-12" + }, + "3.3.1": { + "releaseDate": "2015-05-13" + }, + "3.3.2": { + "releaseDate": "2015-05-14" + }, + "3.4.0": { + "releaseDate": "2015-05-23" + }, + "2.9.7": { + "releaseDate": "2015-06-03" + }, + "3.5.0": { + "releaseDate": "2015-06-03" + }, + "3.6.0": { + "releaseDate": "2015-06-05" + }, + "3.6.1": { + "releaseDate": "2015-06-16" + }, + "3.6.2": { + "releaseDate": "2015-06-17" + }, + "3.6.3": { + "releaseDate": "2015-06-18" + }, + "3.7.0": { + "releaseDate": "2015-06-23" + }, + "3.7.1": { + "releaseDate": "2015-07-08" + }, + "3.7.2": { + "releaseDate": "2015-07-08" + }, + "3.7.3": { + "releaseDate": "2015-07-09" + }, + "3.7.4": { + "releaseDate": "2015-07-20" + }, + "3.7.5": { + "releaseDate": "2015-07-23" + }, + "3.7.6": { + "releaseDate": "2015-08-24" + }, + "3.7.7": { + "releaseDate": "2015-08-27" + }, + "3.7.8": { + "releaseDate": "2015-09-01" + }, + "3.8.0": { + "releaseDate": "2015-09-17" + }, + "3.8.1": { + "releaseDate": "2015-09-21" + }, + "3.9.0": { + "releaseDate": "2015-10-23" + }, + "3.9.1": { + "releaseDate": "2015-11-02" + }, + "3.9.2": { + "releaseDate": "2015-11-05" + }, + "3.9.3": { + "releaseDate": "2015-12-01" + }, + "3.9.4": { + "releaseDate": "2015-12-04" + }, + "3.10.0": { + "releaseDate": "2015-12-08" + }, + "3.10.1": { + "releaseDate": "2015-12-11" + }, + "3.10.2": { + "releaseDate": "2015-12-14" + }, + "3.11.0": { + "releaseDate": "2016-01-29" + }, + "3.12.0": { + "releaseDate": "2016-02-05" + }, + "3.13.0": { + "releaseDate": "2016-02-23" + }, + "3.13.1": { + "releaseDate": "2016-03-24" + }, + "3.14.0": { + "releaseDate": "2016-05-04" + }, + "3.14.1": { + "releaseDate": "2016-05-12" + }, + "3.14.2": { + "releaseDate": "2016-05-24" + }, + "3.14.3": { + "releaseDate": "2016-05-25" + }, + "3.14.4": { + "releaseDate": "2016-05-25" + }, + "3.14.5": { + "releaseDate": "2016-05-26" + }, + "3.14.6": { + "releaseDate": "2016-05-30" + }, + "3.15.0": { + "releaseDate": "2016-06-07" + }, + "3.15.1": { + "releaseDate": "2016-06-16" + }, + "3.16.0": { + "releaseDate": "2016-06-22" + }, + "3.17.0": { + "releaseDate": "2016-07-06" + }, + "3.18.0": { + "releaseDate": "2016-07-22" + }, + "3.18.1": { + "releaseDate": "2016-08-31" + }, + "3.19.0": { + "releaseDate": "2016-10-26" + }, + "3.19.1": { + "releaseDate": "2016-11-10" + }, + "3.19.2": { + "releaseDate": "2016-11-28" + }, + "3.20.0": { + "releaseDate": "2016-12-14" + }, + "3.20.1": { + "releaseDate": "2016-12-16" + }, + "3.20.2": { + "releaseDate": "2016-12-19" + }, + "3.20.3": { + "releaseDate": "2017-01-04" + }, + "3.20.4": { + "releaseDate": "2017-01-16" + }, + "3.21.0": { + "releaseDate": "2017-02-06" + }, + "3.21.1": { + "releaseDate": "2017-02-08" + }, + "3.22.0": { + "releaseDate": "2017-03-13" + }, + "3.22.1": { + "releaseDate": "2017-03-13" + }, + "3.22.2": { + "releaseDate": "2017-05-18" + }, + "3.22.3": { + "releaseDate": "2017-05-29" + }, + "3.23.0": { + "releaseDate": "2017-06-08" + }, + "3.24.0": { + "releaseDate": "2017-06-21" + }, + "3.24.1": { + "releaseDate": "2017-07-20" + }, + "3.24.2": { + "releaseDate": "2017-07-24" + }, + "3.24.3": { + "releaseDate": "2017-07-24" + }, + "3.24.4": { + "releaseDate": "2017-09-21" + }, + "3.24.5": { + "releaseDate": "2017-10-02" + }, + "3.24.6": { + "releaseDate": "2017-11-16" + }, + "3.24.7": { + "releaseDate": "2017-11-29" + }, + "3.24.8": { + "releaseDate": "2017-12-13" + }, + "3.24.9": { + "releaseDate": "2017-12-29" + }, + "3.24.10": { + "releaseDate": "2018-02-07" + }, + "3.24.11": { + "releaseDate": "2018-02-08" + }, + "3.24.12": { + "releaseDate": "2018-02-28" + }, + "3.25.0": { + "releaseDate": "2018-03-07" + }, + "3.25.1": { + "releaseDate": "2018-03-07" + }, + "3.26.0": { + "releaseDate": "2018-03-21" + }, + "3.27.0": { + "releaseDate": "2018-04-16" + }, + "3.27.1": { + "releaseDate": "2018-05-03" + }, + "3.28.0": { + "releaseDate": "2018-06-13" + }, + "3.29.0": { + "releaseDate": "2018-06-20" + }, + "3.30.0": { + "releaseDate": "2018-08-01" + }, + "3.31.0": { + "releaseDate": "2018-12-04" + }, + "3.32.0": { + "releaseDate": "2018-12-17" + }, + "3.32.1": { + "releaseDate": "2019-03-14" + }, + "3.33.0": { + "releaseDate": "2019-05-09" + }, + "3.34.0": { + "releaseDate": "2019-08-29" + }, + "3.35.0": { + "releaseDate": "2019-09-26" + }, + "3.35.1": { + "releaseDate": "2019-10-08" + }, + "4.0.0": { + "releaseDate": "2020-02-03" + }, + "4.0.1": { + "releaseDate": "2020-02-03" + }, + "4.0.2": { + "releaseDate": "2020-02-07" + }, + "4.0.3": { + "releaseDate": "2020-02-13" + }, + "4.1.0": { + "releaseDate": "2020-03-09" + }, + "4.2.0": { + "releaseDate": "2020-04-21" + }, + "4.3.0": { + "releaseDate": "2020-06-11" + }, + "4.3.1": { + "releaseDate": "2020-07-20" + }, + "4.4.0": { + "releaseDate": "2020-08-06" + }, + "4.5.0": { + "releaseDate": "2020-09-14" + }, + "4.5.1": { + "releaseDate": "2020-09-14" + }, + "4.6.0": { + "releaseDate": "2020-11-02" + }, + "4.7.0": { + "releaseDate": "2020-11-16" + }, + "4.8.0": { + "releaseDate": "2020-11-19" + }, + "4.8.1": { + "releaseDate": "2020-11-25" + }, + "4.8.2": { + "releaseDate": "2020-11-26" + }, + "4.8.3": { + "releaseDate": "2020-12-03" + }, + "4.8.4": { + "releaseDate": "2021-01-20" + }, + "4.8.5": { + "releaseDate": "2021-02-08" + }, + "4.8.6": { + "releaseDate": "2021-03-08" + }, + "4.9.0": { + "releaseDate": "2021-04-13" + }, + "4.9.1": { + "releaseDate": "2021-04-26" + }, + "4.9.2": { + "releaseDate": "2021-06-10" + }, + "4.9.3": { + "releaseDate": "2021-06-15" + }, + "4.10.0": { + "releaseDate": "2021-06-23" + }, + "4.10.2": { + "releaseDate": "2021-06-23" + }, + "4.10.3": { + "releaseDate": "2021-07-05" + }, + "4.10.4": { + "releaseDate": "2021-08-23" + }, + "4.10.5": { + "releaseDate": "2021-08-26" + }, + "4.11.0": { + "releaseDate": "2021-10-20" + }, + "4.12.0": { + "releaseDate": "2022-01-07" + }, + "4.12.1": { + "releaseDate": "2022-01-28" + }, + "4.12.2": { + "releaseDate": "2022-03-02" + }, + "4.13.0": { + "releaseDate": "2022-03-14" + }, + "4.13.1": { + "releaseDate": "2022-05-18" + }, + "4.14.0": { + "releaseDate": "2022-07-18" + }, + "4.14.1": { + "releaseDate": "2022-07-20" + }, + "4.14.2": { + "releaseDate": "2022-07-27" + }, + "4.14.3": { + "releaseDate": "2022-12-19" + }, + "4.15.0": { + "releaseDate": "2023-03-02" + }, + "4.16.0": { + "releaseDate": "2023-03-22" + }, + "4.17.0": { + "releaseDate": "2023-04-03" + }, + "4.17.1": { + "releaseDate": "2023-05-24" + }, + "4.17.2": { + "releaseDate": "2023-06-08" + }, + "4.18.0": { + "releaseDate": "2023-06-23" + }, + "4.19.0": { + "releaseDate": "2023-07-18" + }, + "4.19.1": { + "releaseDate": "2023-07-20" + }, + "4.20.0": { + "releaseDate": "2023-09-12" + }, + "4.21.0": { + "releaseDate": "2023-12-11" + }, + "4.21.1": { + "releaseDate": "2023-12-12" + }, + "4.22.0": { + "releaseDate": "2023-12-14" + }, + "4.22.1": { + "releaseDate": "2024-01-09" + }, + "4.23.0": { + "releaseDate": "2024-03-26" + }, + "4.23.1": { + "releaseDate": "2024-03-26" + }, + "4.23.2": { + "releaseDate": "2024-03-27" + }, + "4.23.3": { + "releaseDate": "2024-04-10" + }, + "4.24.0": { + "releaseDate": "2024-06-25" + }, + "5.0.0": { + "releaseDate": "2024-08-14" + }, + "5.0.1": { + "releaseDate": "2024-08-14" + }, + "5.0.2": { + "releaseDate": "2024-08-19" + }, + "5.1.0": { + "releaseDate": "2024-08-20" + }, + "5.1.1": { + "releaseDate": "2024-08-21" + }, + "5.2.0": { + "releaseDate": "2024-08-27" + }, + "5.2.1": { + "releaseDate": "2024-08-28" + }, + "5.2.2": { + "releaseDate": "2024-08-29" + }, + "5.2.3": { + "releaseDate": "2024-08-29" + }, + "5.2.4": { + "releaseDate": "2024-09-02" + }, + "5.2.5": { + "releaseDate": "2024-09-03" + }, + "5.3.0": { + "releaseDate": "2024-09-06" + }, + "5.3.1": { + "releaseDate": "2024-09-09" + }, + "5.3.2": { + "releaseDate": "2024-09-09" + }, + "5.4.0": { + "releaseDate": "2024-09-10" + }, + "5.4.1": { + "releaseDate": "2024-09-12" + }, + "5.4.2": { + "releaseDate": "2024-09-13" + }, + "5.4.3": { + "releaseDate": "2024-09-17" + }, + "5.5.0": { + "releaseDate": "2024-09-18" + }, + "5.5.1": { + "releaseDate": "2024-09-18" + }, + "5.5.2": { + "releaseDate": "2024-09-19" + }, + "5.5.3": { + "releaseDate": "2024-09-20" + }, + "5.6.0": { + "releaseDate": "2024-09-24" + }, + "5.6.1": { + "releaseDate": "2024-09-25" + } + }, + "python": { + "1.0.0": { + "releaseDate": "2013-10-09" + }, + "1.0.1": { + "releaseDate": "2013-10-09" + }, + "1.0.2": { + "releaseDate": "2013-10-11" + }, + "1.1.0": { + "releaseDate": "2013-11-07" + }, + "1.1.1": { + "releaseDate": "2013-11-08" + }, + "1.1.3": { + "releaseDate": "2013-12-06" + }, + "1.1.5": { + "releaseDate": "2013-12-06" + }, + "1.1.6": { + "releaseDate": "2013-12-10" + }, + "1.2.1": { + "releaseDate": "2013-12-18" + }, + "1.2.2": { + "releaseDate": "2013-12-23" + }, + "1.2.3": { + "releaseDate": "2014-01-11" + }, + "1.2.4": { + "releaseDate": "2014-01-11" + }, + "1.2.5": { + "releaseDate": "2014-01-31" + }, + "1.2.6": { + "releaseDate": "2014-02-02" + }, + "1.2.9": { + "releaseDate": "2014-03-31" + }, + "1.2.10": { + "releaseDate": "2014-04-18" + }, + "1.2.11": { + "releaseDate": "2014-07-17" + }, + "1.2.12": { + "releaseDate": "2014-08-20" + }, + "1.2.13": { + "releaseDate": "2014-08-21" + }, + "1.2.14": { + "releaseDate": "2014-08-22" + }, + "1.3.1": { + "releaseDate": "2014-09-14" + }, + "1.3.4": { + "releaseDate": "2014-09-15" + }, + "1.3.7": { + "releaseDate": "2014-09-17" + }, + "1.3.8": { + "releaseDate": "2014-09-17" + }, + "1.3.9": { + "releaseDate": "2014-09-17" + }, + "1.3.10": { + "releaseDate": "2014-10-11" + }, + "1.3.11": { + "releaseDate": "2014-10-22" + }, + "1.4.0": { + "releaseDate": "2014-11-29" + }, + "1.5.0": { + "releaseDate": "2014-12-26" + }, + "1.5.1": { + "releaseDate": "2015-03-13" + }, + "1.5.2": { + "releaseDate": "2015-04-09" + }, + "1.5.3": { + "releaseDate": "2015-04-24" + }, + "1.5.4": { + "releaseDate": "2015-05-04" + }, + "1.5.5": { + "releaseDate": "2015-06-16" + }, + "1.5.6": { + "releaseDate": "2015-06-18" + }, + "1.5.7": { + "releaseDate": "2015-06-19" + }, + "1.5.8": { + "releaseDate": "2015-07-10" + }, + "1.5.9": { + "releaseDate": "2015-07-22" + }, + "1.6.0": { + "releaseDate": "2015-07-30" + }, + "1.6.1": { + "releaseDate": "2015-07-30" + }, + "1.6.2": { + "releaseDate": "2015-08-01" + }, + "1.6.3": { + "releaseDate": "2015-08-13" + }, + "1.6.4": { + "releaseDate": "2015-08-17" + }, + "1.6.6": { + "releaseDate": "2015-09-07" + }, + "1.6.7": { + "releaseDate": "2015-10-06" + }, + "1.6.8": { + "releaseDate": "2015-10-07" + }, + "1.7.0": { + "releaseDate": "2015-10-16" + }, + "1.7.1": { + "releaseDate": "2015-10-23" + }, + "1.8.0": { + "releaseDate": "2016-02-11" + }, + "1.9.0": { + "releaseDate": "2016-06-15" + }, + "1.9.1": { + "releaseDate": "2016-07-05" + }, + "1.9.2": { + "releaseDate": "2016-08-08" + }, + "1.10.0": { + "releaseDate": "2016-10-19" + }, + "1.11.0": { + "releaseDate": "2016-12-02" + }, + "1.11.2": { + "releaseDate": "2017-01-31" + }, + "1.11.3": { + "releaseDate": "2017-02-23" + }, + "1.12.0": { + "releaseDate": "2017-03-02" + }, + "1.14.0": { + "releaseDate": "2017-10-30" + }, + "1.14.1": { + "releaseDate": "2017-11-06" + }, + "1.15.0": { + "releaseDate": "2017-12-05" + }, + "1.15.2": { + "releaseDate": "2017-12-18" + }, + "1.15.3": { + "releaseDate": "2018-03-15" + }, + "1.16.0": { + "releaseDate": "2018-06-07" + }, + "1.17.0": { + "releaseDate": "2018-06-19" + }, + "1.18.0": { + "releaseDate": "2018-11-23" + }, + "1.18.1": { + "releaseDate": "2018-11-26" + }, + "1.19.0": { + "releaseDate": "2018-12-18" + }, + "1.20.0": { + "releaseDate": "2019-01-23" + }, + "2.0.0": { + "releaseDate": "2019-04-23" + }, + "2.0.1": { + "releaseDate": "2019-05-14" + }, + "2.0.2": { + "releaseDate": "2019-05-21" + }, + "2.0.3": { + "releaseDate": "2019-05-28" + }, + "2.0.4": { + "releaseDate": "2019-06-17" + }, + "2.1.0": { + "releaseDate": "2019-09-04" + }, + "2.2.0": { + "releaseDate": "2020-03-09" + }, + "2.3.0": { + "releaseDate": "2020-06-04" + }, + "2.3.1": { + "releaseDate": "2020-07-09" + }, + "2.4.0": { + "releaseDate": "2020-08-10" + }, + "2.5.0": { + "releaseDate": "2021-04-30" + }, + "2.6.0": { + "releaseDate": "2021-10-08" + }, + "2.6.1": { + "releaseDate": "2021-12-13" + }, + "2.6.2": { + "releaseDate": "2022-05-04" + }, + "2.6.3": { + "releaseDate": "2023-01-03" + }, + "3.0.0": { + "releaseDate": "2023-02-27" + }, + "4.0.0": { + "releaseDate": "2024-08-14" + }, + "4.0.1": { + "releaseDate": "2024-08-14" + }, + "4.0.2": { + "releaseDate": "2024-08-19" + }, + "4.1.0": { + "releaseDate": "2024-08-20" + }, + "4.1.1": { + "releaseDate": "2024-08-21" + }, + "4.2.0": { + "releaseDate": "2024-08-27" + }, + "4.2.1": { + "releaseDate": "2024-08-28" + }, + "4.2.2": { + "releaseDate": "2024-08-29" + }, + "4.2.3": { + "releaseDate": "2024-09-02" + }, + "4.2.4": { + "releaseDate": "2024-09-03" + }, + "4.3.0": { + "releaseDate": "2024-09-06" + }, + "4.4.0": { + "releaseDate": "2024-09-09" + }, + "4.4.1": { + "releaseDate": "2024-09-12" + }, + "4.4.2": { + "releaseDate": "2024-09-17" + }, + "4.4.3": { + "releaseDate": "2024-09-19" + }, + "4.4.4": { + "releaseDate": "2024-09-19" + }, + "4.4.5": { + "releaseDate": "2024-09-24" + }, + "4.4.6": { + "releaseDate": "2024-09-25" + } + } +} \ No newline at end of file diff --git a/scripts/.eslintrc.cjs b/scripts/.eslintrc.cjs index 3a58bbdfc18..9389e997bc4 100644 --- a/scripts/.eslintrc.cjs +++ b/scripts/.eslintrc.cjs @@ -1,5 +1,5 @@ module.exports = { - ignorePatterns: ['**.yml', 'tsconfig.json'], + ignorePatterns: ['**.yml', 'tsconfig.json', 'foo'], extends: "../.eslintrc.cjs", diff --git a/scripts/ci/codegen/createGitHubReleases.ts b/scripts/ci/codegen/createGitHubReleases.ts index 72d3b1d3142..e7c6ce71cc1 100644 --- a/scripts/ci/codegen/createGitHubReleases.ts +++ b/scripts/ci/codegen/createGitHubReleases.ts @@ -1,7 +1,7 @@ /* eslint-disable no-console */ import { ensureGitHubToken, getOctokit, OWNER, run, setVerbose, toAbsolutePath } from '../../common'; -import { isPreRelease } from '../../release/sla'; +import { isPreRelease } from '../../release/versionsHistory'; import type { Language } from '../../types'; import { cloneRepository } from '../utils'; diff --git a/scripts/ci/codegen/pushToAlgoliaDoc.ts b/scripts/ci/codegen/pushToAlgoliaDoc.ts index 781b0f13d9c..cb12a7a8488 100644 --- a/scripts/ci/codegen/pushToAlgoliaDoc.ts +++ b/scripts/ci/codegen/pushToAlgoliaDoc.ts @@ -86,15 +86,6 @@ async function pushToAlgoliaDoc(): Promise { head: targetBranch, }); - await octokit.issues.createComment({ - owner: OWNER, - repo: repository, - issue_number: data.number, - body: [ - `[**Preview SLA changes→**](https://deploy-preview-${data.number}--algolia-docs.netlify.app/doc/libraries/supported-versions/)`, - ].join('\n\n'), - }); - console.log(`Pull request created on ${OWNER}/${repository}`); console.log(` > ${data.url}`); } diff --git a/scripts/cli/index.ts b/scripts/cli/index.ts index 5b3337e0100..7102664ff38 100644 --- a/scripts/cli/index.ts +++ b/scripts/cli/index.ts @@ -11,7 +11,7 @@ import { formatter } from '../formatter.js'; import { generate } from '../generate.js'; import { playground } from '../playground.js'; import { createReleasePR } from '../release/createReleasePR.js'; -import { generateSLA } from '../release/sla.js'; +import { generateVersionsHistory } from '../release/versionsHistory.js'; import { snippetsGenerateMany } from '../snippets/generate.js'; import { buildSpecs } from '../specs'; import type { Language } from '../types.js'; @@ -255,13 +255,13 @@ program undefined, ) .option('-d, --dry-run', 'does not push anything to GitHub') - .option('-sla, --sla-only', 'only generates the sla policy', false) + .option('-vh, --versions-history', 'only generates the versions-history policy', false) .option('-b --breaking', 'allow breaking change on the CI', false) - .action(async ({ verbose, releaseType, dryRun, slaOnly, breaking }) => { + .action(async ({ verbose, releaseType, dryRun, versionsHistory, breaking }) => { setVerbose(Boolean(verbose)); - if (slaOnly) { - await generateSLA({}); + if (versionsHistory) { + await generateVersionsHistory({}); return; } diff --git a/scripts/release/__tests__/sla.test.ts b/scripts/release/__tests__/sla.test.ts deleted file mode 100644 index ee368b4f834..00000000000 --- a/scripts/release/__tests__/sla.test.ts +++ /dev/null @@ -1,231 +0,0 @@ -// @ts-nocheck this file is broken while the SLA is unclear -import { describe, expect, it } from 'vitest'; - -import { fullReleaseConfig, LANGUAGES } from '../../common.js'; -import { generateLanguageSLA } from '../sla.js'; - -describe('generateLanguageSLA', () => { - LANGUAGES.forEach((lang) => { - if (!('sla' in fullReleaseConfig)) { - fullReleaseConfig.sla = {}; - } - - // @ts-expect-error - fullReleaseConfig.sla[lang] = {}; - }); - - describe('no new releases', () => { - it('parses version of the same minor', () => { - generateLanguageSLA( - [ - '1.2.4 Thu Dec 28 15:48:25 2023 +0000', - '1.2.5 Tue Jan 2 14:17:11 2024 +0000', - '1.2.6 Tue Jan 2 15:26:06 2024 +0000', - '1.2.7 Thu Jan 4 15:09:11 2024 +0000', - ], - 'csharp', - { current: '1.2.7', next: null, releaseType: null }, - ); - - // @ts-expect-error - expect(fullReleaseConfig.sla.csharp).toEqual({ - '1.2.4': { - releaseDate: '2023-12-28', - supportEnd: '2024-01-02', - supportStatus: 'inactive', - }, - '1.2.5': { - releaseDate: '2024-01-02', - supportEnd: '2024-01-02', - supportStatus: 'inactive', - }, - '1.2.6': { - releaseDate: '2024-01-02', - supportEnd: '2024-01-04', - supportStatus: 'inactive', - }, - '1.2.7': { - releaseDate: '2024-01-04', - supportStatus: 'active', - }, - }); - }); - - it('parses version of different same minor', () => { - generateLanguageSLA( - [ - '1.1.4 Thu Dec 28 15:48:25 2023 +0000', - '1.2.5 Tue Jan 2 14:17:11 2024 +0000', - '1.3.6 Tue Jan 2 15:26:06 2024 +0000', - '1.4.7 Thu Jan 4 15:09:11 2024 +0000', - ], - 'javascript', - { current: '1.4.7', next: null, releaseType: null }, - ); - - // @ts-expect-error - expect(fullReleaseConfig.sla.javascript).toEqual({ - '1.1.4': { - releaseDate: '2023-12-28', - supportEnd: '2026-01-02', - supportStart: '2024-01-02', - supportStatus: 'maintenance', - }, - '1.2.5': { - releaseDate: '2024-01-02', - supportEnd: '2026-01-02', - supportStart: '2024-01-02', - supportStatus: 'maintenance', - }, - '1.3.6': { - releaseDate: '2024-01-02', - supportEnd: '2026-01-04', - supportStart: '2024-01-04', - supportStatus: 'maintenance', - }, - '1.4.7': { - releaseDate: '2024-01-04', - supportStatus: 'active', - }, - }); - }); - - it('ignores versions older than 2 years', () => { - generateLanguageSLA( - [ - 'v1.0.9 Thu Dec 28 15:48:25 2011 +0000', - 'v1.1.4 Thu Dec 28 15:48:25 2021 +0000', - 'v1.4.7 Tue Jan 2 14:17:11 2024 +0000', - ], - 'php', - { current: '1.4.7', next: null, releaseType: null }, - ); - - // @ts-expect-error - expect(fullReleaseConfig.sla.php).toEqual({ - '1.1.4': { - releaseDate: '2021-12-28', - supportEnd: '2026-01-02', - supportStart: '2024-01-02', - supportStatus: 'maintenance', - }, - '1.4.7': { - releaseDate: '2024-01-02', - supportStatus: 'active', - }, - }); - }); - - it('overrides the previously stored versions and sanitize v prefixed versions', () => { - // @ts-expect-error - fullReleaseConfig.sla.go = { '0.1.2': { releaseDate: '2014-01-04', supportStatus: 'active' } }; - - generateLanguageSLA(['v1.1.4 Thu Dec 28 15:48:25 2023 +0000', 'v1.4.7 Tue Jan 2 14:17:11 2024 +0000'], 'go', { - current: '1.4.7', - next: null, - releaseType: null, - }); - - // @ts-expect-error - expect(fullReleaseConfig.sla.go).toEqual({ - '1.1.4': { - releaseDate: '2023-12-28', - supportEnd: '2026-01-02', - supportStart: '2024-01-02', - supportStatus: 'maintenance', - }, - '1.4.7': { - releaseDate: '2024-01-02', - supportStatus: 'active', - }, - }); - }); - }); - - describe('new release', () => { - const start = new Date(); - const end = new Date(start); - end.setFullYear(start.getFullYear() + 2); - - it('same version as active version', () => { - generateLanguageSLA(['1.2.4 Thu Dec 28 15:48:25 2023 +0000'], 'dart', { - next: '1.2.4', - current: '1.2.4', - releaseType: 'minor', - }); - - // @ts-expect-error - expect(fullReleaseConfig.sla.dart).toEqual({ - '1.2.4': { - releaseDate: '2023-12-28', - supportStatus: 'active', - }, - }); - }); - - it('new major: sets the new release as active, sets the last tag as maintenance', () => { - generateLanguageSLA(['1.2.4 Thu Dec 28 15:48:25 2023 +0000'], 'dart', { - next: '2.0.0', - current: '1.2.4', - releaseType: 'major', - }); - - // @ts-expect-error - expect(fullReleaseConfig.sla.dart).toEqual({ - '1.2.4': { - releaseDate: '2023-12-28', - supportEnd: end.toISOString().split('T')[0], - supportStart: start.toISOString().split('T')[0], - supportStatus: 'maintenance', - }, - '2.0.0': { - releaseDate: start.toISOString().split('T')[0], - supportStatus: 'active', - }, - }); - }); - - it('new minor: sets the new release as active, sets the last tag as maintenance', () => { - generateLanguageSLA(['1.2.4 Thu Dec 28 15:48:25 2023 +0000'], 'kotlin', { - next: '1.3.0', - current: '1.2.4', - releaseType: 'minor', - }); - - // @ts-expect-error - expect(fullReleaseConfig.sla.kotlin).toEqual({ - '1.2.4': { - releaseDate: '2023-12-28', - supportEnd: end.toISOString().split('T')[0], - supportStart: start.toISOString().split('T')[0], - supportStatus: 'maintenance', - }, - '1.3.0': { - releaseDate: start.toISOString().split('T')[0], - supportStatus: 'active', - }, - }); - }); - - it('new patch: sets the new release as active, sets the last tag as inactive', () => { - generateLanguageSLA(['1.2.4 Thu Dec 28 15:48:25 2023 +0000'], 'swift', { - next: '1.2.5', - current: '1.2.4', - releaseType: 'patch', - }); - - // @ts-expect-error - expect(fullReleaseConfig.sla.swift).toEqual({ - '1.2.4': { - releaseDate: '2023-12-28', - supportEnd: start.toISOString().split('T')[0], - supportStatus: 'inactive', - }, - '1.2.5': { - releaseDate: start.toISOString().split('T')[0], - supportStatus: 'active', - }, - }); - }); - }); -}); diff --git a/scripts/release/__tests__/versionsHistory.test.ts b/scripts/release/__tests__/versionsHistory.test.ts new file mode 100644 index 00000000000..7365cff1f53 --- /dev/null +++ b/scripts/release/__tests__/versionsHistory.test.ts @@ -0,0 +1,135 @@ +// @ts-nocheck this file is broken while the VersionsHistory is unclear +import { describe, expect, it } from 'vitest'; + +import { generateLanguageVersionsHistory } from '../versionsHistory.js'; + +describe('generateLanguageVersionsHistory', () => { + describe('no new releases', () => { + it('parses version of the same minor', () => { + const versions = generateLanguageVersionsHistory( + [ + '1.2.4 Thu Dec 28 15:48:25 2023 +0000', + '1.2.5 Tue Jan 2 14:17:11 2024 +0000', + '1.2.6 Tue Jan 2 15:26:06 2024 +0000', + '1.2.7 Thu Jan 4 15:09:11 2024 +0000', + ], + 'csharp', + { current: '1.2.7', next: null, releaseType: null }, + ); + + expect(versions).toEqual({ + '1.2.4': { + releaseDate: '2023-12-28', + }, + '1.2.5': { + releaseDate: '2024-01-02', + }, + '1.2.6': { + releaseDate: '2024-01-02', + }, + '1.2.7': { + releaseDate: '2024-01-04', + }, + }); + }); + + it('parses version of different same minor', () => { + const versions = generateLanguageVersionsHistory( + [ + '1.1.4 Thu Dec 28 15:48:25 2023 +0000', + '1.2.5 Tue Jan 2 14:17:11 2024 +0000', + '1.3.6 Tue Jan 2 15:26:06 2024 +0000', + '1.4.7 Thu Jan 4 15:09:11 2024 +0000', + ], + 'javascript', + { current: '1.4.7', next: null, releaseType: null }, + ); + + expect(versions).toEqual({ + '1.1.4': { + releaseDate: '2023-12-28', + }, + '1.2.5': { + releaseDate: '2024-01-02', + }, + '1.3.6': { + releaseDate: '2024-01-02', + }, + '1.4.7': { + releaseDate: '2024-01-04', + }, + }); + }); + }); + + describe('new release', () => { + const start = new Date(); + const end = new Date(start); + end.setFullYear(start.getFullYear() + 2); + + it('same version as active version', () => { + const versions = generateLanguageVersionsHistory(['1.2.4 Thu Dec 28 15:48:25 2023 +0000'], 'dart', { + next: '1.2.4', + current: '1.2.4', + releaseType: 'minor', + }); + + expect(versions).toEqual({ + '1.2.4': { + releaseDate: '2023-12-28', + }, + }); + }); + + it('new major: sets the new release as active, sets the last tag as maintenance', () => { + const versions = generateLanguageVersionsHistory(['1.2.4 Thu Dec 28 15:48:25 2023 +0000'], 'dart', { + next: '2.0.0', + current: '1.2.4', + releaseType: 'major', + }); + + expect(versions).toEqual({ + '1.2.4': { + releaseDate: '2023-12-28', + }, + '2.0.0': { + releaseDate: start.toISOString().split('T')[0], + }, + }); + }); + + it('new minor: sets the new release as active, sets the last tag as maintenance', () => { + const versions = generateLanguageVersionsHistory(['1.2.4 Thu Dec 28 15:48:25 2023 +0000'], 'kotlin', { + next: '1.3.0', + current: '1.2.4', + releaseType: 'minor', + }); + + expect(versions).toEqual({ + '1.2.4': { + releaseDate: '2023-12-28', + }, + '1.3.0': { + releaseDate: start.toISOString().split('T')[0], + }, + }); + }); + + it('new patch: sets the new release as active, sets the last tag as inactive', () => { + const versions = generateLanguageVersionsHistory(['1.2.4 Thu Dec 28 15:48:25 2023 +0000'], 'swift', { + next: '1.2.5', + current: '1.2.4', + releaseType: 'patch', + }); + + expect(versions).toEqual({ + '1.2.4': { + releaseDate: '2023-12-28', + }, + '1.2.5': { + releaseDate: start.toISOString().split('T')[0], + }, + }); + }); + }); +}); diff --git a/scripts/release/createReleasePR.ts b/scripts/release/createReleasePR.ts index e930c569b68..ca6cba29928 100755 --- a/scripts/release/createReleasePR.ts +++ b/scripts/release/createReleasePR.ts @@ -26,10 +26,10 @@ import { getPackageVersionDefault } from '../config.js'; import type { Language } from '../types.js'; import { getFileChanges, getLastReleasedTag } from './common.js'; -import { generateSLA } from './sla.js'; import TEXT from './text.js'; import type { Versions, ParsedCommit, Commit, Changelog, Scope, CommitType } from './types.js'; import { updateAPIVersions } from './updateAPIVersions.js'; +import { generateVersionsHistory } from './versionsHistory.js'; dotenv.config({ path: path.resolve(ROOT_DIR, '.env') }); @@ -343,10 +343,7 @@ export async function createReleasePR({ const versions = decideReleaseStrategy({ commits: validCommits, releaseType }); - // skip anything sla related for now - if (process.env.SLA) { - await generateSLA(versions); - } + await generateVersionsHistory(versions); const versionChanges = getVersionChangesText(versions); const languages = Object.keys(versions).join(', '); diff --git a/scripts/release/sla.ts b/scripts/release/sla.ts deleted file mode 100644 index 41ca61799e2..00000000000 --- a/scripts/release/sla.ts +++ /dev/null @@ -1,183 +0,0 @@ -/* eslint-disable no-console */ -// @ts-nocheck this file is broken while the SLA is unclear -import fsp from 'fs/promises'; - -import semver from 'semver'; - -import { cloneRepository } from '../ci/utils.js'; -import { ensureGitHubToken, fullReleaseConfig, LANGUAGES, run, toAbsolutePath } from '../common.js'; -import type { Language } from '../types.js'; - -import { preReleaseRegExp } from './createReleasePR.js'; -import type { Version, Versions } from './types.js'; - -function getMajorMinor(lang: Language, version: string): { major: number; minor: number } { - const matches = version.match(/(\d+)\.(\d+)/); - - if (!matches || matches.length < 3) { - console.warn(`unable to parse version '${version}' for language '${lang}'`); - - return { major: 0, minor: 0 }; - } - - return { major: parseInt(matches[1], 10), minor: parseInt(matches[2], 10) }; -} - -export function isPreRelease(version: string): boolean { - return ( - version.match(preReleaseRegExp) !== null || - semver.prerelease(version) !== null || - version.includes('beta') || - version.includes('alpha') || - version.startsWith('0') || - isNaN(parseInt(version.charAt(0), 10)) - ); -} - -function setInactive(lang: Language, version: string, supportEnd: Date): void { - fullReleaseConfig.sla[lang][version].supportEnd = supportEnd.toISOString().split('T')[0]; - fullReleaseConfig.sla[lang][version].supportStatus = 'inactive'; -} - -function setMaintenance(lang: Language, version: string, supportStart: Date, supportEnd: Date): void { - fullReleaseConfig.sla[lang][version] = { - ...fullReleaseConfig.sla[lang][version], - supportStart: supportStart.toISOString().split('T')[0], - supportEnd: supportEnd.toISOString().split('T')[0], - supportStatus: 'maintenance', - }; -} - -// fetches the git tags on the given `lang` repository, throws if none. -async function getTags(lang: Language): Promise { - const githubToken = ensureGitHubToken(); - - // fetch all release tags for this lang - const { tempGitDir } = await cloneRepository({ - lang, - githubToken, - tempDir: process.env.RUNNER_TEMP! || toAbsolutePath('foo/local/test'), - }); - await run('git fetch --all --tags', { cwd: tempGitDir }); - - const tags = ( - await run("git for-each-ref --sort=creatordate --format '%(refname:short) %(creatordate)' refs/tags", { - cwd: tempGitDir, - }) - ).split('\n'); - - if (tags.length === 0) { - throw new Error(`unable to find tags for language ${lang}`); - } - - return tags; -} - -/* - * udpates the release.config.json file for the given `lang` by generating an SLA policy map of every versions in a now-2years window. - * the given `version` to release is added to the map once existing tags are computed. - * any pre-release and non-semver tags are excluded - */ -export function generateLanguageSLA(tags: string[], lang: Language, version: Version): void { - const start = new Date(); - const old = new Date(start); - old.setFullYear(start.getFullYear() - 2); - const end = new Date(start); - end.setFullYear(start.getFullYear() + 2); - - // @ts-expect-error -- force reset our sla policy to remove outdated ones - fullReleaseConfig.sla[lang] = {}; - - let prevTagRelease = start; - let prevTagMajor = 0; - let prevTagMinor = 0; - let prevTagVersion = ''; - - for (const tag of tags) { - // eslint-disable-next-line prefer-const - let [tagVersion, tagReleaseDate] = tag.split(/(?<=^\S+)\s/); - - // edge case for go which tags version with a v prefix - if (tagVersion.startsWith('v')) { - tagVersion = tagVersion.replace(/^v/, ''); - } - - // we skip any form of pre-releases because they are not part of the SLA - if (isPreRelease(tagVersion)) { - continue; - } - - const { major: tagMajor, minor: tagMinor } = getMajorMinor(lang, tagVersion); - - if (tagMajor === 0 && tagMinor === 0) { - continue; - } - - const releaseDate = new Date(tagReleaseDate); - const deadline = new Date(releaseDate); - deadline.setFullYear(releaseDate.getFullYear() + 2); - - // the current tag version defines the maintenance policy of the previous one - if (prevTagVersion !== '') { - // if the previous tag is on the same major.minor version, we don't support it - if (tagMajor === prevTagMajor && tagMinor === prevTagMinor) { - setInactive(lang, prevTagVersion, releaseDate); - - if (prevTagRelease.getTime() < old.getTime()) { - delete fullReleaseConfig.sla[lang][prevTagVersion]; - } - } else { - setMaintenance(lang, prevTagVersion, releaseDate, deadline); - - if (start.getTime() > deadline.getTime()) { - delete fullReleaseConfig.sla[lang][prevTagVersion]; - } - } - } - - fullReleaseConfig.sla[lang][tagVersion] = { - releaseDate: releaseDate.toISOString().split('T')[0], - }; - - prevTagRelease = releaseDate; - prevTagMajor = tagMajor; - prevTagMinor = tagMinor; - prevTagVersion = tagVersion; - } - - // if there's no release planned, or if the release is a pre-release, then the latest tagged version is the active one - if (!version?.next || isPreRelease(version?.next) || version?.next === prevTagVersion) { - fullReleaseConfig.sla[lang][prevTagVersion].supportStatus = 'active'; - - return; - } - - const { major: nextMajor, minor: nextMinor } = getMajorMinor(lang, version.next); - - // if we release a new patch on the same major.minor version as the active one, we set it as inactive - if (nextMajor === prevTagMajor && nextMinor === prevTagMinor) { - setInactive(lang, prevTagVersion, start); - } else { - setMaintenance(lang, prevTagVersion, start, end); - } - - // if it's a new major or minor, it's just a new active version, the previous one is already in maintenance - fullReleaseConfig.sla[lang][version.next] = { - releaseDate: start.toISOString().split('T')[0], - supportStatus: 'active', - }; -} - -export async function generateSLA(versions: Versions): Promise { - await Promise.all( - LANGUAGES.map(async (lang) => { - console.log(`> generating SLA for the ${lang} client`); - - const tags = await getTags(lang); - - return generateLanguageSLA(tags, lang, versions[lang]); - }), - ); - - await fsp.writeFile(toAbsolutePath('config/release.config.json'), JSON.stringify(fullReleaseConfig, null, 2)); -} diff --git a/scripts/release/versionsHistory.ts b/scripts/release/versionsHistory.ts new file mode 100644 index 00000000000..ba9bf6ab91f --- /dev/null +++ b/scripts/release/versionsHistory.ts @@ -0,0 +1,108 @@ +/* eslint-disable no-console */ +// @ts-nocheck this file is broken while the VersionsHistory is unclear +import fsp from 'fs/promises'; + +import semver from 'semver'; + +import { cloneRepository } from '../ci/utils.js'; +import { ensureGitHubToken, LANGUAGES, run, toAbsolutePath } from '../common.js'; +import type { Language } from '../types.js'; + +import { preReleaseRegExp } from './createReleasePR.js'; +import type { Version, Versions } from './types.js'; + +export function isPreRelease(version: string): boolean { + return ( + version.match(preReleaseRegExp) !== null || + semver.prerelease(version) !== null || + version.includes('beta') || + version.includes('alpha') || + version.startsWith('0') || + isNaN(parseInt(version.charAt(0), 10)) + ); +} + +// fetches the git tags on the given `lang` repository, throws if none. +async function getTags(lang: Language): Promise { + const githubToken = ensureGitHubToken(); + + // fetch all release tags for this lang + const { tempGitDir } = await cloneRepository({ + lang, + githubToken, + tempDir: process.env.RUNNER_TEMP! || toAbsolutePath('foo/local/test'), + }); + await run('git fetch --all --tags', { cwd: tempGitDir }); + + const tags = ( + await run("git for-each-ref --sort=creatordate --format '%(refname:short) %(creatordate)' refs/tags", { + cwd: tempGitDir, + }) + ).split('\n'); + + if (tags.length === 0) { + throw new Error(`unable to find tags for language ${lang}`); + } + + return tags; +} + +/* + * udpates the release.config.json file for the given `lang` by generating an VersionsHistory policy map of every versions in a now-2years window. + * the given `version` to release is added to the map once existing tags are computed. + * any pre-release and non-semver tags are excluded + */ +export function generateLanguageVersionsHistory( + tags: string[], + lang: Language, + version: Version, +): Record { + const versions: Record = {}; + + let prevTagVersion = ''; + + for (const tag of tags) { + // eslint-disable-next-line prefer-const + let [tagVersion, tagReleaseDate] = tag.split(/(?<=^\S+)\s/); + + // edge case for go which tags version with a v prefix + if (tagVersion.startsWith('v')) { + tagVersion = tagVersion.replace(/^v/, ''); + } + + // we skip any form of pre-releases because they are not part of the VersionsHistory + if (isPreRelease(tagVersion)) { + continue; + } + + versions[tagVersion] = { + releaseDate: new Date(tagReleaseDate).toISOString().split('T')[0], + }; + + prevTagVersion = tagVersion; + } + + // if there's no release planned, just skip this language + if (version?.next && !isPreRelease(version?.next) && version?.next !== prevTagVersion) { + versions[version.next] = { + releaseDate: new Date().toISOString().split('T')[0], + }; + } + + return versions; +} + +export async function generateVersionsHistory(versions: Versions): Promise { + const versionsHistory = {}; + await Promise.all( + LANGUAGES.map(async (lang) => { + console.log(`> generating VersionsHistory for the ${lang} client`); + + const tags = await getTags(lang); + + versionsHistory[lang] = generateLanguageVersionsHistory(tags, lang, versions[lang]); + }), + ); + + await fsp.writeFile(toAbsolutePath('config/versions.history.json'), JSON.stringify(versionsHistory, null, 2)); +}