oci-images/nextcloud/get_versions_to_be_built.py
Max f00ef69a05
Some checks failed
Build Nextcloud / Determine viable Nextcloud versions (push) Failing after 13s
automatically build newer nextcloud versions when they have ripened half a year
2026-08-23 21:29:29 +02:00

51 lines
1.6 KiB
Python

import datetime
import json
import os
import re
import requests
endoflife_nextcloud_url = "https://endoflife.date/api/v1/products/nextcloud/"
ansible_nextcloud_vars_url = "https://git.hamburg.ccc.de/CCCHH/ansible-infra/raw/branch/main/inventories/chaosknoten/host_vars/cloud.yaml"
ansible_nextcloud_vars_regex = r"(?m)^\s*nextcloud__version:\s*(\d+)\s*$"
releases_to_be_built = []
# get the currently installed Nextcloud version
nc_vars = requests.get(ansible_nextcloud_vars_url).text
match = re.search(ansible_nextcloud_vars_regex, nc_vars)
if match:
current_version = int(match.group(1))
releases_to_be_built.append(current_version)
else:
raise ValueError("nextcloud__version not found")
# determine the current Nextcloud versions
eol_data = requests.get(endoflife_nextcloud_url).text
eol_json = json.loads(eol_data)
now = datetime.datetime.now()
format_string = '%Y-%m-%d'
viable_releases = []
for release in eol_json["result"]["releases"]:
# only check releases which are not EOL
if release['isEol'] is True:
continue
# parse release date
release_datetime = datetime.datetime.strptime(release['releaseDate'], format_string)
# only consider releases older than half a year
if release_datetime < now - datetime.timedelta(days=180):
version = int(release['name'])
print(f"{version} released on {release['releaseDate']}")
if version > current_version:
releases_to_be_built.append(version)
versions = [str(v) for v in releases_to_be_built]
print(versions)
with open(os.environ["FORGEJO_OUTPUT"], "a") as output:
output.write(f"versions={json.dumps(versions)}\n")