endoflife-date / release-data

Common Release Data for various projects in a consumable format, automatically updated.
MIT License
100 stars 36 forks source link

[chef-infra-server] add automation #316

Closed nperez60 closed 4 months ago

nperez60 commented 4 months ago
import requests
from bs4 import BeautifulSoup
import json

def get_release_date(version):
    url = f"https://github.com/chef/chef-server/releases/tag/{version}"
    response = requests.get(url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        date_element = soup.find("relative-time", class_="no-wrap")
        if date_element:
            return date_element["datetime"][:10]
    return "N/A"

url = "https://docs.chef.io/release_notes_server/"
response = requests.get(url)

if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    h2_elements = soup.find_all('h2', text=lambda text: "Chef Infra Server" in text)

    releases = {}
    for h2_element in h2_elements:
        version_id = h2_element.get('id')
        release_date = get_release_date(version_id)
        releases[version_id] = release_date

    print(json.dumps(releases, indent=4, sort_keys=True))
else:
    print(f"Failed to fetch data from the website. Status code: {response.status_code}")

give output like

}
    "15.4.0": "2023-01-05",
    "15.5.1": "2023-02-08",
    "15.6.1": "2023-03-02",
    "15.6.2": "2023-03-16",
    "15.7.0": "2023-06-12",
    "15.8.0": "2023-09-29",
    "15.9.12": "2023-11-27",
    "15.9.20": "2024-01-10"
}

The script parse : https://github.com/chef/chef-server/releases/tag/{version}" to get the release date for each release found here https://docs.chef.io/release_notes_server/

When date is not found on github, display N/A, IDK if this can cause bug to the automation in place on this repo

Linked to endoflife-date/endoflife.date#4425

marcwrobel commented 4 months ago

When date is not found on github, display N/A, IDK if this can cause bug to the automation in place on this repo

Yes, this is problematic as it will prevent the endoflife.date site to be built. Those versions must be excluded, and hopefully those are old ones.

marcwrobel commented 4 months ago

I reworked your script to make it faster. We have a lot of scripts running, so the faster the better.

The script now checkout the repository and get the date from it instead of using https://github.com/chef/chef-server/tags. With this change it now takes ~5s instead of ~45s.

I also used our infrastructure code to write the result to the correct format in the right directory.

marcwrobel commented 4 months ago

Expected result:

