Skip to content

Commit 5a5a92d

Browse files
committed
github-pages documentation
1 parent 33d180c commit 5a5a92d

File tree

8 files changed

+259
-0
lines changed

8 files changed

+259
-0
lines changed

.github/workflows/docs.yml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: Build Documentation
2+
3+
on:
4+
release:
5+
types: [published]
6+
workflow_dispatch:
7+
pull_request: # TODO
8+
9+
jobs:
10+
build:
11+
name: Build documentation
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
with:
17+
fetch-depth: 0
18+
- name: Setup Temurin JDK 21
19+
uses: actions/setup-java@v5
20+
with:
21+
distribution: temurin
22+
java-version: '21'
23+
cache: maven
24+
- name: Install uv
25+
uses: astral-sh/setup-uv@v7
26+
- name: Install just
27+
run: sudo apt install -y just
28+
- name: Build documentation
29+
run: cd docs && just all
30+
- name: Upload pages artifact
31+
id: deployment
32+
uses: actions/upload-pages-artifact@v3
33+
with:
34+
path: 'docs/target/site/'
35+
deploy:
36+
needs: build
37+
permissions:
38+
pages: write
39+
id-token: write
40+
environment:
41+
name: github-pages
42+
url: ${{ steps.deployment.outputs.page_url }}
43+
runs-on: ubuntu-latest
44+
steps:
45+
- name: Deploy to GitHub Pages
46+
id: deployment
47+
uses: actions/deploy-pages@v4

docs/common.css

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#lz4-header .dropdown {
2+
position: absolute;
3+
display: none;
4+
width: auto;
5+
right: 0;
6+
}
7+
#lz4-header:hover .dropdown {
8+
display: block;
9+
}
10+
#lz4-header .dropdown li {
11+
display: block;
12+
float: left;
13+
clear: both;
14+
}
15+
#lz4-header .selected {
16+
font-weight: bold;
17+
}

docs/header-javadoc.html.jinja

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{% set version_root = '{@docroot}/..' %}{% include "header.html.jinja" %}

docs/header.html.jinja

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<ul id="lz4-header" class="nav-list">
2+
{% if selected_version != latest_version_name and selected_version != latest_version %}
3+
<li class="outdated"><span>Outdated Version!</span></li>
4+
{% endif %}
5+
<li><a href="{{ version_root }}">Readme</a></li>
6+
<li><a href="{{ version_root }}/{{ path_javadoc }}">Javadoc</a></li>
7+
<li><a href="https://github.com/yawkat/lz4-java{% if selected_version != latest_version_name %}/releases/tag/{{ selected_version_actual }}{% endif %}">GitHub</a></li>
8+
<li>
9+
<span>{{ selected_version }} ▼</span>
10+
<ul class="dropdown">
11+
{% for v in all_versions %}
12+
<li>
13+
{% if v == selected_version %}<span class="selected">{{ v }}</span>
14+
{% else %}<a href="REWRITE_PATH_{{ v }}">{{ v }}</a>{% endif %}
15+
16+
{% if v == latest_version %}
17+
{% if latest_version_name == selected_version %}(<span class="selected">{{ latest_version_name }}</span>)
18+
{% else %}(<a href="REWRITE_PATH_{{ latest_version_name }}">{{ latest_version_name }}</a>){% endif %}
19+
{% endif %}
20+
</li>
21+
{% endfor %}
22+
</ul>
23+
</li>
24+
</ul>

docs/index.html.jinja

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<title>lz4-java {% if selected_version == latest_version_name %}{{ latest_version }}{% else %}{{ selected_version }}{% endif %}</title>
7+
<link rel="stylesheet" href="../common.css"/>
8+
<link rel="stylesheet" href="../markdown.css"/>
9+
<style>{{ pygments_style() }}</style>
10+
</head>
11+
<body>
12+
{% set version_root = '.' %}
13+
{% include "header.html.jinja" %}
14+
{{ readme()|safe }}
15+
</body>
16+
</html>

docs/javadoc.css

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#lz4-header .dropdown {
2+
background: var(--navbar-background-color);
3+
z-index: 9999;
4+
margin: 0;
5+
padding: 1em 0 0 0;
6+
}
7+
.about-language {
8+
padding: 0 !important;
9+
margin-top: 0 !important;
10+
font-size: inherit !important;
11+
height: auto !important;
12+
}
13+
#lz4-header .outdated {
14+
background-color: var(--selected-background-color);
15+
color: var(--selected-text-color);
16+
}

