install-docker/workflow_scripts/check-for-new-versions.py

87 lines
2.9 KiB
Python

import os
import requests
# Constants
DIST_FOLDER = './dist'
EXCLUDED_VERSIONS = os.environ.get('EXCLUDED_VERSIONS', 'v20.10.x,v23.0.x,v25.0.x,v26.1.x')
def get_excluded_version_patterns(excluded_ver_str):
excluded_ver_list = excluded_ver_str.split(',')
excluded_patterns = []
for ver in excluded_ver_list:
ver_parts = ver.split('.')
if len(ver_parts) == 3:
if ver_parts[1] == 'x':
excluded_patterns.append(ver_parts[0])
elif ver_parts[2] == 'x':
excluded_patterns.append(ver_parts[0] + '.'+ ver_parts[1])
else:
excluded_patterns.append(ver)
return excluded_patterns
def is_excluded_version(excluded_patterns,version):
for pattern in excluded_patterns:
if version.startswith(pattern):
return True
return False
def get_existing_versions(files_dir):
existing_versions = set()
for file in os.listdir(files_dir):
if file.endswith('.sh') and file.count('.') == 3:
existing_versions.add('v' + file[:-3])
return existing_versions
def fetch_ten_latest_github_releases(owner, repo):
url = f"https://api.github.com/repos/{owner}/{repo}/releases"
try:
response = requests.get(url)
response.raise_for_status() # Raise exception for bad status codes
releases = [release for release in response.json() if not release.get('prerelease')]
return sorted(releases, key=lambda x: x['created_at'], reverse=True)[:10]
except requests.exceptions.RequestException as e:
print(f"Failed to fetch releases: {e}")
return None
def get_version_tuple(version):
if version.startswith('v'):
version = version[1:]
return tuple(map(int, version.split('.')))
def main():
excluded_ver_patterns = get_excluded_version_patterns(EXCLUDED_VERSIONS)
existing_versions = get_existing_versions(DIST_FOLDER)
owner = "moby"
repo = "moby"
ten_latest_releases = fetch_ten_latest_github_releases(owner, repo)
ten_latest_versions = [release['tag_name'] for release in ten_latest_releases]
print("Ten latest versions: ",ten_latest_versions)
new_versions = set(ten_latest_versions) - existing_versions
new_versions = list(filter(lambda ver: not is_excluded_version(excluded_ver_patterns,ver),new_versions))
sorted_new_versions = sorted(new_versions,key=get_version_tuple)
print('New versions: ',sorted_new_versions)
versions_string = ",".join(sorted_new_versions)
PR_TITLE = ""
if versions_string != "":
PR_TITLE = "[Auto] Add docker " + versions_string
print('PR Title: ', PR_TITLE)
env_file = os.getenv('GITHUB_ENV')
if env_file:
with open(env_file, "a") as envfile:
envfile.write("PR_TITLE="+PR_TITLE+"\n")
envfile.write("NEW_VERSIONS="+versions_string+"\n")
else:
exit(1)
if __name__ == "__main__":
main()