mirror of
https://github.com/tubearchivist/tubearchivist-frontend.git
synced 2024-11-22 11:50:14 +00:00
added a requirements.txt version check before deploying
This commit is contained in:
parent
4f62703b2e
commit
97819318da
@ -57,6 +57,9 @@ function sync_docker {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# check package versions in requirements.txt for updates
|
||||||
|
python version_check.py
|
||||||
|
|
||||||
|
|
||||||
if [[ $1 == "blackhole" ]]; then
|
if [[ $1 == "blackhole" ]]; then
|
||||||
sync_blackhole
|
sync_blackhole
|
||||||
|
93
version_check.py
Executable file
93
version_check.py
Executable file
@ -0,0 +1,93 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
""" check requirements.txt for outdated packages """
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
class Requirements:
|
||||||
|
""" handle requirements.txt """
|
||||||
|
|
||||||
|
FILE_PATH = 'tubearchivist/requirements.txt'
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.all_requirements = self.get_dependencies()
|
||||||
|
self.all_updates = self.check_packages()
|
||||||
|
|
||||||
|
def get_dependencies(self):
|
||||||
|
""" read out requirements.txt """
|
||||||
|
|
||||||
|
all_requirements = []
|
||||||
|
with open(self.FILE_PATH, 'r', encoding='utf-8') as f:
|
||||||
|
dependencies = f.readlines()
|
||||||
|
|
||||||
|
for dependency in dependencies:
|
||||||
|
package, version = dependency.split('==')
|
||||||
|
all_requirements.append((package, version.strip()))
|
||||||
|
|
||||||
|
all_requirements.sort(key = lambda x: x[0].lower())
|
||||||
|
|
||||||
|
return all_requirements
|
||||||
|
|
||||||
|
def check_packages(self):
|
||||||
|
""" compare installed with remote version """
|
||||||
|
|
||||||
|
total = len(self.all_requirements)
|
||||||
|
print(f'checking versions for {total} packages...')
|
||||||
|
|
||||||
|
all_updates = {}
|
||||||
|
|
||||||
|
for dependency in self.all_requirements:
|
||||||
|
package, version_installed = dependency
|
||||||
|
url = f'https://pypi.org/pypi/{package}/json'
|
||||||
|
response = requests.get(url).json()
|
||||||
|
version_remote = response['info']['version']
|
||||||
|
homepage = response['info']['home_page']
|
||||||
|
if version_remote != version_installed:
|
||||||
|
to_update = {
|
||||||
|
package: {
|
||||||
|
"from": version_installed,
|
||||||
|
"to": version_remote
|
||||||
|
}
|
||||||
|
}
|
||||||
|
all_updates.update(to_update)
|
||||||
|
message = (f'update {package} {version_installed}' +
|
||||||
|
f'==> {version_remote}\n {homepage}')
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
if not all_updates:
|
||||||
|
print('no updates found')
|
||||||
|
|
||||||
|
return all_updates
|
||||||
|
|
||||||
|
def apply_updates(self):
|
||||||
|
""" update requirements.txt file with new versions """
|
||||||
|
|
||||||
|
to_write = []
|
||||||
|
|
||||||
|
for requirement in self.all_requirements:
|
||||||
|
package, old_version = requirement
|
||||||
|
|
||||||
|
if package in self.all_updates.keys():
|
||||||
|
package_version = self.all_updates[package]['to']
|
||||||
|
else:
|
||||||
|
package_version = old_version
|
||||||
|
|
||||||
|
to_write.append(f'{package}=={package_version}\n')
|
||||||
|
|
||||||
|
with open(self.FILE_PATH, 'w', encoding='utf-8') as f:
|
||||||
|
f.writelines(to_write)
|
||||||
|
|
||||||
|
print('requirements.txt updates')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
handler = Requirements()
|
||||||
|
if handler.all_updates:
|
||||||
|
input_response = input('\nupdate requirements.txt? [y/n] ')
|
||||||
|
if input_response == 'y':
|
||||||
|
handler.apply_updates()
|
||||||
|
else:
|
||||||
|
print('cancle update...')
|
||||||
|
sys.exit(1)
|
Loading…
Reference in New Issue
Block a user