diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a364e915..0bfb2527 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -206,6 +206,133 @@ jobs: print(json.dumps(data, indent=2)) PY + - name: Generate per-set and plugin index pages + run: | + python3 - \ + "${{ steps.targets.outputs.build_snapshot }}" \ + "${{ steps.snapmeta.outputs.short }}" \ + "${{ steps.snapmeta.outputs.cdate }}" \ + "${{ steps.targets.outputs.build_release }}" \ + "${{ steps.relref.outputs.found }}" \ + "${{ steps.relref.outputs.tag }}" \ + "${{ steps.relmeta.outputs.short }}" \ + "${{ steps.relmeta.outputs.cdate }}" <<'PY' + import sys, os, glob, html as he + do_snap, s_short, s_cdate, do_rel, rel_found, r_tag, r_short, r_cdate = sys.argv[1:] + + CSS = """ + :root { --bg:#0d1117; --surface:#161b22; --border:#30363d; + --text:#e6edf3; --text-muted:#8b949e; --accent:#58a6ff; + --header-bg:linear-gradient(135deg,#0d1117 0%,#1a2332 50%,#0d1117 100%); } + * { margin:0; padding:0; box-sizing:border-box; } + body { font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif; + background:var(--bg); color:var(--text); line-height:1.6; } + header { background:var(--header-bg); border-bottom:1px solid var(--border); + padding:2rem 1rem; text-align:center; } + header h1 { font-size:1.5rem; font-weight:600; letter-spacing:-0.02em; } + header p { color:var(--text-muted); font-size:0.9rem; margin-top:0.25rem; } + header .home-link { display:inline-block; margin-top:0.75rem; font-size:0.85rem; + color:var(--accent); text-decoration:none; } + header .home-link:hover { text-decoration:underline; } + main { max-width:760px; margin:0 auto; padding:2rem 1rem; } + .card { background:var(--surface); border:1px solid var(--border); border-radius:8px; + padding:1.25rem 1.5rem; margin-bottom:0.75rem; } + .card h2 { font-size:1rem; font-weight:600; margin-bottom:0.2rem; } + .card .meta { color:var(--text-muted); font-size:0.8rem; margin-bottom:0.75rem; } + .links { display:flex; flex-wrap:wrap; gap:0.5rem; } + .links a { display:inline-block; color:var(--accent); text-decoration:none; + font-size:0.85rem; border:1px solid var(--border); padding:0.35rem 0.75rem; + border-radius:6px; transition:border-color .15s,background .15s; } + .links a:hover { border-color:var(--accent); background:rgba(88,166,255,0.1); } + ul.plugin-list { list-style:none; padding:0; } + ul.plugin-list li { margin-bottom:0.4rem; } + ul.plugin-list a { color:var(--accent); text-decoration:none; font-size:0.9rem; } + ul.plugin-list a:hover { text-decoration:underline; } + .note { color:var(--text-muted); font-size:0.8rem; margin-top:1.5rem; text-align:center; } + footer { text-align:center; padding:2rem 1rem; color:var(--text-muted); + font-size:0.8rem; border-top:1px solid var(--border); } + footer a { color:var(--accent); text-decoration:none; } + footer a:hover { text-decoration:underline; } + """ + + def set_index(label, meta): + meta_html = f'
' if meta else '' + return f""" + + + +