update dockerhub and goodgame scripts

This commit is contained in:
Dmitry Afanasyev 2023-12-28 01:51:23 +03:00
parent 4f995d530b
commit 66e8f9e757
2 changed files with 46 additions and 54 deletions

View File

@ -13,42 +13,42 @@ from termcolor import colored
SERVICES: dict[str: dict[str, Any]] = { SERVICES: dict[str: dict[str, Any]] = {
'general': { 'general': {
'components': [ 'components': [
{'name': 'caddy', 'version': '2.7.5'}, {'name': 'caddy', 'version': '2.7.6'},
{'name': 'python', 'version': '3.11.5'}, {'name': 'python', 'version': '3.12.1'},
] ]
}, },
'nextcloud': { 'nextcloud': {
'components': [ 'components': [
{'name': 'nextcloud', 'version': '27.1.2'}, {'name': 'nextcloud', 'version': '28.0.1'},
{'name': 'mysql', 'version': '8.1.0'}, {'name': 'mysql', 'version': '8.2.0'},
{'name': 'redis', 'version': '7.2.1'}, {'name': 'redis', 'version': '7.2.3'},
{'name': 'nginx', 'version': '1.25.2'}, {'name': 'nginx', 'version': '1.25.3'},
{'name': 'onlyoffice/documentserver', 'version': '7.3.3.50'}, {'name': 'onlyoffice/documentserver', 'version': '7.5.1.1'},
], ],
}, },
'gitea': { 'gitea': {
'components': [ 'components': [
{'name': 'gitea/gitea', 'version': '1.20.5'}, {'name': 'gitea/gitea', 'version': '1.21.3'},
{'name': 'postgres', 'version': '15.4'}, {'name': 'postgres', 'version': '16.1'},
], ],
}, },
'mediawiki': { 'mediawiki': {
'components': [ 'components': [
{'name': 'mediawiki', 'version': '1.40.1'}, {'name': 'mediawiki', 'version': '1.41.0'},
{'name': 'mariadb', 'version': '11.1.2'}, {'name': 'mariadb', 'version': '11.2.2'},
], ],
}, },
'bitwarden': { 'bitwarden': {
'components': [ 'components': [
{'name': 'bitwarden/web', 'version': '2023.9.1'}, {'name': 'bitwarden/web', 'version': '2023.12.0'},
{'name': 'bitwarden/server', 'version': '2023.9.0'}, {'name': 'bitwarden/server', 'version': '2023.12.0'},
], ],
}, },
'mosgortrans': { 'mosgortrans': {
'deprecated': True, 'deprecated': False,
'components': [ 'components': [
{'name': 'selenoid/chrome', 'version': '111.0'}, {'name': 'selenoid/chrome', 'version': '119.0'},
{'name': 'aerokube/selenoid', 'version': '1.10.10'}, {'name': 'aerokube/selenoid', 'version': '1.11.0'},
], ],
}, },
} }
@ -140,11 +140,12 @@ class DockerHubScanner:
# Do not show older versions than current in tags # Do not show older versions than current in tags
try: try:
tags = tags[:tags.index(component_version) + 1] tags = tags[:tags.index(component_version) + 1]
if len(tags) > 5:
tags = tags[:5]
except ValueError: except ValueError:
tags = tags[:3] tags = tags[:3]
logger.error( logger.error(
f"cant find tag {component_version} for service {service_name}" f"Cant find tag {component_version} for service {service_name} for component {component_name}"
f"for component {component_name}"
) )
return {component_name: tags} return {component_name: tags}
@ -155,24 +156,23 @@ class DockerHubScanner:
return services_tags return services_tags
def print_data(self, service_name: str, service_component: dict[str, str], lock: Lock) -> None: def print_data(self, service_name: str, service_component: dict[str, str]) -> None:
component_name = service_component['name'] component_name = service_component['name']
component_version = service_component['version'] component_version = service_component['version']
data = self.get_data(service_name, service_component) data = self.get_data(service_name, service_component)
with lock: print(
print( f"Service: {colored(service_name, color='light_grey')}",
f"Service: {colored(service_name, color='light_grey')}", f"\nComponent: {colored(component_name, color='light_blue')}",
f"\nComponent: {colored(component_name, color='light_blue')}", f"\nLatest tags: {colored(str(data[component_name]), color='magenta')}",
f"\nLatest tags: {colored(str(data[component_name]), color='magenta')}", f"\nCurrent version: {colored(component_version, color='cyan')}",
f"\nCurrent version: {colored(component_version, color='cyan')}", )
)
if data[component_name][0] > component_version: if data[component_name][0] > component_version:
print(f"New version of {component_name}: {colored(data[component_name][0], color='yellow')}") print(f"New version of {component_name}: {colored(data[component_name][0], color='yellow')}")
print() print()
async def _async_request(self, client: AsyncClient, url: str) -> dict[str, Any] | None: async def _async_request(self, client: AsyncClient, url: str) -> dict[str, Any] | None:
@ -203,26 +203,28 @@ class DockerHubScanner:
if __name__ == '__main__': if __name__ == '__main__':
print()
print(colored('Services'.center(50, '-', ), color='white'), '\n') print(colored('Services'.center(50, '-', ), color='white'), '\n')
global_lock = Lock() lock = Lock()
dockerhub_scanner = DockerHubScanner() dockerhub_scanner = DockerHubScanner()
processes = [] processes = []
for service, service_details in SERVICES.items(): with lock:
for component in service_details['components']: for service, service_details in SERVICES.items():
if service_details.get('deprecated', False): for component in service_details['components']:
continue if service_details.get('deprecated', False):
process = Process( continue
target=dockerhub_scanner.print_data, process = Process(
kwargs={'service_name': service, 'service_component': component, 'lock': global_lock} target=dockerhub_scanner.print_data,
) kwargs={'service_name': service, 'service_component': component}
processes.append(process) )
process.start() processes.append(process)
process.start()
for process in processes: for process in processes:
process.join() process.join()
print(colored("All jobs done", color='white')) print(colored("All jobs done", color='white'), '\n')

View File

@ -1,6 +1,7 @@
import asyncio import asyncio
import sys import sys
import time import time
import timeit
from logging import Logger from logging import Logger
from multiprocessing import Process from multiprocessing import Process
from typing import Any from typing import Any
@ -185,17 +186,6 @@ if __name__ == '__main__':
good_game = GoodGame() good_game = GoodGame()
start = time.time() start = time.time()
good_game.async_counter() good_game.async_counter()
# async_process = Process(
# target=good_game.async_counter, args=(), kwargs={}, name='async_process'
# )
# sync_process = Process(
# target=good_game.sync_counter, args=(), kwargs={}, name='sync_process'
# )
# sync_process.start()
# async_process.start()
# sync_process.join()
# async_process.join()
stop = time.time() stop = time.time()
logger.info(f'End all processes. Execution time: {round(stop-start, 2)} seconds') logger.info(f'End all processes. Execution time: {round(stop-start, 2)} seconds')