name: Build LaTeX PDF on: push: paths: - '**/*.tex' jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 2 # need previous commit to diff against - name: Find changed .tex root files id: changed run: | apt-get update -qq && apt-get install -y -qq git > /dev/null git config --global --add safe.directory "$GITHUB_WORKSPACE" # root files = .tex files that contain \documentclass CHANGED=$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" -- '*.tex' || true) ROOTS="" for f in $CHANGED; do if [ -f "$f" ] && grep -q '\\documentclass' "$f"; then ROOTS="$ROOTS $f" fi done echo "roots=$ROOTS" >> "$GITHUB_OUTPUT" echo "Root files to build: $ROOTS" - name: Compile changed root files if: steps.changed.outputs.roots != '' uses: docker://texlive/texlive:latest-full with: entrypoint: sh args: >- -c "mkdir -p pdf aux && for f in ${{ steps.changed.outputs.roots }}; do echo Building $f; latexmk -pdf -interaction=nonstopmode -halt-on-error -outdir=pdf -auxdir=aux \"$f\" || exit 1; done && find pdf -type f ! -name '*.pdf' -delete" - name: Upload built PDFs if: steps.changed.outputs.roots != '' uses: actions/upload-artifact@v3 with: name: pdf-output path: pdf/*.pdf - name: Commit PDFs back to repo if: steps.changed.outputs.roots != '' run: | git config user.name "gitea-actions" git config user.email "actions@gitea.local" git remote set-url origin "https://Domipoke:${{ secrets.GITEA_PUSH_TOKEN }}@gitea.egregge.eg/Domipoke/SharedLaTeX.git" git add pdf/*.pdf git diff --cached --quiet || git commit -m "CI: rebuild PDF(s) [skip ci]" git push origin HEAD:${{ github.ref_name }}