Skip to content

smkwlab/latex-release-action

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

74 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

LaTeX Release Action

πŸš€ A powerful GitHub Action to build LaTeX documents and create automated releases with enhanced performance and reliability.

CI Tests GitHub release License: MIT

✨ Features

  • πŸ“„ Multi-file Support: Build multiple LaTeX documents in a single workflow
  • ⚑ Parallel Processing: Optional parallel builds for faster compilation
  • πŸ›‘οΈ Enhanced Security: Input validation and sanitization
  • 🧹 Smart Cleanup: Configurable intermediate file cleanup
  • πŸ“¦ Automated Releases: Creates GitHub releases with compiled PDFs
  • 🎯 Flexible Options: Customizable LaTeX compilation options
  • πŸƒβ€β™‚οΈ High Performance: Optimized container-based execution
  • 🌏 Japanese Support: TeXLive environment with full Japanese support

πŸš€ Quick Start

Basic Usage

Create .github/workflows/latex-build.yml:

name: LaTeX Build and Release

on:
  push:
    tags: ['*']  # Trigger on all tags
  pull_request:
    branches: [ main ]

jobs:
  build-latex:
    runs-on: ubuntu-latest
    container: ghcr.io/smkwlab/texlive-ja-textlint:2026a
    permissions:
      contents: write  # Required for creating releases
    steps:
      - name: Build and Release LaTeX
        uses: smkwlab/latex-release-action@v3
        with:
          files: "document"  # Build document.tex

Advanced Usage

name: Advanced LaTeX Build

on:
  push:
    tags: ['*']  # All tags (e.g., release-1.0, draft-v2, final)
  pull_request:
    branches: [ main ]

jobs:
  build-latex:
    runs-on: ubuntu-latest
    container: ghcr.io/smkwlab/texlive-ja-textlint:2026a
    permissions:
      contents: write
    steps:
      - name: Build Multiple LaTeX Files
        uses: smkwlab/latex-release-action@v3
        with:
          files: "paper, appendix, presentation"
          parallel: "true"                              # Enable parallel builds
          latex_options: "-pdf -interaction=nonstopmode -halt-on-error"
          cleanup: "true"                               # Clean intermediate files
          release_name: "Research Paper ${{ github.ref_name }}"

πŸ“‹ Input Parameters

Parameter Required Default Description
files βœ… - Comma-separated LaTeX file names (without .tex extension)
latex_options ❌ -pdf -interaction=nonstopmode Custom latexmk compilation options
parallel ❌ false Enable parallel builds for multiple files
cleanup ❌ true Remove intermediate files after build
release_name ❌ Auto-generated Custom name for the GitHub release
include_source ❌ true Include source code in release assets

🎯 Usage Examples

Academic Paper Repository

name: Academic Paper Build
on:
  push:
    tags: ['*']  # paper-v1, submission-final, etc.
jobs:
  build-paper:
    runs-on: ubuntu-latest
    container: ghcr.io/smkwlab/texlive-ja-textlint:2026a
    permissions:
      contents: write
    steps:
      - name: Build Research Paper
        uses: smkwlab/latex-release-action@v3
        with:
          files: "paper/main, appendix/supplementary"
          parallel: "true"
          latex_options: "-pdf -interaction=nonstopmode -halt-on-error"
          release_name: "Paper Draft ${{ github.ref_name }}"

Multi-Document Project

name: Multi-Document Build
on:
  push:
    tags: ['*']  # thesis-draft, final-submission, etc.
jobs:
  build-documents:
    runs-on: ubuntu-latest
    container: ghcr.io/smkwlab/texlive-ja-textlint:2026a
    permissions:
      contents: write
    steps:
      - name: Build All Documents
        uses: smkwlab/latex-release-action@v3
        with:
          files: "thesis, slides, poster, abstract"
          parallel: "true"
          cleanup: "true"

Sequential Build (with Dependencies)

name: Sequential Document Build
on:
  push:
    tags: ['*']  # report-draft, monthly-update, etc.
