Merge pull request #36 from thejanit0r/master #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build Sysmon Guide | |
on: | |
push: | |
branches: [ master, main ] | |
paths: | |
- 'chapters/**' | |
- 'chapters.json' | |
- 'build_guide.py' | |
- 'Build/**' | |
pull_request: | |
branches: [ master, main ] | |
paths: | |
- 'chapters/**' | |
- 'chapters.json' | |
- 'build_guide.py' | |
- 'Build/**' | |
workflow_dispatch: # Allow manual trigger | |
jobs: | |
validate: | |
name: Validate Chapters | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.11' | |
- name: Validate configuration and chapters | |
run: | | |
python3 -c " | |
import json | |
import sys | |
from pathlib import Path | |
# Validate JSON | |
try: | |
config = json.load(open('chapters.json')) | |
print('✅ Configuration file is valid JSON') | |
except Exception as e: | |
print(f'❌ Invalid JSON: {e}') | |
sys.exit(1) | |
# Validate chapter files | |
missing = [] | |
def check_chapter(chapter): | |
if 'file' in chapter: | |
if not Path(chapter['file']).exists(): | |
missing.append(chapter['file']) | |
if 'sections' in chapter: | |
for section in chapter['sections']: | |
check_chapter(section) | |
for chapter in config['chapters']: | |
check_chapter(chapter) | |
if missing: | |
print('❌ Missing chapter files:') | |
for f in missing: | |
print(f' - {f}') | |
sys.exit(1) | |
else: | |
print('✅ All chapter files found') | |
" | |
build-markdown: | |
name: Build Master Document | |
runs-on: ubuntu-latest | |
needs: validate | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.11' | |
- name: Build master document | |
run: python3 build_guide.py | |
- name: Check master document was created | |
run: | | |
if [ -f "Build/Sysmon.md" ]; then | |
echo "✅ Master document created successfully" | |
echo "📄 Document size: $(wc -c < Build/Sysmon.md) bytes" | |
echo "📝 Line count: $(wc -l < Build/Sysmon.md) lines" | |
else | |
echo "❌ Master document not found" | |
exit 1 | |
fi | |
- name: Upload master document artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: master-document | |
path: Build/Sysmon.md | |
retention-days: 30 | |
build-pdf: | |
name: Build PDF | |
runs-on: ubuntu-latest | |
needs: build-markdown | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install LaTeX and dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y \ | |
texlive-xetex \ | |
texlive-latex-extra \ | |
texlive-fonts-extra \ | |
texlive-fonts-recommended \ | |
fonts-dejavu \ | |
fonts-dejavu-core \ | |
fonts-dejavu-extra \ | |
pandoc \ | |
perl | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.11' | |
- name: Build master document | |
run: python3 build_guide.py | |
- name: Generate PDF | |
run: | | |
cd Build | |
chmod +x md2pdf.sh | |
./md2pdf.sh ./Sysmon.md SysmonGuide.pdf | |
- name: Check PDF was created | |
run: | | |
if [ -f "Build/SysmonGuide.pdf" ]; then | |
echo "✅ PDF created successfully" | |
echo "📄 PDF size: $(wc -c < Build/SysmonGuide.pdf) bytes" | |
else | |
echo "❌ PDF not found" | |
exit 1 | |
fi | |
- name: Upload PDF artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: sysmon-guide-pdf | |
path: Build/SysmonGuide.pdf | |
retention-days: 90 | |
docker-build: | |
name: Test Docker Build | |
runs-on: ubuntu-latest | |
needs: validate | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build Docker image | |
run: docker build -t sysmon-guide-builder . | |
- name: Test Docker build | |
run: | | |
docker run --rm \ | |
-v $(pwd):/guide \ | |
-w /guide \ | |
sysmon-guide-builder \ | |
python3 build_guide.py | |
- name: Verify Docker build output | |
run: | | |
if [ -f "Build/Sysmon.md" ]; then | |
echo "✅ Docker build successful" | |
else | |
echo "❌ Docker build failed" | |
exit 1 | |
fi |