{
  "releases": {},
  "versions": {
    "15.9.20": {
      "name": "15.9.20",
      "date": "2024-01-10"
    },
    "15.9.12": {
      "name": "15.9.12",
      "date": "2023-11-27"
    },
    "15.8.0": {
      "name": "15.8.0",
      "date": "2023-09-29"
    },
    "15.7.0": {
      "name": "15.7.0",
      "date": "2023-06-12"
    },
    "15.6.2": {
      "name": "15.6.2",
      "date": "2023-03-16"
    },
    "15.6.1": {
      "name": "15.6.1",
      "date": "2023-03-02"
    },
    "15.5.1": {
      "name": "15.5.1",
      "date": "2023-02-08"
    },
    "15.4.0": {
      "name": "15.4.0",
      "date": "2023-01-05"
    },
    "15.3.2": {
      "name": "15.3.2",
      "date": "2022-11-08"
    },
    "15.1.7": {
      "name": "15.1.7",
      "date": "2022-08-24"
    },
    "15.0.9": {
      "name": "15.0.9",
      "date": "2022-06-23"
    },
    "14.16.19": {
      "name": "14.16.19",
      "date": "2022-06-07"
    },
    "14.15.10": {
      "name": "14.15.10",
      "date": "2022-05-10"
    },
    "14.15.9": {
      "name": "14.15.9",
      "date": "2022-05-04"
    },
    "14.14.1": {
      "name": "14.14.1",
      "date": "2022-04-05"
    },
    "14.13.42": {
      "name": "14.13.42",
      "date": "2022-02-28"
    },
    "14.12.21": {
      "name": "14.12.21",
      "date": "2022-01-27"
    },
    "14.11.36": {
      "name": "14.11.36",
      "date": "2021-12-27"
    },
    "14.11.31": {
      "name": "14.11.31",
      "date": "2021-12-21"
    },
    "14.11.21": {
      "name": "14.11.21",
      "date": "2021-12-13"
    },
    "14.11.15": {
      "name": "14.11.15",
      "date": "2021-12-06"
    },
    "14.10.23": {
      "name": "14.10.23",
      "date": "2021-10-21"
    },
    "14.9.23": {
      "name": "14.9.23",
      "date": "2021-09-09"
    },
    "14.8.7": {
      "name": "14.8.7",
      "date": "2021-08-10"
    },
    "14.7.13": {
      "name": "14.7.13",
      "date": "2021-07-27"
    },
    "14.6.32": {
      "name": "14.6.32",
      "date": "2021-07-15"
    },
    "14.5.29": {
      "name": "14.5.29",
      "date": "2021-06-23"
    },
    "14.4.4": {
      "name": "14.4.4",
      "date": "2021-05-19"
    },
    "14.3.14": {
      "name": "14.3.14",
      "date": "2021-04-22"
    },
    "14.2.2": {
      "name": "14.2.2",
      "date": "2021-03-16"
    },
    "14.1.0": {
      "name": "14.1.0",
      "date": "2021-02-25"
    },
    "14.0.65": {
      "name": "14.0.65",
      "date": "2020-10-20"
    },
    "14.0.58": {
      "name": "14.0.58",
      "date": "2020-09-30"
    },
    "13.2.0": {
      "name": "13.2.0",
      "date": "2020-04-10"
    },
    "13.1.13": {
      "name": "13.1.13",
      "date": "2019-11-25"
    },
    "13.0.17": {
      "name": "13.0.17",
      "date": "2019-07-01"
    },
    "13.0.16": {
      "name": "13.0.16",
      "date": "2019-06-27"
    },
    "12.19.31": {
      "name": "12.19.31",
      "date": "2019-03-07"
    },
    "12.19.26": {
      "name": "12.19.26",
      "date": "2019-01-30"
    },
    "12.18.14": {
      "name": "12.18.14",
      "date": "2018-10-12"
    },
    "12.17.33": {
      "name": "12.17.33",
      "date": "2018-02-13"
    },
    "12.17.15": {
      "name": "12.17.15",
      "date": "2017-12-18"
    },
    "12.17.5": {
      "name": "12.17.5",
      "date": "2017-10-24"
    },
    "12.17.3": {
      "name": "12.17.3",
      "date": "2017-10-19"
    },
    "12.16.14": {
      "name": "12.16.14",
      "date": "2017-09-18"
    },
    "12.16.9": {
      "name": "12.16.9",
      "date": "2017-08-22"
    },
    "12.16.2": {
      "name": "12.16.2",
      "date": "2017-08-15"
    },
    "12.15.8": {
      "name": "12.15.8",
      "date": "2017-06-20"
    },
    "12.15.7": {
      "name": "12.15.7",
      "date": "2017-05-17"
    },
    "12.15.6": {
      "name": "12.15.6",
      "date": "2017-05-05"
    },
    "12.15.5": {
      "name": "12.15.5",
      "date": "2017-05-04"
    },
    "12.15.3": {
      "name": "12.15.3",
      "date": "2017-05-03"
    },
    "12.15.0": {
      "name": "12.15.0",
      "date": "2017-04-28"
    },
    "12.14.0": {
      "name": "12.14.0",
      "date": "2017-03-30"
    },
    "12.13.0": {
      "name": "12.13.0",
      "date": "2017-02-21"
    },
    "12.12.0": {
      "name": "12.12.0",
      "date": "2017-01-27"
    },
    "12.11.1": {
      "name": "12.11.1",
      "date": "2016-11-17"
    },
    "12.11.0": {
      "name": "12.11.0",
      "date": "2016-11-14"
    },
    "12.10.0": {
      "name": "12.10.0",
      "date": "2016-10-31"
    },
    "12.9.1": {
      "name": "12.9.1",
      "date": "2016-09-26"
    },
    "12.9.0": {
      "name": "12.9.0",
      "date": "2016-09-22"
    },
    "12.8.0": {
      "name": "12.8.0",
      "date": "2016-07-06"
    },
    "12.7.0": {
      "name": "12.7.0",
      "date": "2016-06-20"
    },
    "12.6.0": {
      "name": "12.6.0",
      "date": "2016-04-29"
    },
    "12.5.0": {
      "name": "12.5.0",
      "date": "2016-03-22"
    },
    "12.4.1": {
      "name": "12.4.1",
      "date": "2016-02-03"
    },
    "12.4.0": {
      "name": "12.4.0",
      "date": "2016-01-27"
    },
    "12.3.1": {
      "name": "12.3.1",
      "date": "2015-11-20"
    },
    "12.3.0": {
      "name": "12.3.0",
      "date": "2015-11-12"
    },
    "12.2.0": {
      "name": "12.2.0",
      "date": "2015-09-02"
    },
    "12.1.2": {
      "name": "12.1.2",
      "date": "2015-07-16"
    },
    "12.1.1": {
      "name": "12.1.1",
      "date": "2015-07-13"
    },
    "12.1.0": {
      "name": "12.1.0",
      "date": "2015-06-18"
    },
    "12.0.8": {
      "name": "12.0.8",
      "date": "2015-04-20"
    },
    "12.0.7": {
      "name": "12.0.7",
      "date": "2015-03-26"
    },
    "12.0.6": {
      "name": "12.0.6",
      "date": "2015-03-19"
    },
    "12.0.5": {
      "name": "12.0.5",
      "date": "2015-02-25"
    },
    "12.0.4": {
      "name": "12.0.4",
      "date": "2015-02-18"
    },
    "12.0.3": {
      "name": "12.0.3",
      "date": "2015-02-04"
    },
    "12.0.2": {
      "name": "12.0.2",
      "date": "2015-01-27"
    },
    "12.0.1": {
      "name": "12.0.1",
      "date": "2014-12-17"
    },
    "12.0.0": {
      "name": "12.0.0",
      "date": "2014-11-25"
    },
    "11.1.7": {
      "name": "11.1.7",
      "date": "2014-06-19"
    },
    "11.1.6": {
      "name": "11.1.6",
      "date": "2014-06-05"
    },
    "11.1.5": {
      "name": "11.1.5",
      "date": "2014-05-15"
    },
    "11.1.4": {
      "name": "11.1.4",
      "date": "2014-05-06"
    },
    "11.1.3": {
      "name": "11.1.3",
      "date": "2014-04-08"
    },
    "11.1.1": {
      "name": "11.1.1",
      "date": "2014-02-17"
    },
    "11.1.0": {
      "name": "11.1.0",
      "date": "2014-02-09"
    }
  }
}
marcwrobel commented 4 months ago

LGTM, merging ahead of https://github.com/endoflife-date/endoflife.date/pull/4425.