{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreiekmkztrleeys4rbzghsl22vcwl2bwmvucxhjogc6v6lpwpwx43ry",
    "uri": "at://did:plc:25rdn5elo5izoxrmtis34zuk/app.bsky.feed.post/3mp5fyp3gbiw2"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreia4eqtum2zd6klphuvuoz4h6ypmdusdeibb2zqvfjsxfurvyedyay"
    },
    "mimeType": "image/webp",
    "size": 53176
  },
  "path": "/paperquire_e3fdb510bbe49c/paperquire-render-action-pdfs-in-your-ci-pipeline-4bc8",
  "publishedAt": "2026-06-25T21:38:41.000Z",
  "site": "https://dev.to",
  "tags": [
    "githubaction",
    "cicd",
    "automation",
    "GitHub Action docs",
    "paperquire/render-action"
  ],
  "textContent": "##  Your docs should build themselves\n\nYou write your documentation in Markdown. You keep it in a Git repo. Every time someone updates a spec or runbook, someone else has to open PaperQuire (or the CLI), render the PDF, and upload it somewhere.\n\nThat manual step is now gone. The **PaperQuire Render Action** generates branded, print-ready PDFs directly in your GitHub Actions workflow — on every push, every PR, or every release.\n\n##  One step. That's it.\n\n\n    - uses: paperquire/render-action@v1\n      with:\n        files: 'docs/*.md'\n        template: executive-report\n        output: build/pdfs\n\n\nEvery Markdown file matching the glob is rendered to PDF using the same Chromium engine as the desktop app. Same templates, same quality, no Pandoc or LaTeX to install.\n\n##  What you can build\n\n###  Auto-generate docs on push\n\nWhenever someone pushes to `docs/`, produce fresh PDFs and attach them as build artifacts:\n\n\n\n    name: Generate PDFs\n\n    on:\n      push:\n        paths:\n          - 'docs/**/*.md'\n\n    jobs:\n      render:\n        runs-on: ubuntu-latest\n        steps:\n          - uses: actions/checkout@v4\n\n          - uses: paperquire/render-action@v1\n            with:\n              files: 'docs/*.md'\n              template: minimal-clean\n              output: build/pdfs\n\n          - uses: actions/upload-artifact@v4\n            with:\n              name: pdfs\n              path: build/pdfs/\n\n\nTeam members download the latest PDFs from the Actions tab. No Slack messages, no \"can you re-export this?\"\n\n###  Attach PDFs to releases\n\nShip documentation alongside your code:\n\n\n\n    - uses: paperquire/render-action@v1\n      with:\n        files: 'docs/*.md'\n        template: executive-report\n        output: dist/\n\n    - name: Upload to release\n      env:\n        GH_TOKEN: ${{ github.token }}\n      run: gh release upload ${{ github.event.release.tag_name }} dist/*.pdf\n\n\nEvery release automatically includes the latest versions of your specs, guides, and reports.\n\n###  PR previews\n\nUse the action in pull request workflows so reviewers can download rendered PDFs before merging:\n\n\n\n    on:\n      pull_request:\n        paths: ['docs/**']\n\n    jobs:\n      preview:\n        runs-on: ubuntu-latest\n        steps:\n          - uses: actions/checkout@v4\n          - uses: paperquire/render-action@v1\n            with:\n              files: 'docs/*.md'\n              output: preview/\n          - uses: actions/upload-artifact@v4\n            with:\n              name: pdf-preview\n              path: preview/\n\n\n##  Inputs and outputs\n\nThree inputs — only `files` is required:\n\nInput | Default | Description\n---|---|---\n`files` | — | Glob pattern (e.g. `docs/*.md`, `**/*.md`)\n`template` | `minimal-clean` | Any built-in template ID\n`output` | `output/` | Where to write PDFs\n\nThe action outputs `pdf-files` — a newline-separated list of generated paths you can reference in later steps:\n\n\n\n    - uses: paperquire/render-action@v1\n      id: render\n      with:\n        files: 'docs/*.md'\n\n    - run: echo \"${{ steps.render.outputs.pdf-files }}\"\n\n\n##  How it works under the hood\n\nThe action runs in a Docker container with Node.js and all Chromium dependencies pre-installed. It globs your files, runs `paperquire render` for each one, and collects the output paths. No shell tricks, no external binaries to install — everything is baked into the image.\n\nThe Docker image is published to GHCR (`ghcr.io/paperquire/render-action`), so subsequent runs pull from cache instead of rebuilding.\n\n##  Get started\n\n  1. Add the step to your workflow (copy the YAML above)\n  2. Push to your repo\n  3. Check the Actions tab for your PDFs\n\n\n\nFull documentation: GitHub Action docs\n\nAction source: paperquire/render-action",
  "title": "PaperQuire Render Action — PDFs in Your CI Pipeline"
}