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 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()