Implement version checking and basic refactoring
All checks were successful
Build Docker Image / build (push) Successful in 27s
All checks were successful
Build Docker Image / build (push) Successful in 27s
This commit is contained in:
59
main.py
59
main.py
@@ -1,17 +1,21 @@
|
||||
import os
|
||||
import re
|
||||
import logging
|
||||
from configparser import ConfigParser
|
||||
|
||||
import requests
|
||||
|
||||
from logger import setup_log
|
||||
from package import pkg
|
||||
from package import Package
|
||||
|
||||
|
||||
## Autopkg Apps
|
||||
apps = {
|
||||
"bitcoinknots": "https://api.github.com/repos/bitcoinknots/bitcoin/releases/latest",
|
||||
"electrs": "https://api.github.com/repos/romanz/electrs/releases/latest"
|
||||
"bitcoinknots": {
|
||||
"url": "https://api.github.com/repos/bitcoinknots/bitcoin/releases/latest",
|
||||
"versioningScheme": r"^v(\d+)\.(\d+)\.(\d+)$"
|
||||
},
|
||||
"electrs": {"url": "https://api.github.com/repos/romanz/electrs/releases/latest"}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,17 +28,19 @@ class Autopkg:
|
||||
|
||||
# Environment Setup
|
||||
target = os.getenv("APKG_TARGET")
|
||||
os.environ["APKG_RUNTIME_DIR"] = os.path.dirname(os.path.abspath(__file__)) # Set runtime directory
|
||||
|
||||
if target == "prod":
|
||||
self.datafile = "/etc/autopkg/data.ini"
|
||||
elif target == "test" or target == "debug":
|
||||
logging.warning("Running autopkg in testing mode!")
|
||||
match target:
|
||||
case "prod":
|
||||
self.datafile = "/etc/autopkg/data.ini"
|
||||
case "test" | "debug":
|
||||
logging.warning("Running autopkg in testing mode!")
|
||||
|
||||
self.datafile = os.path.dirname(os.path.abspath(__file__)) + "/test/data.ini"
|
||||
self.datafile = os.getenv("APKG_RUNTIME_DIR") + "/test/data.ini"
|
||||
|
||||
if os.path.exists(self.datafile): os.remove(self.datafile)
|
||||
else:
|
||||
raise ValueError("APKG_TARGET environment variable not setup correctly!")
|
||||
if os.path.exists(self.datafile): os.remove(self.datafile)
|
||||
case _:
|
||||
raise ValueError("APKG_TARGET environment variable not setup correctly!")
|
||||
|
||||
## Config File Setup
|
||||
self.data = ConfigParser()
|
||||
@@ -57,24 +63,37 @@ class Autopkg:
|
||||
# Main Application
|
||||
def main(self):
|
||||
# Handle apps (get versions)
|
||||
for app, url in apps.items():
|
||||
ini_version = self.data.getint("Versions", app, fallback=0) # Version previously packaged from data.ini
|
||||
for app, info in apps.items():
|
||||
ini_version = self.data.get("Versions", app, fallback=None) # Version previously packaged from data.ini
|
||||
|
||||
response = requests.get(url) # Fetch data from API
|
||||
response = requests.get(info["url"]) # Fetch data from API
|
||||
|
||||
# Parse through JSON data
|
||||
if response.status_code == 200:
|
||||
json = response.json()
|
||||
version = json["id"] # App version from API
|
||||
tag = json["tag_name"] # App version from API
|
||||
pre_release = json["prerelease"]
|
||||
|
||||
# Package new versions if available
|
||||
if version != ini_version:
|
||||
logging.info(f"Found new version ({version}) for {app}, packaging..")
|
||||
if tag != ini_version and not pre_release:
|
||||
logging.info(f"Found new version ({tag}) for {app}, packaging..")
|
||||
|
||||
if pkg(app, version):
|
||||
ini_version = str(version)
|
||||
try:
|
||||
if Package(app, tag).build():
|
||||
ini_version = str(tag)
|
||||
|
||||
self.write_data()
|
||||
self.write_data()
|
||||
except Exception as e:
|
||||
logging.error(f"Error starting docker container for {app}")
|
||||
|
||||
|
||||
def version_is_higher(tag: str, info: dict) -> (str, None):
|
||||
regular_scheme = r"^v(\d+)\.(\d+)\.(\d+)$"
|
||||
|
||||
try:
|
||||
version = re.match(info["versioningScheme"], tag)
|
||||
except:
|
||||
version = re.match(regular_scheme)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user