83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
import os
|
|
import logging
|
|
from configparser import ConfigParser
|
|
|
|
import requests
|
|
|
|
from logger import setup_log
|
|
from package import pkg
|
|
|
|
|
|
## Autopkg Apps
|
|
apps = {
|
|
"bitcoinknots": "https://api.github.com/repos/bitcoinknots/bitcoin/releases/latest",
|
|
"electrs": "https://api.github.com/repos/romanz/electrs/releases/latest"
|
|
}
|
|
|
|
|
|
class Autopkg:
|
|
def __init__(self):
|
|
# Logging Setup
|
|
setup_log()
|
|
|
|
logging.info("Running autopkg (c) 2025 phantom <phantom@shadeouts.net> https://shadeouts.net/")
|
|
|
|
# Environment Setup
|
|
target = os.getenv("APKG_TARGET")
|
|
|
|
if target == "prod":
|
|
self.datafile = "/etc/autopkg/data.ini"
|
|
elif target == "test" or target == "debug":
|
|
logging.warning("Running autopkg in testing mode!")
|
|
|
|
self.datafile = os.path.dirname(os.path.abspath(__file__)) + "/test/data.ini"
|
|
|
|
if os.path.exists(self.datafile): os.remove(self.datafile)
|
|
else:
|
|
raise ValueError("APKG_TARGET environment variable not setup correctly!")
|
|
|
|
## Config File Setup
|
|
self.data = ConfigParser()
|
|
|
|
self.data.read(self.datafile)
|
|
|
|
## Setup file if not present
|
|
if "Versions" not in self.data:
|
|
self.data.add_section("Versions")
|
|
|
|
self.write_data()
|
|
|
|
|
|
# Write datafile changes
|
|
def write_data(self):
|
|
with open(self.datafile, "w") as f:
|
|
self.data.write(f)
|
|
|
|
|
|
# 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
|
|
|
|
response = requests.get(url) # Fetch data from API
|
|
|
|
# Parse through JSON data
|
|
if response.status_code == 200:
|
|
json = response.json()
|
|
version = json["id"] # App version from API
|
|
|
|
# Package new versions if available
|
|
if version != ini_version:
|
|
logging.info(f"Found new version ({version}) for {app}, packaging..")
|
|
|
|
if pkg(app, version):
|
|
ini_version = str(version)
|
|
|
|
self.write_data()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Call main function
|
|
Autopkg().main()
|