rust/util/versions.py

53 lines
1.3 KiB
Python
Executable File

#!/usr/bin/env python
from string import Template
import argparse
import json
import os
import sys
def key(v):
if v == "master":
return sys.maxsize
if v == "stable":
return sys.maxsize - 1
if v == "beta":
return sys.maxsize - 2
if v == "pre-1.29.0":
return -1
if not v.startswith("rust-"):
return None
v = v.replace("rust-", "")
s = 0
for i, val in enumerate(v.split(".")[::-1]):
s += int(val) * 100**i
return s
def main():
parser = argparse.ArgumentParser()
parser.add_argument("input", help="path to the versions.html template", type=argparse.FileType("r"))
parser.add_argument("outdir", help="path to write the output HTML")
args = parser.parse_args()
versions = [
dir
for dir in os.listdir(args.outdir)
if key(dir) is not None
]
versions.sort(key=key, reverse=True)
links = [f'<a class="list-group-item" href="./{version}/index.html">{version}</a>' for version in versions]
template = Template(args.input.read())
html = template.substitute(list="\n".join(links))
path = os.path.join(args.outdir, "index.html")
with open(path, "w") as out:
out.write(html)
print(f"wrote HTML to {path}")
if __name__ == "__main__":
main()