Skip to content

fix: force LF on shell scripts so shebangs don't break (CRLF) #3

fix: force LF on shell scripts so shebangs don't break (CRLF)

fix: force LF on shell scripts so shebangs don't break (CRLF) #3

Workflow file for this run

name: Quarto Preview
on:
pull_request:
types:
- opened
- reopened
- synchronize
- closed
- labeled
- unlabeled
# Cancel an in-progress preview build when a newer event supersedes it on
# the same ref — otherwise a fresh push queues behind the stale build and
# the up-to-date preview is delayed until the obsolete one finishes.
# `github.ref` is stable across a PR's events, so all of a PR's preview
# runs share one group.
concurrency:
group: preview-${{ github.ref }}
cancel-in-progress: true
jobs:
build-deploy:
if: |
(github.event.action != 'labeled' && github.event.action != 'unlabeled') ||
contains(fromJson('["pdf","docx","no-preview-highlights","clear-freezer"]'), github.event.label.name)
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
env:
TZ: America/Los_Angeles
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Quarto
uses: quarto-dev/quarto-actions/setup@v2
with:
tinytex: true
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: r-lib/actions/setup-r@v2
with:
use-public-rspm: true
- uses: r-lib/actions/setup-r-dependencies@v2
with:
packages: |
any::knitr
any::rmarkdown
any::tibble
any::ggplot2
- name: Set timezone to Pacific Time
run: echo "TZ=America/Los_Angeles" >> $GITHUB_ENV
- name: Restore Quarto freezer
if: ${{ !contains(github.event.pull_request.labels.*.name, 'clear-freezer') }}
id: quarto-freezer-cache
uses: actions/cache/restore@v4
with:
path: _freeze
key: ${{ runner.os }}-quarto-freezer-${{ github.event.pull_request.head.sha }}-${{ github.run_attempt }}
restore-keys: |
${{ runner.os }}-quarto-freezer-${{ github.event.pull_request.head.sha }}-
${{ runner.os }}-quarto-freezer-main-
${{ runner.os }}-quarto-freezer-
- name: Render HTML
uses: quarto-dev/quarto-actions/render@v2
with:
to: html
# Detect which sections have changed and optionally disable highlighting
# based on the 'no-preview-highlights' PR label
- name: Detect changed sections (based on rendered files)
run: python3 .github/scripts/detect-changed-notebooks.py
env:
HTML_DIR: ./_manuscript
DISABLE_PREVIEW_HIGHLIGHTS: ${{ contains(github.event.pull_request.labels.*.name, 'no-preview-highlights') }}
- name: Inject preview metadata
if: env.PREVIEW_SHOW_HIGHLIGHTS == 'true'
run: python3 .github/scripts/inject-preview-metadata.py
- name: Re-render with metadata
if: env.PREVIEW_SHOW_HIGHLIGHTS == 'true'
uses: quarto-dev/quarto-actions/render@v2
with:
to: html
- name: Collect QMD files for optional renders
id: optional-render-files
run: |
files=()
if [ -f index.qmd ]; then
files+=(index.qmd)
fi
if [ -d notebooks ]; then
while IFS= read -r nb_file; do
files+=("$nb_file")
done < <(find notebooks -maxdepth 1 -type f -name '*.qmd' | sort)
fi
if [ ${#files[@]} -eq 0 ]; then
echo "has_files=false" >> "$GITHUB_OUTPUT"
exit 0
fi
{
echo "files<<EOF"
printf '%s\n' "${files[@]}"
echo "EOF"
} >> "$GITHUB_OUTPUT"
echo "has_files=true" >> "$GITHUB_OUTPUT"
- name: Render PDF
if: contains(github.event.pull_request.labels.*.name, 'pdf') && steps.optional-render-files.outputs.has_files == 'true'
run: |
while IFS= read -r file; do
[ -n "$file" ] || continue
echo "Rendering PDF for $file"
quarto render "$file" --to pdf
done <<< "${{ steps.optional-render-files.outputs.files }}"
- name: Render DOCX
if: contains(github.event.pull_request.labels.*.name, 'docx') && steps.optional-render-files.outputs.has_files == 'true'
run: |
while IFS= read -r file; do
[ -n "$file" ] || continue
echo "Rendering DOCX for $file"
quarto render "$file" --to docx
done <<< "${{ steps.optional-render-files.outputs.files }}"
- name: Install python-docx for DOCX comparison
if: contains(github.event.pull_request.labels.*.name, 'docx')
run: pip install python-docx
- name: Highlight HTML content changes
if: env.PREVIEW_SHOW_HIGHLIGHTS == 'true'
run: |
echo "Changed sections:"
echo "${{ env.PREVIEW_CHANGED_CHAPTERS }}"
python3 .github/scripts/highlight-html-changes.py
env:
HTML_DIR: ./_manuscript
PREVIEW_CHANGED_CHAPTERS: ${{ env.PREVIEW_CHANGED_CHAPTERS }}
- name: Create DOCX with tracked changes
if: contains(github.event.pull_request.labels.*.name, 'docx')
run: python3 .github/scripts/create-docx-tracked-changes.py
env:
DOCX_DIR: ./_manuscript
- name: Add home page banner
run: python3 .github/scripts/add-home-banner.py
env:
HTML_DIR: ./_manuscript
PREVIEW_CHANGED_CHAPTERS: ${{ env.PREVIEW_CHANGED_CHAPTERS }}
- name: Save Quarto freezer
uses: actions/cache/save@v4
with:
path: _freeze
key: ${{ runner.os }}-quarto-freezer-${{ github.event.pull_request.head.sha }}-${{ github.run_attempt }}
- name: Deploy PR Preview
id: preview-step
if: github.event_name == 'pull_request'
uses: rossjrw/pr-preview-action@v1
with:
source-dir: ./_manuscript/
action: ${{ github.event.action == 'closed' && 'remove' || 'deploy' }}
preview-branch: gh-pages
comment: "false"
wait-for-pages-deployment: false
- uses: marocchino/sticky-pull-request-comment@v2
if: steps.preview-step.outputs.deployment-action == 'deploy' && env.deployment_status == 'success'
with:
header: pr-preview
recreate: true
message: |
[PR Preview Action](https://github.com/rossjrw/pr-preview-action) ${{ steps.preview-step.outputs.action-version }}
:---:
| <p><img src="https://qr.rossjrw.com/?url=${{ steps.preview-step.outputs.preview-url }}" height="100" align="right" alt="QR code for preview link"></p> :rocket: View preview at <br> ${{ steps.preview-step.outputs.preview-url }} <br><br>
| <h6>Built to branch [`gh-pages`](${{ github.server_url }}/${{ github.repository }}/tree/gh-pages) at ${{ steps.preview-step.outputs.action-start-time }}. <br> Preview will be ready when the [GitHub Pages deployment](${{ github.server_url }}/${{ github.repository }}/deployments) is complete. <br><br> </h6>
- uses: marocchino/sticky-pull-request-comment@v2
if: steps.preview-step.outputs.deployment-action == 'remove' && env.deployment_status == 'success'
with:
header: pr-preview
recreate: true
message: |
[PR Preview Action](https://github.com/rossjrw/pr-preview-action) ${{ steps.preview-step.outputs.action-version }}
:---:
Preview removed because the pull request was closed.
${{ steps.preview-step.outputs.action-start-time }}