diff --git a/.github/workflows/manpages.yml b/.github/workflows/manpages.yml index fc5dae14f7d..45d648193d5 100644 --- a/.github/workflows/manpages.yml +++ b/.github/workflows/manpages.yml @@ -6,9 +6,6 @@ on: - "Base/usr/share/man/**" - "Meta/Websites/man.serenityos.org/**" -env: - MAN_DIR: ${{ github.workspace }}/Base/usr/share/man/ - jobs: convert_using_pandoc: runs-on: ubuntu-20.04 @@ -18,48 +15,8 @@ jobs: - uses: r-lib/actions/setup-pandoc@v1 with: pandoc-version: '2.13' - - name: Prepare output directories - run: | - for d in $MAN_DIR*/; do - dir_name=$(basename "$d") - section="${dir_name/man}" - mkdir -p "output/${section}" - done - - name: Convert markdown to html - run: | - cat << EOF > link-fixup.lua - function Link(el) - el.target = string.gsub(el.target, "%.md", ".html") -- fixup .md to .html links - el.target = string.gsub(el.target, "man", "", 1) -- fixup man1/???.html to 1/???.html links - return el - end - EOF - find $MAN_DIR -iname '*.md' -type f -exec sh -c '\ - relative_path="$(realpath --relative-to=$MAN_DIR $0)" \ - && stripped_path="${relative_path#man}" \ - && section="${stripped_path%%/*}" \ - && filename="${stripped_path#*/}" \ - && name="${filename%.md}" \ - && pandoc -f gfm -t html5 -s --lua-filter=link-fixup.lua --metadata title="${name}(${section}) - SerenityOS man pages" -o "output/${section}/${name}.html" "${0}" \ - ' {} \; - - name: Generate man page listings - run: | - for d in output/*/; do - section=$(basename "$d") - echo "
${name}(${section})
" >> "${d}/index.html" - done - echo "" >> "$d/index.html" - done - - name: Copy pre-made files - run: | - cp -R Meta/Websites/man.serenityos.org/* output/ + - name: Actually build website + run: ./Meta/build-manpages-website.sh - name: Deploy to GitHub pages uses: JamesIves/github-pages-deploy-action@4.1.1 with: diff --git a/.gitignore b/.gitignore index b68451ece12..e67af6a4682 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ compile_commands.json .clangd .idea/ cmake-build-debug/ +output/ run-local.sh sync-local.sh .vim/ diff --git a/Meta/build-manpages-website.sh b/Meta/build-manpages-website.sh new file mode 100755 index 00000000000..8074012472b --- /dev/null +++ b/Meta/build-manpages-website.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# shellcheck disable=SC1004 # literal backslash+linefeed is intended + +set -e + +script_path=$(cd -P -- "$(dirname -- "$0")" && pwd -P) +cd "${script_path}/.." + +export LC_ALL=C # Make the directory order reproducible +export MAN_DIR=Base/usr/share/man/ + +if [[ -e output ]]; then + echo "Directory 'output/' already exists. Delete it first." + exit 1 +fi + +# Prepare output directories +for d in "${MAN_DIR}"*/; do + dir_name=$(basename "$d") + section="${dir_name/man}" + mkdir -p "output/${section}" +done + +# Convert markdown to html + +# If you're here because your local results are different from the website: +# Check that your pandoc version matches the pandoc-version specified in manpages.yaml. + +find "${MAN_DIR}" -iname '*.md' -type f -exec sh -c '\ + relative_path="$(realpath --relative-to="${MAN_DIR}" $0)" \ + && stripped_path="${relative_path#man}" \ + && section="${stripped_path%%/*}" \ + && filename="${stripped_path#*/}" \ + && name="${filename%.md}" \ + && pandoc -f gfm -t html5 -s --lua-filter=Meta/convert-markdown-links.lua --metadata title="${name}(${section}) - SerenityOS man pages" -o "output/${section}/${name}.html" "${0}" \ +' {} \; + +# Generate man page listings +for d in output/*/; do + section=$(basename "$d") + echo "${name}(${section})
" >> "${d}/index.html" + done + echo "" >> "$d/index.html" +done + +# Copy pre-made files +cp -R Meta/Websites/man.serenityos.org/* output/ diff --git a/Meta/convert-markdown-links.lua b/Meta/convert-markdown-links.lua new file mode 100644 index 00000000000..0f960e5656d --- /dev/null +++ b/Meta/convert-markdown-links.lua @@ -0,0 +1,5 @@ +function Link(el) + el.target = string.gsub(el.target, "%.md", ".html") -- change .md to .html links + el.target = string.gsub(el.target, "man", "", 1) -- change man1/???.html to 1/???.html links + return el +end