51 lines
1.6 KiB
Python
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")
|