This repository was created to explore using Quarto for creating and publishing Quarto Books via private GitHub Pages.
The published version of this Quarto Book is available at https://ucsf-wynton.github.io/quarto-book-test/. In addition to being available as an online HTML book, it's also downloadable as a PDF (via the icon under the book title). The book content is automatically indexed by Quarto, so it can be searched online (depsite being a static website).
This is a private site that can only be access by those who have access to this https://github.com/ucsf-wynton/quarto-book-test/ repository.
The content in this repository was created using:
$ quarto --version
1.2.215Following the instructions on https://quarto.org/docs/books/, I created quarto-book-test/ book template folder using:
$ quarto create-project quarto-book-test --type book
...
$ cd quarto-book-test/To preview the HTML-version of the book in your local web browser, run
$ cd quarto-book-test/
$ quarto previewThis is how the book will look like when published online.
Next step was to set this up in git repository to be pushed to GitHub. Reading ahead in the instruction, I first created a .gitignore file that ignores certain files and folders we don't want include in the git repository;
*~
/.quarto/
/_book/
Then I created the git repository, and pushed it online:
$ git init
$ git add -- .* *
$ git commit -am "Created book skeleton"
$ git remote add origin git@github.com:ucsf-wynton/quarto-book-test.git
$ git pushThis repository was set up as a private GitHub repository. Since it is hosted under the https://github.com/ucsf-wynton/ organization, which is under the GitHub Enterprise Cloud plan that UCSF has, we can use private GitHub Pages. The instructions for publish to GitHub Pages are the same for private and public GitHub Pages (https://quarto.org/docs/publishing/github-pages.html). We first have to do:
$ touch .nojekyll
$ git add .nojekyll
$ git commit .nojekyll -m "Disable default Jekyll for GitHub Pages"Then, each time we want to publish an update, we call:
$ quarto publish gh-pagesThe only culprit is that this command will get stuck at:
(/) Deploying gh-pages branch to website (this may take a few minutes)We have to hit Ctrl-C to break out of it. This is a bug, which I've reported (quarto-dev/quarto-cli#2864).
After making sure I could publish to GitHub Pages manually (previous section), I turned to do it automatically via GitHub Actions. Following the instructions at https://quarto.org/docs/publishing/github-pages.html#github-action, I added the following top-level entry to the _quarto.yml file;
execute:
freeze: autoComment: This is only needed if we would have dynamic code snippets in our book. Currently, we don't have, but I added it now just in case.
Then I added GitHub Actions workflow .github/workflows/publish.yml, which was cut'n'pasted from https://quarto.org/docs/publishing/github-pages.html#github-action. In order to build the PDF, which is built via LaTeX, I had to instruct GitHub Actions that TinyTeX is needed;
- name: Set up Quarto
uses: quarto-dev/quarto-actions/setup@v2
with:
tinytex: truewhich is something I found out from https://github.com/quarto-dev/quarto-actions/blob/c1016e37977d5684cfdfce516c9480b6b4741568/setup/README.md after initially getting errors on GitHub Actions.
To make Quarto update the published date automatically, modify _quarto.yml to use:
book:
...
date: last-modifiedQuarto supports dynamically-generated code blocks. I've added the dynamic.qmd file illustrating how to use evaluate R, Python, and Bash code dynamically so that the output is captured and included in the book. This page was added the page to _quarto.yml.
Warning: If you render the book via GitHub Actions, don't forget to run:
$ quarto renderbefore pushing to GitHub. Also, make sure that the _freeze/ folder is added to the git repository.