Add tools/has_update + README
This commit is contained in:
parent
217db5e2ef
commit
3408cfd03a
|
@ -0,0 +1,39 @@
|
||||||
|
# Tools
|
||||||
|
|
||||||
|
## has_update
|
||||||
|
This tool is used to check - with a set registred project - for:
|
||||||
|
- available online latest version
|
||||||
|
- current installed version
|
||||||
|
|
||||||
|
This tool, writtent in python and under GPLv3 Licence assumes project is
|
||||||
|
installed using git in an admin project name owner on the system.
|
||||||
|
|
||||||
|
It is configured here for "mastodon" project, but you can copy and use it,
|
||||||
|
by changing the settings inside the script
|
||||||
|
|
||||||
|
```
|
||||||
|
owner = "mastodon" # Also used for sudo -u {owner}
|
||||||
|
name = "mastodon"
|
||||||
|
repo = f"https://api.github.com/repos/{owner}/{name}/releases/latest"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
```
|
||||||
|
cd /srv
|
||||||
|
git clone https://forge.a-lec.org/cominfra/toot.git
|
||||||
|
chmod +x toot/tools/has_update
|
||||||
|
```
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
```
|
||||||
|
Usage: has_update [argument]
|
||||||
|
-h : This help !
|
||||||
|
-v : Show both versions (online, and installed)
|
||||||
|
```
|
||||||
|
|
||||||
|
This tool is intended to inform administrator about available update of a
|
||||||
|
project. You can use it with an external script in a crontab that checks the
|
||||||
|
ouput of *has_update*. Do not forget, in that case, to not give argument. With
|
||||||
|
no argument, *has_update* ouputs a message ONLY if an update is available.
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# version: 0.1
|
||||||
|
# File: /srv/toot/has_update
|
||||||
|
|
||||||
|
# Copyright (C) 2023 Cyrille Louarn <echolib+tools@a-lec.org>
|
||||||
|
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>..
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
# XMPP: echolib (echolib@a-lec.org)
|
||||||
|
#
|
||||||
|
# Description:
|
||||||
|
# Search for release update using git
|
||||||
|
# ! Assume Project is insalled from git
|
||||||
|
#
|
||||||
|
# You may use with script (if you do not give argument to has_update)
|
||||||
|
# No output = no update
|
||||||
|
# Output update = v[latest] > v[current]
|
||||||
|
#
|
||||||
|
# Convenience -v argument (do not use with script): show both versions
|
||||||
|
#
|
||||||
|
# RC errors :
|
||||||
|
# 1 = Online Capture problem
|
||||||
|
# 2 = Installed Capture problem
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
import requests, subprocess, sys
|
||||||
|
|
||||||
|
|
||||||
|
# Set Project
|
||||||
|
#------------
|
||||||
|
owner = "mastodon" # Also used for sudo -u {owner}
|
||||||
|
name = "mastodon"
|
||||||
|
|
||||||
|
|
||||||
|
helps = """Usage: has_update [argument]
|
||||||
|
-h : This help !
|
||||||
|
-v : Show both versions (online, and installed)
|
||||||
|
"""
|
||||||
|
|
||||||
|
#=====================================================#
|
||||||
|
# Check available version using Git API with requests #
|
||||||
|
#-----------------------------------------------------#
|
||||||
|
def get_available_release():
|
||||||
|
url = f"https://api.github.com/repos/{owner}/{name}/releases/latest"
|
||||||
|
response = requests.get(url)
|
||||||
|
if response.status_code == 200:
|
||||||
|
latest_release = response.json()
|
||||||
|
return latest_release['tag_name']
|
||||||
|
else:
|
||||||
|
print(f"Failed to get online lates release: {response.status_code}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
#===========================================#
|
||||||
|
# Check installed version using git command #
|
||||||
|
# Assume Project is insalled from git #
|
||||||
|
#-------------------------------------------#
|
||||||
|
def get_installed_release():
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
['sudo', '-u', owner, 'git', 'describe', '--tags', '--exact-match'],
|
||||||
|
stdout=subprocess.PIPE, # Get output
|
||||||
|
stderr=subprocess.PIPE, # Get error (if any)
|
||||||
|
text=True, # Set stdout + stderr
|
||||||
|
check=True # exception if failure
|
||||||
|
)
|
||||||
|
|
||||||
|
# Output captured successfully
|
||||||
|
return result.stdout.strip()
|
||||||
|
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
# Handle the case where the command fails
|
||||||
|
print("Failed to get installed release:", e.stderr.strip())
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
||||||
|
#======#
|
||||||
|
# Main #
|
||||||
|
#------#
|
||||||
|
|
||||||
|
# With -h argument, show both versions
|
||||||
|
if '-h' in sys.argv:
|
||||||
|
print(helps)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
# Get versions (online and local)
|
||||||
|
available_version = get_available_release()
|
||||||
|
installed_version = get_installed_release()
|
||||||
|
|
||||||
|
|
||||||
|
# With -v argument, show both versions
|
||||||
|
if '-v' in sys.argv:
|
||||||
|
print(f"{owner}:")
|
||||||
|
print(f"- Available: {available_version}\n-Installed: {installed_version}")
|
||||||
|
|
||||||
|
# A new version is available
|
||||||
|
elif available_version != installed_version:
|
||||||
|
print(f"{owner}: {installed_version} -> {available_version}")
|
||||||
|
|
Loading…
Reference in New Issue