doxygen.yml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. name: Generate Documentation
  2. on:
  3. # push:
  4. # branches: [ master, main ]
  5. # paths:
  6. # - 'src/**'
  7. # - 'extras/**'
  8. # - '.github/workflows/doxygen.yml'
  9. # pull_request:
  10. # branches: [ master, main ]
  11. # paths:
  12. # - 'src/**'
  13. # - 'extras/**'
  14. # - '.github/workflows/doxygen.yml'
  15. workflow_dispatch:
  16. jobs:
  17. documentation:
  18. name: Generate Doxygen Documentation
  19. runs-on: ubuntu-latest
  20. steps:
  21. - name: Checkout repository
  22. uses: actions/checkout@v4
  23. - name: Install Doxygen
  24. run: |
  25. sudo apt-get update
  26. sudo apt-get install -y doxygen graphviz
  27. - name: Verify Doxygen installation
  28. run: |
  29. doxygen --version
  30. dot -V
  31. - name: Create Doxyfile configuration
  32. run: |
  33. cat > Doxyfile << 'EOF'
  34. # Doxyfile for TaskScheduler Library
  35. # Project information
  36. PROJECT_NAME = "TaskScheduler"
  37. PROJECT_NUMBER = "v4.0.0"
  38. PROJECT_BRIEF = "Cooperative multitasking for Arduino and ESP platforms"
  39. PROJECT_LOGO =
  40. # Output configuration
  41. OUTPUT_DIRECTORY = ./doc
  42. CREATE_SUBDIRS = YES
  43. ALLOW_UNICODE_NAMES = NO
  44. # Build configuration
  45. EXTRACT_ALL = YES
  46. EXTRACT_PRIVATE = YES
  47. EXTRACT_PRIV_VIRTUAL = YES
  48. EXTRACT_PACKAGE = YES
  49. EXTRACT_STATIC = YES
  50. EXTRACT_LOCAL_CLASSES = YES
  51. EXTRACT_LOCAL_METHODS = YES
  52. EXTRACT_ANON_NSPACES = YES
  53. # Input configuration
  54. INPUT = ./src
  55. INPUT_ENCODING = UTF-8
  56. FILE_PATTERNS = *.h *.hpp *.cpp *.c
  57. RECURSIVE = YES
  58. EXCLUDE =
  59. EXCLUDE_SYMLINKS = NO
  60. EXCLUDE_PATTERNS =
  61. EXCLUDE_SYMBOLS =
  62. # Source browsing
  63. SOURCE_BROWSER = YES
  64. INLINE_SOURCES = NO
  65. STRIP_CODE_COMMENTS = YES
  66. REFERENCED_BY_RELATION = YES
  67. REFERENCES_RELATION = YES
  68. REFERENCES_LINK_SOURCE = YES
  69. SOURCE_TOOLTIPS = YES
  70. USE_HTAGS = NO
  71. VERBATIM_HEADERS = YES
  72. # Alphabetical class index
  73. ALPHABETICAL_INDEX = YES
  74. COLS_IN_ALPHA_INDEX = 5
  75. IGNORE_PREFIX =
  76. # HTML output
  77. GENERATE_HTML = YES
  78. HTML_OUTPUT = html
  79. HTML_FILE_EXTENSION = .html
  80. HTML_HEADER =
  81. HTML_FOOTER =
  82. HTML_STYLESHEET =
  83. HTML_EXTRA_STYLESHEET =
  84. HTML_EXTRA_FILES =
  85. HTML_COLORSTYLE_HUE = 220
  86. HTML_COLORSTYLE_SAT = 100
  87. HTML_COLORSTYLE_GAMMA = 80
  88. HTML_TIMESTAMP = YES
  89. HTML_DYNAMIC_MENUS = YES
  90. HTML_DYNAMIC_SECTIONS = NO
  91. HTML_INDEX_NUM_ENTRIES = 100
  92. GENERATE_DOCSET = NO
  93. GENERATE_HTMLHELP = NO
  94. GENERATE_QHP = NO
  95. GENERATE_ECLIPSEHELP = NO
  96. DISABLE_INDEX = NO
  97. GENERATE_TREEVIEW = YES
  98. ENUM_VALUES_PER_LINE = 4
  99. TREEVIEW_WIDTH = 250
  100. EXT_LINKS_IN_WINDOW = NO
  101. FORMULA_FONTSIZE = 10
  102. FORMULA_TRANSPARENT = YES
  103. USE_MATHJAX = NO
  104. SEARCHENGINE = YES
  105. SERVER_BASED_SEARCH = NO
  106. EXTERNAL_SEARCH = NO
  107. SEARCHENGINE_URL =
  108. SEARCHDATA_FILE = searchdata.xml
  109. EXTERNAL_SEARCH_ID =
  110. EXTRA_SEARCH_MAPPINGS =
  111. # LaTeX output (disabled)
  112. GENERATE_LATEX = NO
  113. # RTF output (disabled)
  114. GENERATE_RTF = NO
  115. # Man page output (disabled)
  116. GENERATE_MAN = NO
  117. # XML output (disabled)
  118. GENERATE_XML = NO
  119. # DOCBOOK output (disabled)
  120. GENERATE_DOCBOOK = NO
  121. # AutoGen output (disabled)
  122. GENERATE_AUTOGEN_DEF = NO
  123. # Perl module output (disabled)
  124. GENERATE_PERLMOD = NO
  125. # Preprocessor configuration
  126. ENABLE_PREPROCESSING = YES
  127. MACRO_EXPANSION = YES
  128. EXPAND_ONLY_PREDEF = NO
  129. SEARCH_INCLUDES = YES
  130. INCLUDE_PATH = ./src
  131. INCLUDE_FILE_PATTERNS =
  132. PREDEFINED = ARDUINO=300 \
  133. __TASK_INLINE=inline \
  134. _TASK_SLEEP_ON_IDLE_RUN \
  135. _TASK_STATUS_REQUEST \
  136. _TASK_WDT_IDS \
  137. _TASK_LTS_POINTER \
  138. _TASK_PRIORITY \
  139. _TASK_WDT_IDS \
  140. _TASK_TIMECRITICAL \
  141. _TASK_SCHEDULING_OPTIONS \
  142. _TASK_TIMEOUT \
  143. _TASK_OO_CALLBACKS \
  144. _TASK_DEBUG \
  145. _TASK_SELF_DESTRUCT \
  146. _TASK_STD_FUNCTION \
  147. _TASK_THREAD_SAFE \
  148. _TASK_EXPOSE_CHAIN
  149. EXPAND_AS_DEFINED =
  150. SKIP_FUNCTION_MACROS = YES
  151. # External references
  152. TAGFILES =
  153. GENERATE_TAGFILE =
  154. ALLEXTERNALS = NO
  155. EXTERNAL_GROUPS = YES
  156. EXTERNAL_PAGES = YES
  157. # Dot tool configuration
  158. CLASS_DIAGRAMS = YES
  159. MSCGEN_PATH =
  160. DIA_PATH =
  161. HIDE_UNDOC_RELATIONS = YES
  162. HAVE_DOT = YES
  163. DOT_NUM_THREADS = 0
  164. DOT_FONTNAME = Helvetica
  165. DOT_FONTSIZE = 10
  166. DOT_FONTPATH =
  167. CLASS_GRAPH = YES
  168. COLLABORATION_GRAPH = YES
  169. GROUP_GRAPHS = YES
  170. UML_LOOK = NO
  171. UML_LIMIT_NUM_FIELDS = 10
  172. TEMPLATE_RELATIONS = NO
  173. INCLUDE_GRAPH = YES
  174. INCLUDED_BY_GRAPH = YES
  175. CALL_GRAPH = NO
  176. CALLER_GRAPH = NO
  177. GRAPHICAL_HIERARCHY = YES
  178. DIRECTORY_GRAPH = YES
  179. DOT_IMAGE_FORMAT = png
  180. INTERACTIVE_SVG = NO
  181. DOT_PATH =
  182. DOTFILE_DIRS =
  183. MSCFILE_DIRS =
  184. DIAFILE_DIRS =
  185. PLANTUML_JAR_PATH =
  186. PLANTUML_CFG_FILE =
  187. PLANTUML_INCLUDE_PATH =
  188. DOT_GRAPH_MAX_NODES = 50
  189. MAX_DOT_GRAPH_DEPTH = 0
  190. DOT_TRANSPARENT = NO
  191. DOT_MULTI_TARGETS = NO
  192. GENERATE_LEGEND = YES
  193. DOT_CLEANUP = YES
  194. # Configuration options related to warning and progress messages
  195. QUIET = NO
  196. WARNINGS = YES
  197. WARN_IF_UNDOCUMENTED = YES
  198. WARN_IF_DOC_ERROR = YES
  199. WARN_NO_PARAMDOC = NO
  200. WARN_AS_ERROR = NO
  201. WARN_FORMAT = "$file:$line: $text"
  202. WARN_LOGFILE =
  203. EOF
  204. - name: Run Doxygen
  205. run: |
  206. echo "=== Running Doxygen Documentation Generation ==="
  207. doxygen Doxyfile
  208. - name: Add .nojekyll file
  209. run: touch ./doc/html/.nojekyll
  210. - name: Verify documentation generation
  211. run: |
  212. echo "=== Verifying Generated Documentation ==="
  213. if [ -d "./doc/html" ]; then
  214. echo "✓ HTML documentation generated successfully"
  215. echo "Documentation files:"
  216. ls -la ./doc/html/ | head -10
  217. echo "..."
  218. echo "Total files: $(find ./doc/html -type f | wc -l)"
  219. # Check for main files
  220. if [ -f "./doc/html/index.html" ]; then
  221. echo "✓ Main index.html found"
  222. else
  223. echo "✗ Main index.html not found"
  224. exit 1
  225. fi
  226. if [ -f "./doc/html/annotated.html" ]; then
  227. echo "✓ Class list found"
  228. else
  229. echo "✗ Class list not found"
  230. fi
  231. # Check documentation size
  232. doc_size=$(du -sh ./doc/html | cut -f1)
  233. echo "Documentation size: $doc_size"
  234. else
  235. echo "✗ Documentation generation failed - no output directory found"
  236. exit 1
  237. fi
  238. - name: Upload documentation artifacts
  239. uses: actions/upload-artifact@v4
  240. with:
  241. name: doxygen-documentation
  242. path: ./doc/
  243. retention-days: 30
  244. - name: Deploy to GitHub Pages
  245. if: github.ref == 'refs/heads/master'
  246. uses: peaceiris/actions-gh-pages@v3
  247. with:
  248. deploy_key: ${{ secrets.DEPLOY_KEY }}
  249. external_repository: arkhipenko/arkhipenko.github.io
  250. publish_dir: ./doc/html
  251. destination_dir: ts
  252. publish_branch: gh-pages
  253. user_name: 'github-actions[bot]'
  254. user_email: 'github-actions[bot]@users.noreply.github.com'
  255. commit_message: 'Update TaskScheduler documentation'
  256. - name: Create documentation summary
  257. run: |
  258. echo "=== Documentation Generation Summary ===" >> $GITHUB_STEP_SUMMARY
  259. echo "" >> $GITHUB_STEP_SUMMARY
  260. echo "**Documentation successfully generated!**" >> $GITHUB_STEP_SUMMARY
  261. echo "" >> $GITHUB_STEP_SUMMARY
  262. echo "- 📁 Output directory: \`./doc/html/\`" >> $GITHUB_STEP_SUMMARY
  263. echo "- 📄 Main entry point: \`./doc/html/index.html\`" >> $GITHUB_STEP_SUMMARY
  264. echo "- 📊 Total files: $(find ./doc/html -type f | wc -l)" >> $GITHUB_STEP_SUMMARY
  265. echo "- 💾 Documentation size: $(du -sh ./doc/html | cut -f1)" >> $GITHUB_STEP_SUMMARY
  266. echo "" >> $GITHUB_STEP_SUMMARY
  267. if [ "${{ github.event_name }}" = "push" ] && [ "${{ github.ref }}" = "refs/heads/master" ]; then
  268. echo "- 🚀 **Deployed to:** https://arkhipenko.github.io/TaskScheduler/" >> $GITHUB_STEP_SUMMARY
  269. echo "" >> $GITHUB_STEP_SUMMARY
  270. fi
  271. echo "**Key Documentation Pages:**" >> $GITHUB_STEP_SUMMARY
  272. echo "- 📋 [Class Index](./doc/html/annotated.html)" >> $GITHUB_STEP_SUMMARY
  273. echo "- 📁 [File Index](./doc/html/files.html)" >> $GITHUB_STEP_SUMMARY
  274. echo "- 🔍 [Search](./doc/html/search.html)" >> $GITHUB_STEP_SUMMARY
  275. echo "" >> $GITHUB_STEP_SUMMARY
  276. echo "*Documentation artifacts have been uploaded and are available for download.*" >> $GITHUB_STEP_SUMMARY