docs/justfile

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
all_versions := `git tag --list 'v*' | tr '\n' ' '`
2+
latest_version := `git describe --tags --match='v*'`
3+
4+
build := "target"
5+
path_javadoc := "javadoc"
6+
latest_version_name := "current"
7+
8+
repo TAG:
9+
rm -rf '{{build}}/repo/lz4-java-{{TAG}}'
10+
if [ '{{TAG}}' = '{{latest_version_name}}' ]; then ln -s ../../.. '{{build}}/repo/lz4-java-{{TAG}}'; else git clone --shared --branch='{{TAG}}' .. '{{build}}/repo/lz4-java-{{TAG}}'; fi
11+
12+
template NAME TAG: (repo TAG)
13+
#!/usr/bin/env -S uv run --script
14+
# /// script
15+
# dependencies = [
16+
# "semver",
17+
# "mistune",
18+
# "pygments",
19+
# "Jinja2"
20+
# ]
21+
# ///
22+
import semver
23+
import mistune
24+
import os
25+
import pygments
26+
import pygments.lexers
27+
import pygments.formatters
28+
from jinja2 import Environment, FileSystemLoader, select_autoescape
29+
env = Environment(loader=FileSystemLoader("."), autoescape=True)
30+
31+
semantic_versions = '{{all_versions}}'.split()
32+
semantic_versions.sort(reverse=True, key=lambda v: semver.VersionInfo.parse(v[1:]))
33+
34+
selected_version_actual = '{{TAG}}' if '{{TAG}}' != '{{latest_version_name}}' else '{{latest_version}}'
35+
36+
html_formatter = pygments.formatters.HtmlFormatter(lineseparator="<br>")
37+
class PygmentsRenderer(mistune.HTMLRenderer):
38+
def block_code(self, code, info=None):
39+
if info:
40+
lang = info.split(None, 1)[0]
41+
else:
42+
lang = None
43+
if lang:
44+
return pygments.highlight(code, pygments.lexers.get_lexer_by_name(lang), html_formatter)
45+
else:
46+
return super().block_code(code, lang)
47+
48+
try:
49+
os.makedirs('{{build}}/templates/{{TAG}}')
50+
except:
51+
pass
52+
with open('{{build}}/templates/{{TAG}}/{{ NAME }}', 'w') as f:
53+
f.write(env.get_template("{{ NAME }}.jinja").render(
54+
all_versions=semantic_versions,
55+
latest_version='{{latest_version}}',
56+
latest_version_name='{{latest_version_name}}',
57+
selected_version='{{TAG}}',
58+
selected_version_actual=selected_version_actual,
59+
path_javadoc='{{path_javadoc}}',
60+
readme=lambda: mistune.create_markdown(renderer=PygmentsRenderer())(open('{{build}}/repo/lz4-java-{{TAG}}/README.md').read()),
61+
pygments_style=lambda: html_formatter.get_style_defs()
62+
))
63+
64+
#[arg('TAG', pattern='v\d+\.\d+\.\d+')]
65+
javadoc TAG: (template "header-javadoc.html" TAG)
66+
header=$(cat '{{build}}/templates/{{TAG}}/header-javadoc.html') && cd '{{build}}/repo/lz4-java-{{TAG}}' && ./mvnw javadoc:javadoc "-Dheader=$header"
67+
mkdir -p '{{build}}/site/{{TAG}}'
68+
cp -rf '{{build}}/repo/lz4-java-{{TAG}}/target/site/apidocs' '{{build}}/site/{{TAG}}/{{path_javadoc}}'
69+
70+
version TAG: (javadoc TAG) (template "index.html" TAG)
71+
cp -f '{{build}}/templates/{{TAG}}/index.html' '{{build}}/site/{{TAG}}/index.html'
72+
73+
rewrite-version-links:
74+
#!/usr/bin/env -S uv run --script
75+
# /// script
76+
# ///
77+
import pathlib
78+
79+
root = pathlib.Path("target/site")
80+
for p in root.glob("**/*.html"):
81+
to_root = root.relative_to(p.parent, walk_up=True)
82+
83+
html = p.read_text()
84+
for v in ['{{latest_version_name}}'] + '{{all_versions}}'.split():
85+
# walk up to root, enter the new version, then walk back down to same path.
86+
new_parts = [*to_root.parts, v, *p.relative_to(root).parts[1:]]
87+
if new_parts[-1] == 'index.html':
88+
new_parts[-1] = ''
89+
html = html.replace('REWRITE_PATH_' + v, str(pathlib.Path(*new_parts)))
90+
if '{{path_javadoc}}' in p.relative_to(root).parts:
91+
html = html.replace('</title>', '</title><link rel="stylesheet" href="' + str(to_root) + '/common.css"><link rel="stylesheet" href="' + str(to_root) + '/javadoc.css">')
92+
p.write_text(html)
93+
94+
prepare:
95+
rm -rf '{{build}}/site'
96+
mkdir -p '{{build}}/site'
97+
ln -s ../../javadoc.css ../../common.css ../../markdown.css '{{build}}/site'
98+
99+
all: prepare (version latest_version_name) && rewrite-version-links
100+
set -e; for v in {{all_versions}}; do just 'all_versions={{all_versions}}' 'latest_version={{latest_version}}' version "$v"; done

docs/markdown.css

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#lz4-header .dropdown {
2+
padding: 0;
3+
margin: 0;
4+
background: #ddd;
5+
}
6+
7+
body {
8+
max-width: 80em;
9+
font-family: sans-serif;
10+
display: inline-block;
11+
text-align: left;
12+
padding-top: 3em;
13+
}
14+
html {
15+
text-align: center;
16+
}
17+
18+
#lz4-header {
19+
margin: 0;
20+
padding: 0;
21+
background: #ddd;
22+
position: fixed;
23+
max-width: 80em;
24+
width: 100%;
25+
top: 0;
26+
text-align: right;
27+
}
28+
#lz4-header li {
29+
display: inline-block;
30+
}
31+
#lz4-header li > span, #lz4-header li > a {
32+
padding: 0.5em;
33+
display: inline-block;
34+
}
35+
#lz4-header .outdated {
36+
background-color: #aa0000;
37+
color: #fff;
38+
}

0 commit comments

Comments
 (0)