Automatically generate documentation for hosting via Github Pages

In addition to the extensive header documentation available lets also have doxygen generate proper HTML for the web.
This commit is contained in:
Xaymar
2025-08-06 02:52:14 +02:00
parent f5779515c2
commit 6a1e5be101
+84
View File
@@ -0,0 +1,84 @@
name: Generate Documentation
on:
push:
branches:
- 'root'
- '!documentation'
paths:
- '.github/workflows/documentation.yml'
- 'LICENSE'
jobs:
docs:
name: "Generate Documentation"
runs-on: ubuntu-latest
steps:
- name: "Set up Git"
shell: bash
run: |
git config --global user.name 'GitHub Actions'
git config --global user.email 'xaymar@users.noreply.github.com'
git config --global pull.ff only
git config --global pull.rebase true
- name: "Clone"
uses: actions/checkout@v3
with:
submodules: 'recursive'
fetch-depth: 0
- name: "Clone Documentation Cache"
id: doc_cache
continue-on-error: true
uses: actions/checkout@v3
with:
ref: 'documentation'
path: 'build/docs/html'
submodules: 'recursive'
fetch-depth: 0
- name: "Initialize Documentation Cache"
if: steps.doc_cache.outcome == 'failure'
shell: bash
run: |
mkdir -p build/docs/html
pushd build/docs/html
git init
git switch --orphan documentation
git remote remove origin
git remote add -t documentation origin ${{ github.repositoryUrl }}
popd
- name: "Install Prerequisites"
shell: bash
run: |
sudo apt-get install -y clang-19 clang-tools-19 doxygen graphviz
- name: "Generate Documentation"
shell: bash
run: |
doxygen Doxyfile
- name: "Update Documentation"
shell: bash
run: |
pushd build/docs/html
git add .
git --no-pager diff --patch --minimal HEAD -- || true
git update-index --refresh
if ! git diff-index --quiet HEAD -- &> /dev/null; then
git commit -a -m "${{ github.sha }}"
# Only push from master branch.
if [[ "${{ github.ref }}" == "refs/heads/root" ]]; then
git push --set-upstream origin documentation
echo "Documentation has been updated!"
else
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
fi
else
echo "Documentation is still up to date."
fi
popd