jobs:
  build-reports:
    runs-on: ubuntu-latest
    container: ghcr.io/smkwlab/texlive-ja-textlint:2026a
    permissions:
      contents: write
    steps:
      - name: Build with Dependencies
        uses: smkwlab/latex-release-action@v3
        with:
          files: "main-report, summary-report"
          parallel: "false"  # Build sequentially
          latex_options: "-pdf -interaction=nonstopmode"

πŸ“‚ File Structure Examples

Simple Project

your-repo/
β”œβ”€β”€ .github/workflows/latex-build.yml
β”œβ”€β”€ document.tex
β”œβ”€β”€ references.bib
└── images/
    └── figure1.png

Complex Project

your-repo/
β”œβ”€β”€ .github/workflows/latex-build.yml
β”œβ”€β”€ paper/
β”‚   β”œβ”€β”€ main.tex
β”‚   β”œβ”€β”€ sections/
β”‚   └── references.bib
β”œβ”€β”€ slides/
β”‚   └── presentation.tex
└── appendix/
    └── supplementary.tex

Usage for subdirectories:

with:
  files: "paper/main, slides/presentation, appendix/supplementary"

πŸ”„ Release Behavior

Pull Requests

  • πŸ”¨ Builds LaTeX documents for verification
  • πŸ“‹ Creates pre-release with tag: {branch-name}-release
  • βœ… Validates compilation without affecting main releases

Tag Pushes

  • πŸš€ Builds LaTeX documents for production
  • πŸ“¦ Creates release with tag: {tag-name}-release
  • πŸ“„ Automatically attaches compiled PDFs

Generated Release Content

## πŸ“„ LaTeX Build Results

This release contains compiled PDF files from the following LaTeX sources:

**Built files:** paper, appendix, presentation
**Build options:** `-pdf -interaction=nonstopmode`
**Parallel build:** true
**Cleanup performed:** true

πŸ€– *This release was automatically generated by LaTeX Release Action*

πŸ”§ Requirements

Permissions

permissions:
  contents: write  # Required for creating GitHub releases

Container Support

Recommended approach: Use pre-built TexLive container for optimal performance:

jobs:
  build-latex:
    runs-on: ubuntu-latest
    container: ghcr.io/smkwlab/texlive-ja-textlint:2026a  # Recommended
    permissions:
      contents: write
    steps:
      - uses: smkwlab/latex-release-action@v3
        with:
          files: "document"

Alternative containers:

  • texlive/texlive:latest - Official TexLive
  • pandoc/latex:latest - Lightweight option
  • Custom container with latexmk installed

File Naming Security

For security, file names must contain only:

  • Alphanumeric characters: a-z, A-Z, 0-9
  • Special characters: _, -, /

πŸ› οΈ Development & Testing

Local Testing

# Clone the repository
git clone https://github.com/smkwlab/latex-release-action.git
cd latex-release-action

# Run tests
./test.sh                # All tests
./test.sh logic          # Quick validation
./test.sh local          # Local LaTeX test
./test.sh docker         # Container test

Test Coverage

  • βœ… Single file builds
  • βœ… Multiple file builds (parallel & sequential)
  • βœ… Error handling with non-existent files
  • βœ… Container-based execution
  • βœ… GitHub Actions emulation

🀝 Contributing

Contributions are welcome! Please check our Contributing Guidelines.

Development Workflow

  1. πŸ”€ Fork the repository
  2. 🌿 Create a feature branch
  3. βœ… Add tests for new features
  4. πŸ§ͺ Run the test suite
  5. πŸ“ Update documentation
  6. πŸš€ Submit a pull request

πŸ“œ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ‘₯ Authors & Acknowledgments

πŸ“ž Support


⭐ Star this repository if you find it helpful!

πŸ“„ Perfect for: Academic papers, thesis documents, technical reports, presentations, and any LaTeX-based documentation workflow.

About

GitHub Action for automated LaTeX document building and PDF release creation with parallel processing support

Topics

Resources

License

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors