"""Publish version-pinned firmware downloads at short, real binary URLs."""
import html
import logging
import os
from pathlib import Path
import sys
sys.path.insert(0, str(Path(__file__).resolve().parent))
from firmware_shortlinks import download_url, load_manifest, mirror, validate_immutable
MARKER = ""
def registry(config):
return load_manifest(Path(config["docs_dir"]) / "_data/firmware_shortlinks.json")
def on_page_markdown(markdown, page, config, **kwargs):
if MARKER not in markdown:
return markdown
data = registry(config)
base = config["site_url"].rstrip("/") + "/d/"
rows = ["
| Firmware | Short download link | "
"Original release |
"]
for link in data["links"]:
label = html.escape(link["label"], quote=True)
alias = base + link["filename"]
original = download_url(data, link).split("/releases/download/", 1)[0]
original += "/releases/tag/" + link["releaseTag"]
rows.append(
"| " + label + " | " + html.escape(link["filename"]) + " | Release |
")
rows.append("
")
return markdown.replace(MARKER, "\n".join(rows))
def on_post_build(config, **kwargs):
data = registry(config)
previous = os.environ.get("MESHCORE_SHORTLINKS_PREVIOUS")
if previous:
validate_immutable(load_manifest(Path(previous)), data)
cache = Path(os.environ.get(
"MESHCORE_SHORTLINKS_CACHE",
str(Path(config.config_file_path).resolve().parent / ".cache/firmware-shortlinks")))
outputs = mirror(data, Path(config["site_dir"]) / "d", cache)
logging.getLogger("mkdocs.plugins.firmware_shortlinks").info(
"Published %d checksum-verified short firmware downloads", len(outputs))