sd-card-images/metascripts/rebuild-jekyll-boards

93 lines
2.3 KiB
Python
Executable File

#!/usr/bin/env python3
import csv
import logging
import os
import glob
logging.basicConfig()
logger = logging.getLogger("rebuild-jekyll-boards")
logger.setLevel(logging.DEBUG)
BOARD_TEMPLATE = """\
---
layout: board
title: {board_name} SD card images
description: "Minimal, pure and up-to-date vanilla Debian/Ubuntu \
{debian_architecture} SD card images for {board_name} by {board_maker}, SoC: \
{chip_maker} {chip_name}, CPU ISA: {cpu_architecture}"
board_id: {board_id}
board_dtb_name: {device_tree}
board_name: {board_name}
board_maker_name: {board_maker}
board_soc_name: {chip_maker} {chip_name}
board_cpu_name: {cpu} ({cpu_architecture})
board_cpu_arch_isa: {cpu_architecture}
board_cpu_arch_debian: {debian_architecture}
---
"""
DEBIAN_TEMPLATE = """\
---
os: {os}
dist: {dist}
arch: {arch}
name: {name}
exp: {exp}
---
"""
def norm(d):
return {k.lower().replace(" ", "_"): v for k, v in d.items()}
def read_boards():
logger.debug("Reading boards...")
with open("boards.csv") as csvfile:
return {row["Board ID"]: norm(row) for row in csv.DictReader(csvfile)}
def read_chips():
logger.debug("Reading chips...")
with open("chips.csv") as csvfile:
return {row["Chip ID"]: norm(row) for row in csv.DictReader(csvfile)}
def read_debians():
logger.debug("Reading debians...")
with open("debians-arm.csv") as csvfile:
def key(row):
return "-".join((row["OS"], row["Dist"], row["Arch"]))
return {key(row): norm(row) for row in csv.DictReader(csvfile)}
def write_boards(boards, chips):
for x in glob.glob("docs/_boards/*.md"):
os.remove(x)
logger.info("Removed boards")
for k, board in boards.items():
board.update(chips[board["chip_id"]])
with open(f"docs/_boards/{k}.md", "w") as boardf:
boardf.write(BOARD_TEMPLATE.format(**board))
logger.info("Wrote %d boards", len(boards))
def write_debians(debians):
for x in glob.glob("docs/_debians/*.md"):
os.remove(x)
logger.info("Removed debians")
for k, debian in debians.items():
with open(f"docs/_debians/{k}.md", "w") as debiansf:
debiansf.write(DEBIAN_TEMPLATE.format(**debian))
logger.info("Wrote %d debians", len(debians))
if __name__ == "__main__":
write_boards(read_boards(), read_chips())
write_debians(read_debians())