Use the badge from the project itself. Rely on the API to build the document
This commit is contained in:
@@ -2,54 +2,92 @@
|
||||
|
||||
from pathlib import Path
|
||||
import argparse
|
||||
import os
|
||||
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
from gitlab import Gitlab
|
||||
|
||||
|
||||
REPOSITORY_PATH = Path(__file__).parent.parent
|
||||
|
||||
# Argument parsing.
|
||||
parser = argparse.ArgumentParser(prog="Seafile Docker client documentation renderer")
|
||||
parser.add_argument("template", type=str)
|
||||
args = parser.parse_args()
|
||||
class DocumentMaker:
|
||||
|
||||
# Setup Jinja2 templater
|
||||
documentations_path = REPOSITORY_PATH.joinpath("documentations")
|
||||
loader = FileSystemLoader(documentations_path)
|
||||
environment = Environment(loader=loader)
|
||||
template = environment.get_template(args.template)
|
||||
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)
|
||||
|
||||
|
||||
buffer=[]
|
||||
for path in Path("versions").iterdir():
|
||||
with open(path, "rt") as fo:
|
||||
buffer.append(fo.read().strip())
|
||||
buffer.sort(reverse=True)
|
||||
def get_badges(self):
|
||||
badges = self.project.badges.list()
|
||||
|
||||
# Prepare the render context.
|
||||
latest = True
|
||||
versions = []
|
||||
for line in buffer:
|
||||
version = line.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
|
||||
versions.append(blocks)
|
||||
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
|
||||
|
||||
# Render
|
||||
# TODO: read and adapt the CHANGELOG and insert into the render.
|
||||
content = template.render(versions=versions)
|
||||
#content = template.render() # When version/ is unavailable.
|
||||
filename = Path(args.template).with_suffix("")
|
||||
document = documentations_path.joinpath(filename)
|
||||
|
||||
# Write to file
|
||||
with open(document, mode="w") as fo:
|
||||
fo.write(content)
|
||||
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()
|
||||
Reference in New Issue
Block a user