summaryrefslogtreecommitdiff
path: root/.github/workflows/doxygen.yml
blob: c1c156f5891c1afcd84df513e959a4f4bdc808cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
name: Generate and Deploy Documentation

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
  workflow_dispatch:  # Allow manual triggering

permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  generate-docs:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4
      with:
        submodules: recursive

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.9'

    - name: Install system dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y doxygen graphviz ghostscript

    - name: Install Python dependencies
      run: |
        python -m pip install --upgrade pip
        pip install jinja2 Pygments

    - name: Clone m.css
      run: |
        git clone https://github.com/mosra/m.css.git

    - name: Prepare m.css stylesheets
      run: |
        # Compile m.css stylesheets
        cd m.css/css
        python3 -m pip install rcssmin
        python3 ../documentation/css.py
        cd ../..

    - name: Generate Doxyfile
      run: |
        doxygen -g Doxyfile

    - name: Customize Doxyfile
      run: |
        # Project details
        sed -i 's/PROJECT_NAME           = "My Project"/PROJECT_NAME           = "FBGL"/' Doxyfile
        sed -i 's/PROJECT_BRIEF          = /PROJECT_BRIEF          = "Fast and Lightweight Framebuffer Graphics Library"/' Doxyfile
        
        # Output and input configuration
        sed -i 's/OUTPUT_DIRECTORY       = /OUTPUT_DIRECTORY       = docs/' Doxyfile
        sed -i 's/INPUT                  = /INPUT                  = fbgl.h README.md/' Doxyfile
        sed -i 's/RECURSIVE              = NO/RECURSIVE              = YES/' Doxyfile
        
        # Documentation generation options
        sed -i 's/GENERATE_HTML          = NO/GENERATE_HTML          = YES/' Doxyfile
        sed -i 's/HAVE_DOT               = NO/HAVE_DOT               = YES/' Doxyfile
        sed -i 's/DOT_IMAGE_FORMAT       = png/DOT_IMAGE_FORMAT       = svg/' Doxyfile
        
        # m.css and additional configurations
        echo "HTML_EXTRA_STYLESHEET  = $GITHUB_WORKSPACE/m.css/css/m-dark.compiled.css $GITHUB_WORKSPACE/m.css/css/m-documentation.compiled.css" >> Doxyfile
        echo "GENERATE_LATEX         = NO" >> Doxyfile
        echo "INTERACTIVE_SVG        = YES" >> Doxyfile
        echo "EXTRACT_ALL            = YES" >> Doxyfile
        echo "EXTRACT_PRIVATE        = NO" >> Doxyfile
        echo "CASE_SENSE_NAMES       = NO" >> Doxyfile
        echo "SEARCHENGINE           = YES" >> Doxyfile
        echo "USE_MDFILE_AS_MAINPAGE = README.md" >> Doxyfile
        echo "MARKDOWN_SUPPORT       = YES" >> Doxyfile

    - name: Generate Documentation with Doxygen
      run: |
        doxygen Doxyfile

    - name: Process Documentation with m.css
      run: |
        python m.css/documentation/doxygen.py Doxyfile
      continue-on-error: true  # Allow workflow to continue if m.css processing fails

    - name: Ensure Documentation Exists
      run: |
        # Fallback if m.css processing fails
        [ -d "docs/html" ] || mkdir -p docs/html
        [ -f "docs/html/index.html" ] || echo "<html><body>Documentation generation failed</body></html>" > docs/html/index.html

    - name: Setup GitHub Pages
      uses: actions/configure-pages@v3

    - name: Upload Documentation Artifact
      uses: actions/upload-pages-artifact@v2
      with:
        path: './docs/html'

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: generate-docs
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v2