Files
docker-seafile-client/scripts/make-documents.py

93 lines
2.8 KiB
Python
Executable File

# !/usr/bin/env python
from pathlib import Path
import argparse
import os
from jinja2 import Environment, FileSystemLoader
from gitlab import Gitlab
REPOSITORY_PATH = Path(__file__).parent.parent
class DocumentMaker:
def __init__(self, filename: str) -> None:
# Intanciate the Jinja2 renderer.
self.directory = REPOSITORY_PATH.joinpath("documentations")
loader = FileSystemLoader(self.directory)
environment = Environment(loader=loader)
self.filename = filename
self.template = environment.get_template(filename)
# Instanciate the Gitlab session.
gitlab_project_id=os.environ["CI_PROJECT_ID"]
gitlab_private_token=os.environ["WEEKLY_BUILD_PRIVATE_TOKEN"]
self.gitlab = Gitlab(private_token=gitlab_private_token)
self.project = self.gitlab.projects.get(gitlab_project_id)
self.versions = []
self.badges = {}
def get_versions(self):
versions = []
for path in Path("versions").iterdir():
with open(path, "rt") as fo:
versions.append(fo.read().strip())
versions.sort(reverse=True)
# Prepare the render context.
latest = True
self.versions = []
for version in versions:
version = version.strip()
parts = version.split(".")
increments = []
blocks = []
for part in parts:
increments.append(part)
section = ".".join(increments)
blocks.append(f"`{section}`")
if latest:
blocks.append("`latest`")
latest = False
self.versions.append(blocks)
def get_badges(self):
badges = self.project.badges.list()
for badge in badges:
name = badge.name
link = badge.rendered_link_url
image = badge.rendered_image_url
links = {"link": link, "image": image}
self.badges[name] = links
def render(self):
# Render
# TODO: read and adapt the CHANGELOG and insert into the render.
content = self.template.render(versions=self.versions, badges=self.badges)
#content = template.render() # When version/ is unavailable.
filename = Path(self.filename).with_suffix("")
path = self.directory.joinpath(filename)
# Write to file
with open(path, mode="w") as fo:
fo.write(content)
if __name__ == "__main__":
# Argument parsing.
parser = argparse.ArgumentParser(prog="Seafile Docker client documentation renderer")
parser.add_argument("template", type=str)
args = parser.parse_args()
maker = DocumentMaker(args.template)
maker.get_versions()
maker.get_badges()
maker.render()