[samsung-security] Generify samsung-mobile method (#439)

- Make section and inclusions/exclusions configurable,
- Remove Galaxy Tabs from samsung-mobile data (following https://github.com/endoflife-date/endoflife.date/pull/7513),
- Initialize Galaxy Tabs dataset (following https://github.com/endoflife-date/endoflife.date/pull/7513).
This commit is contained in:
Marc Wrobel
2025-05-19 15:58:58 +02:00
parent 89df7b98f6
commit c2a22dd150
5 changed files with 388 additions and 409 deletions

View File

@@ -0,0 +1,305 @@
{
"releases": {
"galaxy-tab-s9-ultra": {
"name": "galaxy-tab-s9-ultra",
"eol": "2028-08-11"
},
"galaxy-tab-s9-fe+": {
"name": "galaxy-tab-s9-fe+",
"eol": "2028-10-04"
},
"galaxy-tab-s9-fe": {
"name": "galaxy-tab-s9-fe",
"eol": "2028-10-04"
},
"galaxy-tab-s9+": {
"name": "galaxy-tab-s9+",
"eol": "2028-08-11"
},
"galaxy-tab-s9": {
"name": "galaxy-tab-s9",
"eol": "2028-08-11"
},
"galaxy-tab-s8-ultra": {
"name": "galaxy-tab-s8-ultra",
"eol": "2027-04-30"
},
"galaxy-tab-s8+": {
"name": "galaxy-tab-s8+",
"eol": "2027-04-14"
},
"galaxy-tab-s8": {
"name": "galaxy-tab-s8",
"eol": "2027-03-22"
},
"galaxy-tab-s7-fe": {
"name": "galaxy-tab-s7-fe",
"eol": false
},
"galaxy-tab-s7+": {
"name": "galaxy-tab-s7+",
"eol": "2024-08-05"
},
"galaxy-tab-s7": {
"name": "galaxy-tab-s7",
"eol": "2024-08-05"
},
"galaxy-tab-s6-lite-2024": {
"name": "galaxy-tab-s6-lite-2024",
"eol": false
},
"galaxy-tab-s6-lite-2020": {
"name": "galaxy-tab-s6-lite-2020",
"eol": "2024-03-26"
},
"galaxy-tab-s6-lite": {
"name": "galaxy-tab-s6-lite",
"eol": false
},
"galaxy-tab-s6-5g": {
"name": "galaxy-tab-s6-5g",
"eol": "2024-01-30"
},
"galaxy-tab-s6": {
"name": "galaxy-tab-s6",
"eol": "2023-07-31"
},
"galaxy-tab-s5e": {
"name": "galaxy-tab-s5e",
"eol": "2023-04-01"
},
"galaxy-tab-s4-10.5": {
"name": "galaxy-tab-s4-10.5",
"eol": true
},
"galaxy-tab-s3-9.7": {
"name": "galaxy-tab-s3-9.7",
"eol": true
},
"galaxy-tab-s2-9.7": {
"name": "galaxy-tab-s2-9.7",
"eol": true
},
"galaxy-tab-s2-8.0": {
"name": "galaxy-tab-s2-8.0",
"eol": true
},
"galaxy-tab-s10-ultra": {
"name": "galaxy-tab-s10-ultra",
"eol": "2031-10-03"
},
"galaxy-tab-s10-fe+": {
"name": "galaxy-tab-s10-fe+",
"eol": "2032-04-03"
},
"galaxy-tab-s10-fe": {
"name": "galaxy-tab-s10-fe",
"eol": "2032-04-03"
},
"galaxy-tab-s10+": {
"name": "galaxy-tab-s10+",
"eol": "2031-10-03"
},
"galaxy-tab-s-8.4-lte": {
"name": "galaxy-tab-s-8.4-lte",
"eol": true
},
"galaxy-tab-s-8.4": {
"name": "galaxy-tab-s-8.4",
"eol": true
},
"galaxy-tab-s-10.5-lte": {
"name": "galaxy-tab-s-10.5-lte",
"eol": true
},
"galaxy-tab-s-10.5": {
"name": "galaxy-tab-s-10.5",
"eol": true
},
"galaxy-tab-pro-12.2-lte": {
"name": "galaxy-tab-pro-12.2-lte",
"eol": true
},
"galaxy-tab-pro-12.2-3g": {
"name": "galaxy-tab-pro-12.2-3g",
"eol": true
},
"galaxy-tab-pro-12.2": {
"name": "galaxy-tab-pro-12.2",
"eol": true
},
"galaxy-tab-j": {
"name": "galaxy-tab-j",
"eol": true
},
"galaxy-tab-e-9.6": {
"name": "galaxy-tab-e-9.6",
"eol": true
},
"galaxy-tab-e-8.0": {
"name": "galaxy-tab-e-8.0",
"eol": true
},
"galaxy-tab-advanced2": {
"name": "galaxy-tab-advanced2",
"eol": true
},
"galaxy-tab-active5": {
"name": "galaxy-tab-active5",
"eol": "2029-01-23"
},
"galaxy-tab-active4-pro": {
"name": "galaxy-tab-active4-pro",
"eol": "2027-08-31"
},
"galaxy-tab-active3": {
"name": "galaxy-tab-active3",
"eol": "2024-09-28"
},
"galaxy-tab-active2": {
"name": "galaxy-tab-active2",
"eol": true
},
"galaxy-tab-active-pro": {
"name": "galaxy-tab-active-pro",
"eol": "2023-10-01"
},
"galaxy-tab-active-lte": {
"name": "galaxy-tab-active-lte",
"eol": true
},
"galaxy-tab-active": {
"name": "galaxy-tab-active",
"eol": true
},
"galaxy-tab-a9+": {
"name": "galaxy-tab-a9+",
"eol": "2027-10-23"
},
"galaxy-tab-a9": {
"name": "galaxy-tab-a9",
"eol": "2027-10-23"
},
"galaxy-tab-a8": {
"name": "galaxy-tab-a8",
"eol": false
},
"galaxy-tab-a7-lite": {
"name": "galaxy-tab-a7-lite",
"eol": false
},
"galaxy-tab-a7-10.4-2022": {
"name": "galaxy-tab-a7-10.4-2022",
"eol": false
},
"galaxy-tab-a7-10.4-2020": {
"name": "galaxy-tab-a7-10.4-2020",
"eol": "2024-08-10"
},
"galaxy-tab-a-9.7-and-s-pen": {
"name": "galaxy-tab-a-9.7-and-s-pen",
"eol": true
},
"galaxy-tab-a-9.7": {
"name": "galaxy-tab-a-9.7",
"eol": true
},
"galaxy-tab-a-8.4-2020": {
"name": "galaxy-tab-a-8.4-2020",
"eol": "2024-03-25"
},
"galaxy-tab-a-8.0-with-s-pen-2019": {
"name": "galaxy-tab-a-8.0-with-s-pen-2019",
"eol": "2023-04-01"
},
"galaxy-tab-a-8.0-and-s-pen-2015": {
"name": "galaxy-tab-a-8.0-and-s-pen-2015",
"eol": true
},
"galaxy-tab-a-8.0-2019": {
"name": "galaxy-tab-a-8.0-2019",
"eol": "2023-07-01"
},
"galaxy-tab-a-8.0-2018": {
"name": "galaxy-tab-a-8.0-2018",
"eol": true
},
"galaxy-tab-a-8.0-2017": {
"name": "galaxy-tab-a-8.0-2017",
"eol": true
},
"galaxy-tab-a-8.0-2015": {
"name": "galaxy-tab-a-8.0-2015",
"eol": true
},
"galaxy-tab-a-7.0-2016": {
"name": "galaxy-tab-a-7.0-2016",
"eol": true
},
"galaxy-tab-a-10.5-2018": {
"name": "galaxy-tab-a-10.5-2018",
"eol": true
},
"galaxy-tab-a-10.1-2019": {
"name": "galaxy-tab-a-10.1-2019",
"eol": true
},
"galaxy-tab-a-10.1-2016": {
"name": "galaxy-tab-a-10.1-2016",
"eol": true
},
"galaxy-tab-4-8.0-lte": {
"name": "galaxy-tab-4-8.0-lte",
"eol": true
},
"galaxy-tab-4-8.0-3g": {
"name": "galaxy-tab-4-8.0-3g",
"eol": true
},
"galaxy-tab-4-8.0": {
"name": "galaxy-tab-4-8.0",
"eol": true
},
"galaxy-tab-4-7.0-lte": {
"name": "galaxy-tab-4-7.0-lte",
"eol": true
},
"galaxy-tab-4-7.0-3g": {
"name": "galaxy-tab-4-7.0-3g",
"eol": true
},
"galaxy-tab-4-7.0": {
"name": "galaxy-tab-4-7.0",
"eol": true
},
"galaxy-tab-4-10.1-lte": {
"name": "galaxy-tab-4-10.1-lte",
"eol": true
},
"galaxy-tab-4-10.1-3g": {
"name": "galaxy-tab-4-10.1-3g",
"eol": true
},
"galaxy-tab-4-10.1": {
"name": "galaxy-tab-4-10.1",
"eol": true
},
"galaxy-tab-3-v": {
"name": "galaxy-tab-3-v",
"eol": true
},
"galaxy-tab-3-lite-7.0-ve": {
"name": "galaxy-tab-3-lite-7.0-ve",
"eol": true
},
"galaxy-tab-3-lite-7.0-3g": {
"name": "galaxy-tab-3-lite-7.0-3g",
"eol": true
},
"galaxy-tab-3-lite-7.0": {
"name": "galaxy-tab-3-lite-7.0",
"eol": true
}
},
"versions": {}
}

View File

@@ -247,328 +247,6 @@
"name": "galaxy-v",
"eol": true
},
"galaxy-tab-s9-ultra": {
"name": "galaxy-tab-s9-ultra",
"eol": "2028-10-16",
"releaseLabel": "Galaxy Tab S9 Ultra"
},
"galaxy-tab-s9-fe+": {
"name": "galaxy-tab-s9-fe+",
"eol": "2028-10-16",
"releaseLabel": "Galaxy Tab S9 FE+"
},
"galaxy-tab-s9-fe": {
"name": "galaxy-tab-s9-fe",
"eol": false,
"releaseLabel": "Galaxy Tab S9 FE"
},
"galaxy-tab-s9+": {
"name": "galaxy-tab-s9+",
"eol": "2028-10-16",
"releaseLabel": "Galaxy Tab S9+"
},
"galaxy-tab-s9": {
"name": "galaxy-tab-s9",
"eol": "2028-10-16",
"releaseLabel": "Galaxy Tab S9"
},
"galaxy-tab-s8-ultra": {
"name": "galaxy-tab-s8-ultra",
"eol": "2027-04-30",
"releaseLabel": "Galaxy Tab S8 Ultra"
},
"galaxy-tab-s8+": {
"name": "galaxy-tab-s8+",
"eol": "2027-04-14",
"releaseLabel": "Galaxy Tab S8+"
},
"galaxy-tab-s8": {
"name": "galaxy-tab-s8",
"eol": "2027-03-22",
"releaseLabel": "Galaxy Tab S8"
},
"galaxy-tab-s7-fe": {
"name": "galaxy-tab-s7-fe",
"eol": false,
"releaseLabel": "Galaxy Tab S7 FE"
},
"galaxy-tab-s7+": {
"name": "galaxy-tab-s7+",
"eol": "2024-08-05"
},
"galaxy-tab-s7": {
"name": "galaxy-tab-s7",
"eol": "2024-08-21"
},
"galaxy-tab-s6-lite-2024": {
"name": "galaxy-tab-s6-lite-2024",
"releaseLabel": "Galaxy Tab S6 Lite (2024)",
"eol": false
},
"galaxy-tab-s6-lite-2020": {
"name": "galaxy-tab-s6-lite-2020",
"eol": true
},
"galaxy-tab-s6-lite": {
"name": "galaxy-tab-s6-lite",
"eol": false,
"releaseLabel": "Galaxy Tab S6 Lite"
},
"galaxy-tab-s6-5g": {
"name": "galaxy-tab-s6-5g",
"eol": true
},
"galaxy-tab-s6": {
"name": "galaxy-tab-s6",
"eol": true
},
"galaxy-tab-s5e": {
"name": "galaxy-tab-s5e",
"eol": true
},
"galaxy-tab-s4-10.5": {
"name": "galaxy-tab-s4-10.5",
"eol": "2022-06-01"
},
"galaxy-tab-s3-9.7": {
"name": "galaxy-tab-s3-9.7",
"eol": "2019-04-01"
},
"galaxy-tab-s2-9.7": {
"name": "galaxy-tab-s2-9.7",
"eol": "2019-07-01"
},
"galaxy-tab-s2-8.0": {
"name": "galaxy-tab-s2-8.0",
"eol": "2019-07-01"
},
"galaxy-tab-s10-ultra": {
"name": "galaxy-tab-s10-ultra",
"releaseLabel": "Galaxy Tab S10 Ultra",
"eol": false
},
"galaxy-tab-s10-fe+": {
"name": "galaxy-tab-s10-fe+",
"releaseLabel": "Galaxy Tab S10 FE+",
"eol": false
},
"galaxy-tab-s10-fe": {
"name": "galaxy-tab-s10-fe",
"releaseLabel": "Galaxy Tab S10 FE",
"eol": false
},
"galaxy-tab-s10+": {
"name": "galaxy-tab-s10+",
"releaseLabel": "Galaxy Tab S10+",
"eol": false
},
"galaxy-tab-s-8.4-lte": {
"name": "galaxy-tab-s-8.4-lte",
"eol": "2016-12-01"
},
"galaxy-tab-s-8.4": {
"name": "galaxy-tab-s-8.4",
"eol": "2017-08-01"
},
"galaxy-tab-s-10.5-lte": {
"name": "galaxy-tab-s-10.5-lte",
"eol": "2016-12-01"
},
"galaxy-tab-s-10.5": {
"name": "galaxy-tab-s-10.5",
"eol": "2017-08-01"
},
"galaxy-tab-pro-12.2-lte": {
"name": "galaxy-tab-pro-12.2-lte",
"eol": true
},
"galaxy-tab-pro-12.2-3g": {
"name": "galaxy-tab-pro-12.2-3g",
"eol": true
},
"galaxy-tab-pro-12.2": {
"name": "galaxy-tab-pro-12.2",
"eol": true
},
"galaxy-tab-j": {
"name": "galaxy-tab-j",
"eol": true
},
"galaxy-tab-e-9.6": {
"name": "galaxy-tab-e-9.6",
"eol": true
},
"galaxy-tab-e-8.0": {
"name": "galaxy-tab-e-8.0",
"eol": "2020-11-10"
},
"galaxy-tab-advanced2": {
"name": "galaxy-tab-advanced2",
"eol": true
},
"galaxy-tab-active5": {
"name": "galaxy-tab-active5",
"releaseLabel": "Galaxy Tab Active5",
"eol": false
},
"galaxy-tab-active4-pro": {
"name": "galaxy-tab-active4-pro",
"eol": false,
"releaseLabel": "Galaxy Tab Active4 Pro"
},
"galaxy-tab-active3": {
"name": "galaxy-tab-active3",
"eol": false,
"releaseLabel": "Galaxy Tab Active3"
},
"galaxy-tab-active2": {
"name": "galaxy-tab-active2",
"eol": "2021-11-17"
},
"galaxy-tab-active-pro": {
"name": "galaxy-tab-active-pro",
"eol": true
},
"galaxy-tab-active-lte": {
"name": "galaxy-tab-active-lte",
"eol": true
},
"galaxy-tab-active": {
"name": "galaxy-tab-active",
"eol": true
},
"galaxy-tab-a9+": {
"name": "galaxy-tab-a9+",
"releaseLabel": "Galaxy Tab A9+",
"eol": false
},
"galaxy-tab-a9": {
"name": "galaxy-tab-a9",
"releaseLabel": "Galaxy Tab A9",
"eol": false
},
"galaxy-tab-a8": {
"name": "galaxy-tab-a8",
"eol": "2026-01-17",
"releaseLabel": "Galaxy Tab A8"
},
"galaxy-tab-a7-lite": {
"name": "galaxy-tab-a7-lite",
"eol": "2025-05-27",
"releaseLabel": "Galaxy Tab A7 Lite"
},
"galaxy-tab-a7-10.4-2022": {
"name": "galaxy-tab-a7-10.4-2022",
"eol": "2026-11-21"
},
"galaxy-tab-a7-10.4-2020": {
"name": "galaxy-tab-a7-10.4-2020",
"eol": "2024-09-11"
},
"galaxy-tab-a-9.7-and-s-pen": {
"name": "galaxy-tab-a-9.7-and-s-pen",
"eol": "2017-08-01"
},
"galaxy-tab-a-9.7": {
"name": "galaxy-tab-a-9.7",
"eol": "2017-08-01"
},
"galaxy-tab-a-8.4-2020": {
"name": "galaxy-tab-a-8.4-2020",
"eol": true
},
"galaxy-tab-a-8.0-with-s-pen-2019": {
"name": "galaxy-tab-a-8.0-with-s-pen-2019",
"eol": "2021-11-17"
},
"galaxy-tab-a-8.0-and-s-pen-2015": {
"name": "galaxy-tab-a-8.0-and-s-pen-2015",
"eol": "2017-08-01"
},
"galaxy-tab-a-8.0-2019": {
"name": "galaxy-tab-a-8.0-2019",
"eol": true
},
"galaxy-tab-a-8.0-2018": {
"name": "galaxy-tab-a-8.0-2018",
"eol": true
},
"galaxy-tab-a-8.0-2017": {
"name": "galaxy-tab-a-8.0-2017",
"eol": "2021-11-17"
},
"galaxy-tab-a-8.0-2015": {
"name": "galaxy-tab-a-8.0-2015",
"eol": "2017-08-01"
},
"galaxy-tab-a-7.0-2016": {
"name": "galaxy-tab-a-7.0-2016",
"eol": "2016-12-30"
},
"galaxy-tab-a-10.5-2018": {
"name": "galaxy-tab-a-10.5-2018",
"eol": "2022-06-01"
},
"galaxy-tab-a-10.1-2019": {
"name": "galaxy-tab-a-10.1-2019",
"eol": true
},
"galaxy-tab-a-10.1-2016": {
"name": "galaxy-tab-a-10.1-2016",
"eol": "2020-04-01"
},
"galaxy-tab-4-8.0-lte": {
"name": "galaxy-tab-4-8.0-lte",
"eol": true
},
"galaxy-tab-4-8.0-3g": {
"name": "galaxy-tab-4-8.0-3g",
"eol": true
},
"galaxy-tab-4-8.0": {
"name": "galaxy-tab-4-8.0",
"eol": true
},
"galaxy-tab-4-7.0-lte": {
"name": "galaxy-tab-4-7.0-lte",
"eol": true
},
"galaxy-tab-4-7.0-3g": {
"name": "galaxy-tab-4-7.0-3g",
"eol": true
},
"galaxy-tab-4-7.0": {
"name": "galaxy-tab-4-7.0",
"eol": true
},
"galaxy-tab-4-10.1-lte": {
"name": "galaxy-tab-4-10.1-lte",
"eol": true
},
"galaxy-tab-4-10.1-3g": {
"name": "galaxy-tab-4-10.1-3g",
"eol": true
},
"galaxy-tab-4-10.1": {
"name": "galaxy-tab-4-10.1",
"eol": true
},
"galaxy-tab-3-v": {
"name": "galaxy-tab-3-v",
"eol": true
},
"galaxy-tab-3-lite-7.0-ve": {
"name": "galaxy-tab-3-lite-7.0-ve",
"eol": true
},
"galaxy-tab-3-lite-7.0-3g": {
"name": "galaxy-tab-3-lite-7.0-3g",
"eol": true
},
"galaxy-tab-3-lite-7.0": {
"name": "galaxy-tab-3-lite-7.0",
"eol": true
},
"galaxy-star-trios-s5283": {
"name": "galaxy-star-trios-s5283",
"eol": true

View File

@@ -47,6 +47,9 @@ class AutoConfig:
return None
def is_excluded(self, version: str) -> bool:
return self.first_match(version) is None
def render(self, match: re.Match) -> str:
return self.version_template.render(**match.groupdict())

View File

@@ -1,87 +0,0 @@
import logging
import re
from datetime import date, datetime, time, timezone
from bs4 import BeautifulSoup
from common import dates, endoflife, http, releasedata
"""Detect new models and aggregate EOL data for Samsung Mobile devices.
This script works cumulatively: when a model is not listed anymore on https://security.samsungmobile.com/workScope.smsb
it retains the date and use it as the model's EOL date.
"""
TITLES_BY_UPDATE_CADENCE = {
"monthly": "Current Models for Monthly Security Updates",
"quarterly": "Current Models for Quarterly Security Updates",
"biannual": "Current Models for Biannual Security Updates",
}
EXCLUDED_MODELS = {
"galaxy-tab-a7-10.4-2022": "still available according to https://www.gsmarena.com/samsung_galaxy_tab_a7_10_4_(2022)-11988.php",
"galaxy-watch5-pro": "will be tracked in a dedicated product",
"galaxy-watch5": "will be tracked in a dedicated product",
"galaxy-watch4-classic": "will be tracked in a dedicated product",
"galaxy-watch4": "will be tracked in a dedicated product",
"galaxy-m13-india": "still available according to https://www.gsmarena.com/samsung_galaxy_m13_(india)-11654.php",
"galaxy-a13-sm-a137": "still available according to https://www.gsmarena.com/samsung_galaxy_a13_(sm_a137)-11665.php",
"galaxy-a-quantum2": "still available according to https://www.gsmarena.com/samsung_galaxy_quantum_2-10850.php",
}
with releasedata.ProductData("samsung-mobile") as product_data:
today = dates.today()
frontmatter = endoflife.ProductFrontmatter(product_data.name)
frontmatter_release_names = frontmatter.get_release_names()
# Copy EOL dates from frontmatter to product data
for frontmatter_release in frontmatter.get_releases():
eol = frontmatter_release.get("eol")
eol = datetime.combine(eol, time.min, tzinfo=timezone.utc) if isinstance(eol, date) else eol
release = product_data.get_release(frontmatter_release.get("releaseCycle"))
release.set_eol(eol)
response = http.fetch_url("https://security.samsungmobile.com/workScope.smsb")
soup = BeautifulSoup(response.text, features="html5lib")
for update_cadence, title in TITLES_BY_UPDATE_CADENCE.items():
models_list = soup.find(string=lambda text, search=title: search in text if text else False).find_next("ul")
for item in models_list.find_all("li"):
models = item.text.replace("Enterprise Models:", "")
logging.info(f"Found {models} for {update_cadence} security updates")
for model in re.split(r',\s*', models):
name = endoflife.to_identifier(model)
release = product_data.get_release(name)
release.set_label(model.strip())
if name in frontmatter_release_names:
frontmatter_release_names.remove(name)
current_eol = release.get_eol()
if current_eol is True or (isinstance(current_eol, datetime) and current_eol <= today):
logging.info(f"Known model {name} is incorrectly marked as EOL, updating eol")
release.set_eol(False)
else:
logging.debug(f"Known model {name} is not EOL, keeping eol as {current_eol}")
else:
logging.debug(f"Found new model {name}")
release.set_eol(False)
# the remaining models in frontmatter_release_names are not listed anymore on the Samsung page => they are EOL
for eol_model_name in frontmatter_release_names:
release = product_data.get_release(eol_model_name)
current_eol = release.get_eol()
if eol_model_name in EXCLUDED_MODELS:
logging.debug(f"Skipping model {eol_model_name}: {EXCLUDED_MODELS[eol_model_name]}")
elif current_eol is False:
logging.info(f"Model {eol_model_name} is not EOL, setting eol")
release.set_eol(today)
elif isinstance(current_eol, datetime):
if current_eol > today:
logging.info(f"Model {eol_model_name} is not marked as EOL, setting eol as {today}")
release.set_eol(today)
else:
logging.debug(f"Model {eol_model_name} is already EOL, keeping eol as {current_eol}")

80
src/samsung-security.py Normal file
View File

@@ -0,0 +1,80 @@
import logging
import re
import sys
from datetime import date, datetime, time, timezone
from bs4 import BeautifulSoup
from common import dates, endoflife, http, releasedata
"""Detect new models and aggregate EOL data for Samsung Mobile devices.
This script works cumulatively: when a model is not listed anymore on https://security.samsungmobile.com/workScope.smsb
it retains the date and use it as the model's EOL date.
"""
TODAY = dates.today()
p_filter = sys.argv[1] if len(sys.argv) > 1 else None
m_filter = sys.argv[2] if len(sys.argv) > 2 else None
for config in endoflife.list_configs(p_filter, 'samsung-security', m_filter):
with releasedata.ProductData(config.product) as product_data:
frontmatter = endoflife.ProductFrontmatter(product_data.name)
frontmatter_release_names = frontmatter.get_release_names()
# Copy EOL dates from frontmatter to product data
for frontmatter_release in frontmatter.get_releases():
eol = frontmatter_release.get("eol")
eol = datetime.combine(eol, time.min, tzinfo=timezone.utc) if isinstance(eol, date) else eol
release = product_data.get_release(frontmatter_release.get("releaseCycle"))
release.set_eol(eol)
response = http.fetch_url(config.url)
soup = BeautifulSoup(response.text, features="html5lib")
sections = config.data.get("sections", {})
for update_cadence, title in sections.items():
models_list = soup.find(string=lambda text, search=title: search in text if text else False).find_next("ul")
for item in models_list.find_all("li"):
models = item.text.replace("Enterprise Models:", "")
logging.info(f"Found {models} for {update_cadence} security updates")
for model in re.split(r',\s*', models):
name = endoflife.to_identifier(model)
if config.is_excluded(name):
logging.debug(f"Ignoring model '{name}', excluded by configuration")
continue
release = product_data.get_release(name)
release.set_label(model.strip())
if name in frontmatter_release_names:
frontmatter_release_names.remove(name)
current_eol = release.get_eol()
if current_eol is True or (isinstance(current_eol, datetime) and current_eol <= TODAY):
logging.info(f"Known model {name} is incorrectly marked as EOL, updating eol")
release.set_eol(False)
else:
logging.debug(f"Known model {name} is not EOL, keeping eol as {current_eol}")
else:
logging.debug(f"Found new model {name}")
release.set_eol(False)
# the remaining models in frontmatter_release_names are not listed anymore on the Samsung page => they are EOL
for eol_model_name in frontmatter_release_names:
release = product_data.get_release(eol_model_name)
current_eol = release.get_eol()
if config.is_excluded(eol_model_name):
logging.debug(f"Skipping model {eol_model_name}, excluded by configuration")
elif current_eol is False:
logging.info(f"Model {eol_model_name} is not EOL, setting eol")
release.set_eol(TODAY)
elif isinstance(current_eol, datetime):
if current_eol > TODAY:
logging.info(f"Model {eol_model_name} is not marked as EOL, setting eol as {TODAY}")
release.set_eol(TODAY)
else:
logging.debug(f"Model {eol_model_name} is already EOL, keeping eol as {current_eol}")