name: Documentation Validation on: push: branches: [main, develop] paths: - 'docs/**' - '**/*.md' - '.gitea/workflows/docs-validation.yml' pull_request: branches: [main, develop] workflow_dispatch: concurrency: group: docs-validation-${{ github.ref }} cancel-in-progress: true jobs: validate-docs: runs-on: debian timeout-minutes: 10 steps: - name: Clone repository run: | WORKSPACE="/var/lib/aitbc-workspaces/docs-validation" rm -rf "$WORKSPACE" mkdir -p "$WORKSPACE" cd "$WORKSPACE" git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo - name: Install tools run: | npm install -g markdownlint-cli 2>/dev/null || echo "⚠️ markdownlint not installed" - name: Lint Markdown files run: | cd /var/lib/aitbc-workspaces/docs-validation/repo # Ensure standard directories exist mkdir -p /var/lib/aitbc/data /var/lib/aitbc/keystore /etc/aitbc /var/log/aitbc echo "=== Linting Markdown ===" if command -v markdownlint >/dev/null 2>&1; then markdownlint "docs/**/*.md" "*.md" \ --ignore "docs/archive/**" \ --ignore "node_modules/**" || echo "⚠️ Markdown linting warnings" else echo "⚠️ markdownlint not available, skipping" fi echo "✅ Markdown linting completed" - name: Check documentation structure run: | cd /var/lib/aitbc-workspaces/docs-validation/repo echo "=== Documentation Structure ===" for f in docs/README.md docs/MASTER_INDEX.md; do if [[ -f "$f" ]]; then echo " ✅ $f exists" else echo " ❌ $f missing" fi done - name: Documentation stats if: always() run: | cd /var/lib/aitbc-workspaces/docs-validation/repo echo "=== Documentation Statistics ===" echo " Markdown files: $(find docs -name '*.md' 2>/dev/null | wc -l)" echo " Total size: $(du -sh docs 2>/dev/null | cut -f1)" echo " Categories: $(ls -1 docs 2>/dev/null | wc -l)" - name: Cleanup if: always() run: rm -rf /var/lib/aitbc-workspaces/docs-validation