Add red-hat-openshift script (#119)

The script only get versions 4.x and above, see script comments for more informations.

Note that the code related to git has been extracted to a common script so that it can be reused for the Debian script.
This commit is contained in:
Daniel
2023-07-15 18:26:11 +02:00
committed by GitHub
parent e1c20785fa
commit 897d514e7f
4 changed files with 138 additions and 30 deletions

View File

@@ -1,39 +1,17 @@
import pathlib
import subprocess
from common import endoflife
from hashlib import sha1
from os.path import exists
from subprocess import call
from common.git import Git
"""Fetch Debian versions with their dates from www.debian.org source repository.
"""
PRODUCT = "debian"
REPO_URL = "https://salsa.debian.org/webmaster-team/webwml.git"
REPO_SHA1 = sha1(REPO_URL.encode()).hexdigest()
REPO_DIR = pathlib.Path(f"~/.cache/git/debian.md_{REPO_SHA1}").expanduser()
# Checkout the Debian website repository.
def clone_repository():
git_opts = f"--git-dir={REPO_DIR}/.git --work-tree={REPO_DIR}"
REPO_DIR.mkdir(parents=True, exist_ok=True)
if not exists(f"{REPO_DIR}/.git"):
call(f"git {git_opts} init", shell=True)
call(f"git {git_opts} remote add origin {REPO_URL}", shell=True)
call(f"git {git_opts} config core.sparseCheckout true", shell=True)
with open(f"{REPO_DIR}/.git/info/sparse-checkout", "w") as f:
f.write("english/News/")
ret_code = call(f"git {git_opts} pull --depth 1 origin master", shell=True)
exit(-ret_code) if ret_code < 0 else None
def extract_major_releases(releases):
def extract_major_releases(releases, repo_dir):
child = subprocess.Popen(
f"grep -RhE -A 1 '<define-tag pagetitle>Debian [0-9]+.+</q> released' {REPO_DIR}/english/News "
f"grep -RhE -A 1 '<define-tag pagetitle>Debian [0-9]+.+</q> released' {repo_dir}/english/News "
f"| cut -d '<' -f 2 "
f"| cut -d '>' -f 2 "
f"| grep -v -- '--'",
@@ -54,9 +32,9 @@ def extract_major_releases(releases):
is_release_line = True
def extract_point_releases(releases):
def extract_point_releases(releases, repo_dir):
child = subprocess.Popen(
f"grep -Rh -B 10 '<define-tag revision>' {REPO_DIR}/english/News "
f"grep -Rh -B 10 '<define-tag revision>' {repo_dir}/english/News "
"| grep -Eo '(release_date>(.*)<|revision>(.*)<)' "
"| cut -d '>' -f 2,4 "
"| tr -d '<' "
@@ -73,12 +51,14 @@ def extract_point_releases(releases):
print(f"{version}: {date}")
releases[version] = date
git = Git(REPO_URL)
git.setup()
git.checkout("master", file_list=["english/News"])
print(f"::group::{PRODUCT}")
clone_repository()
all_releases = {}
extract_major_releases(all_releases)
extract_point_releases(all_releases)
extract_major_releases(all_releases, git.repo_dir)
extract_point_releases(all_releases, git.repo_dir)
endoflife.write_releases(PRODUCT, dict(
# sort by date then version (desc)
sorted(all_releases.items(), key=lambda x: (x[1], x[0]), reverse=True)