diff --git a/.gitignore b/.gitignore
index f65b589..09e93dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@
__pycache__/
.mypy_cache/
.pytest_cache/
+docs/dist/
+requirements.txt
diff --git a/README.md b/README.md
index 2927e16..8dfd50c 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
# microblog.pub
[![builds.sr.ht status](https://builds.sr.ht/~tsileo/microblog.pub.svg)](https://builds.sr.ht/~tsileo/microblog.pub?)
+[![AGPL 3.0](https://img.shields.io/badge/license-AGPL_3.0-blue.svg?style=flat)](https://git.sr.ht/~tsileo/microblog.pub/tree/v2/item/LICENSE)
This branch is a complete rewrite of the original microblog.pub server.
diff --git a/docs/templates/layout.html b/docs/templates/layout.html
new file mode 100644
index 0000000..272a059
--- /dev/null
+++ b/docs/templates/layout.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+ {{ content | safe }}
+
+
+
+
+
diff --git a/scripts/generate_docs.py b/scripts/generate_docs.py
new file mode 100644
index 0000000..3126516
--- /dev/null
+++ b/scripts/generate_docs.py
@@ -0,0 +1,28 @@
+from pathlib import Path
+
+from jinja2 import Environment
+from jinja2 import FileSystemLoader
+from jinja2 import select_autoescape
+from markdown import markdown
+
+
+def markdownify(content: str) -> str:
+ return markdown(content, extensions=["mdx_linkify"])
+
+
+def main() -> None:
+ # Setup Jinja
+ loader = FileSystemLoader("docs/templates")
+ env = Environment(loader=loader, autoescape=select_autoescape())
+ template = env.get_template("layout.html")
+
+ Path("docs/dist").mkdir(exist_ok=True)
+
+ readme = Path("README.md")
+ template.stream(
+ content=markdownify(readme.read_text().removeprefix("# microblog.pub"))
+ ).dump("docs/dist/index.html")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tasks.py b/tasks.py
index 5f709d2..3a71423 100644
--- a/tasks.py
+++ b/tasks.py
@@ -73,6 +73,28 @@ def tests(ctx, k=None):
)
+@task
+def generate_requirements_txt(ctx, where="requirements.txt"):
+ # type: (Context, str) -> None
+ run(
+ f"poetry export -f requirements.txt --without-hashes > {where}",
+ pty=True,
+ echo=True,
+ )
+
+
+@task(generate_requirements_txt)
+def build_configuration_wizard_image(ctx):
+ # type: (Context) -> None
+ run("docker build -t testmpw -f configuration_wizard.dockerfile .")
+
+
+@task
+def build_docs(ctx):
+ # type: (Context) -> None
+ run("poetry run python scripts/generate_docs.py", pty=True, echo=True)
+
+
@task
def download_twemoji(ctx):
# type: (Context) -> None