summaryrefslogtreecommitdiff
path: root/.github/workflows/doxygen.yml
blob: f1020b20e915a90240063a75074511c650736579 (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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
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 rcssmin

    - name: Clone m.css with Verbose Output
      run: |
        git clone --verbose https://github.com/mosra/m.css.git
        cd m.css
        ls -R documentation
        pwd

    - name: Prepare m.css stylesheets
      run: |
        cd m.css/css
        
        # Create compiled CSS manually
        echo "/* Minimal CSS fallback */" > m-documentation.compiled.css
        echo "body { font-family: sans-serif; line-height: 1.6; max-width: 800px; margin: 0 auto; padding: 1rem; }" >> m-documentation.compiled.css
        echo "h1, h2 { color: #333; }" >> m-documentation.compiled.css
        echo "pre { background-color: #f4f4f4; padding: 1rem; overflow-x: auto; }" >> m-documentation.compiled.css
        
        echo "/* Minimal dark theme CSS fallback */" > m-dark.compiled.css
        echo "body { background-color: #121212; color: #e0e0e0; }" >> m-dark.compiled.css
        echo "a { color: #4CAF50; }" >> m-dark.compiled.css
        echo "pre { background-color: #1e1e1e; color: #e0e0e0; }" >> m-dark.compiled.css
        
        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 (Robust Strategy)
      shell: bash
      run: |
        set -e  # Exit immediately if a command exits with a non-zero status.
        
        # Debug information
        echo "Python version:"
        python --version
        
        echo "m.css directory contents:"
        ls -R m.css/documentation
        
        # Try m.css processing with comprehensive error handling
        if python m.css/documentation/doxygen.py Doxyfile; then
          echo "M.css processing successful"
        else
          echo "M.css processing failed. Creating fallback documentation."
          
          # Ensure docs/html exists
          mkdir -p docs/html
          
          # Create a detailed fallback index.html
          cat > docs/html/index.html << 'EOF'
          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>FBGL Documentation</title>
              <style>
                  body { font-family: sans-serif; line-height: 1.6; max-width: 800px; margin: 0 auto; padding: 1rem; background-color: #f4f4f4; }
                  h1 { color: #333; border-bottom: 2px solid #666; padding-bottom: 10px; }
                  p { color: #666; }
                  .error { color: #d9534f; font-weight: bold; }
              </style>
          </head>
          <body>
              <h1>FBGL Documentation</h1>
              <p class="error">Documentation generation encountered an issue.</p>
              <p>Possible reasons:</p>
              <ul>
                  <li>M.css processing script failed</li>
                  <li>Doxygen configuration issue</li>
                  <li>Missing dependencies</li>
              </ul>
              <p>Please check the repository and GitHub Actions workflow for more details.</p>
          </body>
          </html>
          EOF
        fi

    - name: List Documentation Contents
      run: |
        echo "Documentation directory contents:"
        ls -R docs/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