Skip to content

Generate Documentation #11

Generate Documentation

Generate Documentation #11

Workflow file for this run

name: Generate Documentation
on:
# push:
# branches: [ master, main ]
# paths:
# - 'src/**'
# - 'extras/**'
# - '.github/workflows/doxygen.yml'
# pull_request:
# branches: [ master, main ]
# paths:
# - 'src/**'
# - 'extras/**'
# - '.github/workflows/doxygen.yml'
workflow_dispatch:
jobs:
documentation:
name: Generate Doxygen Documentation
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Doxygen
run: |
sudo apt-get update
sudo apt-get install -y doxygen graphviz
- name: Verify Doxygen installation
run: |
doxygen --version
dot -V
- name: Create Doxyfile configuration
run: |
cat > Doxyfile << 'EOF'
# Doxyfile for TaskScheduler Library
# Project information
PROJECT_NAME = "TaskScheduler"
PROJECT_NUMBER = "v4.0.0"
PROJECT_BRIEF = "Cooperative multitasking for Arduino and ESP platforms"
PROJECT_LOGO =
# Output configuration
OUTPUT_DIRECTORY = ./doc
CREATE_SUBDIRS = YES
ALLOW_UNICODE_NAMES = NO
# Build configuration
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_PRIV_VIRTUAL = YES
EXTRACT_PACKAGE = YES
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = YES
EXTRACT_ANON_NSPACES = YES
# Input configuration
INPUT = ./src
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.h *.hpp *.cpp *.c
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
# Source browsing
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
# Alphabetical class index
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
# HTML output
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_EXTRA_STYLESHEET =
HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES
HTML_DYNAMIC_MENUS = YES
HTML_DYNAMIC_SECTIONS = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET = NO
GENERATE_HTMLHELP = NO
GENERATE_QHP = NO
GENERATE_ECLIPSEHELP = NO
DISABLE_INDEX = NO
GENERATE_TREEVIEW = YES
ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
USE_MATHJAX = NO
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
EXTERNAL_SEARCH = NO
SEARCHENGINE_URL =
SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
EXTRA_SEARCH_MAPPINGS =
# LaTeX output (disabled)
GENERATE_LATEX = NO
# RTF output (disabled)
GENERATE_RTF = NO
# Man page output (disabled)
GENERATE_MAN = NO
# XML output (disabled)
GENERATE_XML = NO
# DOCBOOK output (disabled)
GENERATE_DOCBOOK = NO
# AutoGen output (disabled)
GENERATE_AUTOGEN_DEF = NO
# Perl module output (disabled)
GENERATE_PERLMOD = NO
# Preprocessor configuration
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH = ./src
INCLUDE_FILE_PATTERNS =
PREDEFINED = ARDUINO=300 \
__TASK_INLINE=inline \
_TASK_SLEEP_ON_IDLE_RUN \
_TASK_STATUS_REQUEST \
_TASK_WDT_IDS \
_TASK_LTS_POINTER \
_TASK_PRIORITY \
_TASK_WDT_IDS \
_TASK_TIMECRITICAL \
_TASK_SCHEDULING_OPTIONS \
_TASK_TIMEOUT \
_TASK_OO_CALLBACKS \
_TASK_DEBUG \
_TASK_SELF_DESTRUCT \
_TASK_STD_FUNCTION \
_TASK_THREAD_SAFE \
_TASK_EXPOSE_CHAIN
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
# External references
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES
# Dot tool configuration
CLASS_DIAGRAMS = YES
MSCGEN_PATH =
DIA_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
UML_LIMIT_NUM_FIELDS = 10
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
DIAFILE_DIRS =
PLANTUML_JAR_PATH =
PLANTUML_CFG_FILE =
PLANTUML_INCLUDE_PATH =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
# Configuration options related to warning and progress messages
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_AS_ERROR = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
EOF
- name: Run Doxygen
run: |
echo "=== Running Doxygen Documentation Generation ==="
doxygen Doxyfile
- name: Add .nojekyll file
run: touch ./doc/html/.nojekyll
- name: Verify documentation generation
run: |
echo "=== Verifying Generated Documentation ==="
if [ -d "./doc/html" ]; then
echo "✓ HTML documentation generated successfully"
echo "Documentation files:"
ls -la ./doc/html/ | head -10
echo "..."
echo "Total files: $(find ./doc/html -type f | wc -l)"
# Check for main files
if [ -f "./doc/html/index.html" ]; then
echo "✓ Main index.html found"
else
echo "✗ Main index.html not found"
exit 1
fi
if [ -f "./doc/html/annotated.html" ]; then
echo "✓ Class list found"
else
echo "✗ Class list not found"
fi
# Check documentation size
doc_size=$(du -sh ./doc/html | cut -f1)
echo "Documentation size: $doc_size"
else
echo "✗ Documentation generation failed - no output directory found"
exit 1
fi
- name: Upload documentation artifacts
uses: actions/upload-artifact@v4
with:
name: doxygen-documentation
path: ./doc/
retention-days: 30
- name: Deploy to GitHub Pages
if: github.ref == 'refs/heads/master'
uses: peaceiris/actions-gh-pages@v3
with:
deploy_key: ${{ secrets.DEPLOY_KEY }}
external_repository: arkhipenko/arkhipenko.github.io
publish_dir: ./doc/html
destination_dir: TaskScheduler
publish_branch: gh-pages
user_name: 'github-actions[bot]'
user_email: 'github-actions[bot]@users.noreply.github.com'
commit_message: 'Update TaskScheduler documentation'
- name: Create documentation summary
run: |
echo "=== Documentation Generation Summary ===" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Documentation successfully generated!**" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- 📁 Output directory: \`./doc/html/\`" >> $GITHUB_STEP_SUMMARY
echo "- 📄 Main entry point: \`./doc/html/index.html\`" >> $GITHUB_STEP_SUMMARY
echo "- 📊 Total files: $(find ./doc/html -type f | wc -l)" >> $GITHUB_STEP_SUMMARY
echo "- 💾 Documentation size: $(du -sh ./doc/html | cut -f1)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ github.event_name }}" = "push" ] && [ "${{ github.ref }}" = "refs/heads/master" ]; then
echo "- 🚀 **Deployed to:** https://arkhipenko.github.io/TaskScheduler/" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
fi
echo "**Key Documentation Pages:**" >> $GITHUB_STEP_SUMMARY
echo "- 📋 [Class Index](./doc/html/annotated.html)" >> $GITHUB_STEP_SUMMARY
echo "- 📁 [File Index](./doc/html/files.html)" >> $GITHUB_STEP_SUMMARY
echo "- 🔍 [Search](./doc/html/search.html)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "*Documentation artifacts have been uploaded and are available for download.*" >> $GITHUB_STEP_SUMMARY