Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 100 additions & 31 deletions .github/workflows/reusable-release-export.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,59 @@
name: Release (Export + Cover)
name: Reusable Release Export (Pandoc in Docker)

on:
release:
types: [published]
workflow_dispatch:
workflow_call:
inputs:
summary_path:
description: "Path to summary.md in the caller repository"
required: true
type: string

content_dir:
description: "Working directory of the caller repository content"
required: false
type: string
default: .

output_basename:
description: "Base name for produced artifacts (without extension)"
required: false
type: string
default: documentation

# Prebuilt image containing pandoc + xelatex + fonts
pandoc_image:
required: false
type: string
default: ghcr.io/<ORG>/pandoc-latex-fonts:3.9

# Knowledge Base PDF defaults
papersize:
required: false
type: string
default: a4
margin:
required: false
type: string
default: 2.5cm
fontsize:
required: false
type: string
default: 11pt
mainfont:
required: false
type: string
default: Noto Sans
sansfont:
required: false
type: string
default: Noto Sans
monofont:
required: false
type: string
default: Fira Code

permissions:
contents: write
contents: read

jobs:
export:
Expand All @@ -28,38 +75,60 @@ jobs:
runs-on: ubuntu-latest

steps:
- name: Checkout repository (to access assets/cover.pdf)
- name: Checkout caller repository
uses: actions/checkout@v4

- name: Download export artifacts
uses: actions/download-artifact@v4
- name: Checkout shared repository (.github) for assemble script
uses: actions/checkout@v4
with:
name: release-export
path: exports
repository: International-Data-Spaces-Association/.github
path: _shared

- name: Merge cover + body PDF (create additional artefact)
- name: Assemble markdown from summary (shared script)
working-directory: ${{ inputs.content_dir }}
run: |
python -m pip install --upgrade pip
python -m pip install pypdf
python - <<'PY'
from pypdf import PdfWriter
python3 ../_shared/scripts/assemble_from_summary.py \
--summary "${{ inputs.summary_path }}" \
--out "../combined.md" \
--fail-on-missing

cover = "assets/cover.pdf"
body = "exports/knowledge-base.pdf"
out = "exports/knowledge-base-with-cover.pdf"
- name: Prepare output directory
run: mkdir -p exports

writer = PdfWriter()
writer.append(cover) # cover can be 1 or multiple pages
writer.append(body)
writer.write(out)
print(f"Created {out}")
PY
# pypdf supports merging by appending PDFs via PdfWriter.append() and writing the output. [2](https://bing.com/search?q=material+for+mkdocs+custom+404+page+setup)[3](https://squidfunk.github.io/mkdocs-material/customization/)
- name: Build DOCX (Pandoc in Docker)
uses: docker://${{ inputs.pandoc_image }}
with:
args: >-
combined.md
--from=gfm
--standalone
--resource-path=.:exports:exports/media:docs:docs/external:docs/assets
--output=exports/${{ inputs.output_basename }}.docx

- name: Upload release assets (keep ALL artefacts)
uses: softprops/action-gh-release@v2
- name: Build PDF (Pandoc + XeLaTeX, KB defaults)
uses: docker://${{ inputs.pandoc_image }}
with:
files: |
exports/knowledge-base.pdf
exports/knowledge-base-with-cover.pdf
exports/knowledge-base.docx
args: >-
combined.md
--from=gfm
--standalone
--toc
--number-sections
--pdf-engine=xelatex
-V papersize=${{ inputs.papersize }}
-V geometry:margin=${{ inputs.margin }}
-V fontsize=${{ inputs.fontsize }}
-V mainfont=${{ inputs.mainfont }}
-V sansfont=${{ inputs.sansfont }}
-V monofont=${{ inputs.monofont }}
--resource-path=.:exports:exports/media:docs:docs/external:docs/assets
--output=exports/${{ inputs.output_basename }}.pdf

- name: Upload export artifacts (PDF + DOCX)
uses: actions/upload-artifact@v4
with:
name: release-export
path: |
exports/${{ inputs.output_basename }}.pdf
exports/${{ inputs.output_basename }}.docx
if-no-files-found: error