\section{لماذا CI/CD لـ LaTeX}
أصدر مستنداتك بثقة
تعامل مع مصدر LaTeX كما تتعامل مع البرمجيات. تكشف عمليات البناء الآلية الحزم المعطوبة والملفات المفقودة وأخطاء التجميع قبل أن تصل إلى قرّائك.
لا تصدر ملفات PDF معطوبة أبدًا
اكشف أخطاء التجميع قبل الدمج. تفشل فحوصات طلب السحب (pull request) إذا تعذّر تجميع المستند.
توزيع آلي
تُرفق ملفات PDF كمخرجات بكل تشغيل لسير العمل. شارك رابطًا مباشرًا لأحدث مستند مجمَّع.
لا حاجة إلى TeX Live محليًا
يساهم أعضاء الفريق في مصدر LaTeX دون تثبيت TeX Live. تتولى واجهة API التجميع في السحابة.
\section{Prerequisites}
قبل أن تبدأ
- حساب FormaTeX: تكفي الخطة المجانية (15 عملية تجميع/شهر)
- مفتاح FormaTeX API من لوحة التحكم
- مستودع GitHub يحتوي على ملفات .tex
\section{دليل خطوة بخطوة}
الإعداد في أربع خطوات
أضف السر إلى GitHub
خزّن مفتاح API كسر في المستودع حتى لا يظهر أبدًا في ملف YAML الخاص بسير العمل. انتقل إلى Repository → Settings → Secrets and variables → Actions → New secret وسمِّه FORMATEX_API_KEY.
# Add your FormaTeX API key as a GitHub Actions secret
# Go to: Repository → Settings → Secrets and variables → Actions → New secret
# Name: FORMATEX_API_KEY
# Value: your API key from formatex.io/dashboard/api-keys
# Test locally before committing:
export FORMATEX_API_KEY="your-key-here"
curl -X POST https://api.formatex.io/api/v1/compile \
-H "X-API-Key: $FORMATEX_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"latex": "\\documentclass{article}\\begin{document}Hello\\end{document}", "engine": "pdflatex"}'أنشئ ملف سير العمل
أنشئ الملف .github/workflows/latex.yml في مستودعك. يجمّع سير العمل البسيط هذا الملف main.tex ويرفع ملف PDF الناتج كمخرج (artifact).
# .github/workflows/latex.yml
name: Compile LaTeX
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
compile:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Compile LaTeX to PDF
env:
FORMATEX_API_KEY: ${{ secrets.FORMATEX_API_KEY }}
run: |
jq -n --rawfile latex main.tex '{engine: "xelatex", latex: $latex}' \
| curl --fail-with-body -sS -X POST https://api.formatex.io/api/v1/compile \
-H "X-API-Key: $FORMATEX_API_KEY" \
-H "Content-Type: application/json" \
-d @- -o output.pdf
- name: Upload PDF artifact
uses: actions/upload-artifact@v4
with:
name: compiled-pdf
path: output.pdfادفع التغييرات وراقب البناء
نفّذ commit وادفع ملف سير العمل. سيبدأ GitHub Actions تلقائيًا عند دفعك التالي إلى main. افتح تبويب Actions في مستودعك لمشاهدة تشغيل سير العمل. وعند اكتماله، يظهر ملف PDF المجمَّع ضمن Artifacts.
\section{إعداد سير العمل الكامل}
بناء مصفوفي مع معالجة الأخطاء
توسّع إلى مستندات متعددة باستراتيجية المصفوفة (matrix). يجمّع سير العمل هذا الأطروحة والعرض التقديمي والملحق بالتوازي، ويلتقط أخطاء HTTP بشكل صريح، ويحتفظ بملفات PDF لمدة 30 يومًا.
# .github/workflows/latex-full.yml
name: LaTeX Build Pipeline
on:
push:
paths: ['**.tex', '**.bib']
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
document: [thesis, presentation, appendix]
steps:
- uses: actions/checkout@v4
- name: Compile ${{ matrix.document }}
env:
FORMATEX_API_KEY: ${{ secrets.FORMATEX_API_KEY }}
DOC: ${{ matrix.document }}
run: |
jq -n --rawfile latex "$DOC.tex" '{engine: "xelatex", latex: $latex}' \
| curl --fail-with-body -sS -X POST https://api.formatex.io/api/v1/compile \
-H "X-API-Key: $FORMATEX_API_KEY" \
-H "Content-Type: application/json" \
-d @- -o "$DOC.pdf"
- name: Upload PDFs
uses: actions/upload-artifact@v4
with:
name: pdfs-${{ matrix.document }}
path: ${{ matrix.document }}.pdf
retention-days: 30\section{Troubleshooting}
المشكلات الشائعة وحلولها
مفتاح API غير معيَّن
تأكد من إضافة FORMATEX_API_KEY كسر (secret) في المستودع وليس كمتغير. الأسرار مشفّرة أما المتغيرات فلا. انتقل إلى Settings → Secrets and variables → Actions → Secrets (وليس Variables).
ملفات .tex الكبيرة
للملفات التي تتجاوز 10 MB، استخدم نقطة نهاية التجميع غير المتزامن (/api/v1/compile/async). تُعيد نقطة النهاية غير المتزامنة معرّف مهمة يمكنك الاستعلام عنه للحصول على النتيجة.
حزم مفقودة
تتضمن بيئة FormaTeX المعزولة TeX Live 2023 كاملًا، وأغلب حزم CTAN متاحة مباشرةً. إذا كانت إحدى الحزم مفقودة، تواصل مع الدعم وسنضيفها.
\section{تكاملات ذات صلة}
استخدم FormaTeX من أي بيئة
FormaTeX هو واجهة HTTP API بسيطة. أمثلة جاهزة للنسخ واللصق لكل لغة ومنصة رئيسية.

