- Pin workflow to ubuntu-22.04 instead of ubuntu-latest (reported @chrbknudsen #605, fixed @froggleston #606)
- Update notes to remove excessive build warnings (@milanmlft #599)
- Add
R-de.po
for German translations of lesson elements (@martin-raden #607)
- Added @martin-raden as a contributor and translator - welcome!
- Add overwrite option to pr workflow to fix change in default from update-artifact action v3 to v4 (@milanmlft #602)
- Regression fix for update to pkgdown resulting in duplicated untranslated h2 anchors for sections (@froggleston #600)
- Fix various action warnings and issues relating to old Node.js versions (@jhlegarreta #596)
- Update core actions to v4 (@Bisaloo #577)
- Allow custom carpentry config types, and associated alt-text descriptions to support alternative logos/theming of lessons (@milanmlft #585, @ErinBecker)
- Add support for French translations of core lesson components/sections (@Bisaloo #595)
- Fix for empty divs when checking for headers (reported: @dmgatti, #581; fixed @froggleston)
- Fix for spacing in callout titles when they have
inner tags, e.g.
<code>
(reported: @abostroem, #562; fixed @froggleston)
- Add support for including the Carpentries matomo tracker, a custom user-supplied tracker script, or no tracking (reported: @tbyhdgs, @fiveop carpentries/varnish#37, @zkamvar carpentries#438, implemented: @froggleston )
- The lesson page footer now supports either a CITATION or CITATION.cff file (reported: @tobyhodges, implemented: @froggleston, #572; @tobyhodges, carpentries/varnish#122)
- Add support for tabbed content in lessons (reported: @astroDimitrios, implemented: @astroDimitrios, @froggleston, carpentries#571, carpentries/varnish#121, carpentries/pegboard#148 ).
- Hotfix for pandoc2-to-pandoc3 bump that resulted in CSS deduplication of section classes for callout blocks (reported: @bencomp, #470; @ndporter carpentries/workbench#81; fixed: @froggleston, #574)
- JSON metadata now contains the
inLanguage
key.
- A list of translatable strings has now been added to
vignette("translations", package = "sandpaper")
- Translation strings now are unduplicated and live in a single file
(
R/utils-translate.R
). This will make finding and updating these strings easier for maintainer and translators. - Translations now live in the global environment called
these$translations
- A new documentation page called
?translate
contains details of how translations of template elements are rendered.
tr_src()
helper function provides access to the source strings of the translations.tr_get()
,tr_varnish()
, andtr_computed()
helper functions provide access top the lists of translated strings. These have replaced thetr_()
strings at the point of generation.
- Callout headings with markup in the titles will no longer have text duplicated (reported: @zkamvar, #556; fixed: @zkamvar, #557)
- It is now possible to build lessons in languages other than English so that the website elements are also localised to that language (reported: @zkamvar, #205, @joelnitta, #544; fixed: @joelnitta and @zkamvar, #546).
known_languages()
is a function that will return the language codes that are known by {sandpaper}.
- A new vignette
vignette("translation", package = "sandpaper")
describes how translation of template components works and how to submit new/update translations (added: @zkamvar, #546).
- A new vignette about data flow
vignette("data-flow", package = "sandpaper")
describes how templating, translations, and lesson metadata flows from {sandpaper} to {varnish} (added: @zkamvar, #553)
- The spelling of keypoints is now consistent between the menu item and the callout blocks (reported: @clarallebot, carpentries/workbench#44; fixed: @zkamvar, #546)
- The {withr} package has been upgraded to an import from a suggested package.
- Japanese (ja) (added: @joelnitta, #546)
- Spanish (es) (added: @yabellini, #552)
- Added @yabellini as a contributor and translator
- Added @joelnitta as an author and translator
- Using
handout: true
inconfig.yaml
will cause a handout to be generated for the lesson website under/files/code-handout.R
. At the moment, this is only relevant for R-based lessons (implemented: @froggleston, #527, reviewed: @zkamvar) and supersedes the need for specifyingoptions(sandpaper.handout = TRUE)
- Content for learners now accessible through instructor view. The instructor view "More" dropdown menu item will now have links to learner view items appended. Note that when clicking these links, the user will remain in instructor view. This behaviour may change in future iterations (reported: @karenword, #394; fixed: @ErinBecker, #530, reviewed: @zkamvar)
create_episode()
will now open new episodes for editing in interactive sessions (implemented: @milanmlft, #534, reviewed: @zkamvar)- The
site/
folder is now customisable to any writable directory on your system by setting the experimentalSANDPAPER_SITE
environment variable to any valid and empty folder. This is most useful in the context of Docker containers, where file permissions to mounted volumes are not always guaranteed (reported: @fherreazcue #536; implemented: @zkamvar, #537) - DOI badges can now be displayed when paired with {varnish} version 0.4.0 by
adding the
doi:
key to theconfig.yaml
file with either the raw DOI or the URL to the DOI (reported: @tobyhodges, carpentries/workbench#67; fixed: @tobyhodges, #535).
- Internal
build_status()
function: make sureroot_path()
always points to lesson root (reported: @milanmlft, #531; fixed: @milanmlft, #532)
- Added @milanmlft as contributor
mailto:
links are no longer prepended with the URL (reported: @apirogov, #538; fixed: @zkamvar, #539)
- all internal folders can contain the standard
files
,fig
, anddata
folders with the cautionary note that duplicate file names to other folders will cause an error.
validate_lesson()
now reports invalid elements of child documents- A new vignette
vignette("include-child-documents", package = "sandpaper")
demonstrates and describes the caveats about using child documents.
- overview child files are no longer built as if they are top-level files.
- R Markdown episodes with further nested child documents (grand children and beyond) will now trigger an episode to rebuild (fixed: @zkamvar, #513)
- Child file detection functionality has been moved to the {pegboard} package
- {pegboard} minimum version is now 0.7.0
- References to heading in
setup.md
will now be reflected in the website. (reported: @tobyhodges, @fnattino, and @zkamvar, #521; fixed: @ErinBecker and @zkamvar, #522).
- A regression from #514 where empty menus would cause a failure in deployment with the 404 page has been fixed (reported: @tobyhodges and @zkamvar, #519; fixed: @zkamvar, #520).
- Users with duplicated
init.defaultBranch
declarations in their git config will no longer fail the default branch check (reported: @tesaunders, #516; fixed: @zkamvar, #517)
- Aggregate pages will no longer fail if an episode has a prefix that is the
same as that aggregate page (e.g.
images.html
will no longer fail if there is an episode that starts withimages-
) (reported: @mwhamgenomics, #511; fixed: @zkamvar, #512) - 404 page index link will point to the default index page of the site instead of the relative index page, which would result in a 404 for nested links that did not exist (reported: @kaijagahm and @zkamvar, #498; fixed @zkamvar, #514)
- Overview style lessons that do not have episodic content can now be processed,
analysed, and built by {sandpaper}. To make your lesson an overview lesson,
you can add
overview: true
to yourconfig.yaml
(reported: @zkamvar, carpentries/workbench#65; implemented: @zkamvar, #496) - The new
spoiler
class of fenced div will allow authors to specify an expandable section of content that is collapsed by default. This replaces the former paradigm of using "floating solution" blocks to present options for installation on different platforms. (implemented: @tobyhodges, #502)
- Internal function
root_path()
will no longer fail if theepisodes/
folder does not exist as long as one of the other four folders (site/
,learners/
,instructors/
,profiles/
) exists (fixed: @zkamvar, #496) set_config()
can now properly process logical values intotrue
andfalse
- R Markdown documents with modificiations to child documents will now take into account changes to the child documents (reported @jcolomb, #497; fixed @zkamvar, #498).
- A broken test from the development version of {renv} fixed. This was a change in output and not functionality, so there will be no user-visible changes (reported: @zkamvar, #484; fixed: @zkamvar, #487).
- Broken snapshot tests from upstream R-devel have been fixed by ensuring that version comparisons always use characters and not numbers (which is ergonomically weird, but whatever) (reported: @zkamvar #487; fixed: @zkamvar #487)
- Blank instructor notes pages no longer fail to build (reported: @apirogov, #505; fixed: @klbarnes20, #509)
- Tests for {renv} post 1.0.0 fixed so that they no longer run forever interactively (reported: @zkamvar #500; fixed: @zkamvar, #501)
- We are now testing against pandoc 2.19.2 in continuous integration.
- The discussion list link for the new lesson contributing template has been fixed.
- examples have been modified to not use R Markdown lessons unless necessary, reducing output and time needed to build the examples.
- The README file has been updated to fix a typo.
- {pegboard} minimum version is now 0.6.0
- {varnish} minimum version is now 0.3.0
- A bug in walled systems where templated pages (e.g. 404) could not be written due to permissions issues has been fixed (reported: @ocaisa, #479; fixed: @zkamvar, #482).
- A bug where the git credentials are accidentally changed when a lesson is built is fixed by no longer querying git author when the lesson is built. (reported: @joelnitta, @velait, and @zkamvar, #449; fixed: @zkamvar, #476).
- A bug where the sidebar for non-episode pages had extra commas was fixed (reported: @zkamvar, #473; fixed: @zkamvar, #474)
- The current page of the sidebar no longer hides the episode number. (reported: @cynthiaftw, carpentries/workbench#42 and #432; fixed: @zkamvar, #472)
- metadata for episodes with titles containing markup no longer include that markup in the metadata (@zkamvar, #472)
- The internal function
sandpaper:::check_pandoc()
now points to the correct URL to download RStudio, which moved after the migration to posit (@zkamvar, #471)
- Aggregate instructor notes now have headings that link back to the source instructor note (reported: @tobyhodges, #463; fixed: @zkamvar, #468)
- The internal function
sandpaper:::render_html()
now explicitly sets the pandoc version before running the subprocess. This allows lesson developers to use the {pandoc} package to set their pandoc versions. (reported: @zkamvar, #465; fixed: @zkamvar, #465)
- Callout block anchor links now point to the correct ID of the block derived from the title of the block (as opposed to the generic ID). (reported: @debpaul, datacarpentry/OpenRefine-ecology-lesson#292 and @bencomp, #454; fixed: @zkamvar, #467).
- Inline images no longer automatically transform to figure blocks (reported: @ostephens, #445; fixed: @zkamvar, #446). This bug was preventing image links (e.g. MyBinder badges) from being rendered as links with images in them. This fixes that issue. It also helps distinguish inline images between figures in the DOM.
sandpaper::serve()
gains thequiet
argument, defaulting toTRUE
for interactive sessions andFALSE
for command line sessionssandpaper::serve()
gains the...
argument to pass options toservr::server_config()
for setting ports and hosts (reported: @twrightsman, carpentries/workbench#50 and #459; fixed: @zkamvar, #461).
- Break timing is now included in the overall schedule. (reported: @karenword, #437; fixed: @bencomp, #455).
- An upstream feature in {renv}, forcing it to be silent when testing caused some expectations to fail. This has been fixed in specific tests by turning verbosity on in those tests (reported: @zkamvar, #457; fixed: @zkamvar, #458)
- A failure to incrementally build the lesson with
sandpaper::serve()
has been fixed (reported: @zkamvar, #450; fixed: @zkamvar, #451)
- Lessons with markdown documents no longer use
callr::r()
as an intermediary (reported: @zkamvar, #442, fixed: @zkamvar, #452)
- The 404 page will now have proper styling applied when the site is deployed
via one of the
ci_
functions (reported: @zkamvar, #430; fixed: @zkamvar, #431). sandpaper::serve()
will no longer error if a different directory is used.
- A 404 page has been added (reported: @fmichonneau, #268; fixed: @zkamvar, #429)
- The minimum version of {pegboard} has been set to 0.5.1
- The README, LICENSE, CONTRIBUTING, and SETUP templates have been fixed to work with {pegboard} version 0.5.1
- The LICENSE and CONTRIBUTING templates now refer to The Carpentries as a whole and provides correct links to community forums.
- Fix an issue for {renv} version 0.17.2 where it was unable to provision packages that were being used in the parent environment. This was a problem in environments where the version of {sandpaper} was controlled by {renv}. (reported: rstudio/renv#1177, @zkamvar; fixed #423, @zkamvar). Note that this fix is ONLY applicable to {renv} 0.17.2 and will be fixed with newer versions of {renv}.
- workflow files now have explicit permissions to comment on pull requests or create new branches when called. This fixes an issue where new lessons would not have the ability to preview pull requests or update workflows. (reported: #420, @zkamvar; fixed #421, @zkamvar)
- the
create-pull-request
action is now coming from a fork in The Carpentries organisation for security.
- A typo has been fixed in the package cache vignette
- The CONTRIBUTING boilerplate has been updated to fix formatting issues
update_cache()
will now work with {renv} version 0.17.1, which lost a print method for therenv_updates
class (reported: @zkamvar, #415; fixed: @zkamvar, #416 and https://github.com/zkamvar/vise/commit/ee4798701a958ee48429980eb970266885f8265b
- @jcolomb has been added as a contributor in the DESCRIPTION.
- New lessons will now provision
learners/resources.md
, which will allow the glossary link to work (reported: @elichad, #404 and @ManonMarchand, carpentries/workbench-template-md#20; fixed: @zkamvar, #410)
- default CONTRIBUTING file is better suited to The Workbench and no longer references the now-defunct lesson-example repository (reported and fixed: @jcolomb, #407)
- Links to assets in instructor view no longer render a 404. (reported: @brownsarahm, #404; fixed: @zkamvar, #409)
- Lessons with files that have spaces in their names (e.g as a learning tool) no longer fail to comment on pull request previews (reported: @zkamvar, #399; fixed: @zkamvar, #400)
- Excessive output from
renv::diagnostics()
during building of R Markdown documents has been suppressed.
- We now build {sandpaper} against the development version of {renv} to avoid bugs that come from {renv} version 0.17.0. See #406 for details.
- The internal function
message_package_cache()
no longer fails with {renv} version 0.17.0.
- blank or character timing estimates (e.g. XX) will now be treated as unknown and an estimate of 5 minutes will be used for each missing element. A warning will be issued listing which episodes have missing timings. (reported: @zkamvar, #395; fixed: @zkamvar, #396)
manage_deps()
will now attempt to recover errors from "missing" bioconductor packages. Note that this is a provisional solution because it treats BioConductor packages as an afterthought. The full fix for this should be when {renv} bootstraps BioConductor repositories (reported: @zkamvar, #365 and rstudio/renv#1110; fixed: @zkamvar, #397)
update_cache()
andpin_version()
will now find the root path of the lesson before checking and manipulating dependencies. This will circumvent the issue where a user could accidentally create aepisodes/renv
folder by runningupdate_cache()
from theepisodes/
directory (discovered: @sarahkaspar; reported: @zkamvar, #391; fixed: @zkamvar, #392).
- The setup page will always be provisioned for lessons regardless if it
exists in the
learners:
field inconfig.yaml
(reported: @zkamvar, #386; fixed: @zkamvar #387).
- This updates {sandaper} to be used by pandoc version 3, which no longer
implements the
pandoc.Null()
constructor for Lua filters (reported: @zkamvar, #380; fixed: @zkamvar: #385)
- Pull Request workflows will now automatically cancel if several commits are
sent in succession. Specifically, the workflows
pr-recieve.yaml
andpr-comment.yaml
are given separateconcurrency
parameters based on the branch name and the pull request number. These concurrencies will prevent false alarms as found in carpentries/lesson-development-training#165 (comment). (discovered: @anenadic; reported: @zkamvar, #374; fixed: @zkamvar, #376)
-
The
create_syllabus()
function no longer usespkgdown::as_pkgdown()
and assumes a flat file structure when creating the syllabus. This provides a further fix for #371. -
The downlit shim has been updated to modify the function bodies while preserving the function signatures.
-
workflows for testing on Windows has been fixed by setting the git config
autocrlf
tofalse
before checkout (thanks to @assignUser for the tip). -
The test coverage workflow has been updated to avoid long build times.
- A bug in deployment where GitHub deployments fail due to an error that says "Error: Can't find DESCRIPTION" has been fixed (reported: @tobyhodges, #371; fixed, @zkamvar, #372)
- code inside of main
build_
functions cleaned up. Unused variables removed and narrative comments added to provide context.
- Documentation for internal storage objects updated.
- Page progress indicators reflect estimated percentage progress through the lesson based on the timings recorded in each episode as opposed to fraction of pages (reported: anonymous, #369; fixed @zkamvar, #370).
- schedule/syllabus timings are now displayed as XXh XXm to clarify the scope of the timing (requested: @tobyhodges, #361; fixed @zkamvar, #363).
- Documentation for automated pull requests updated to reflect bots should have
public_repo
scope.
- A bug where the index page title was the same for both instructor and learner view has been fixed (reported: @tobyhodges, #361; fixed @zkamvar, #366)
-
pandoc is now set to use the default version for r-lib/setup-pandoc (at the time of this update, it is version 2.19.2.
-
Workflows that update workflows and packages will now push to single branches called
update/workflows
andupdate/packages
, respectively. This will avoid the issue with #350 -
Workflows no longer use the deprecated
set-output
command (reported: @zkamvar, #349; fixed @zkamvar, #356) -
Versions of external actions have been updated to include
actions/[email protected]
- Interactive functions to modify lesson structure (
move_episode()
,set_episode()
, etc) will now display a message if the user does not specifywrite = TRUE
. This message will present a command that, when executed, will make the desired change (requested: @tobyhodges, #345, fixed: @zkamvar, #352)
- The the
source
config parameter will have the trailing/
trimmed off when passed to the site so that the URL does not have two consectutive slashes.
renv/sandbox
no longer required in.gitignore
. A new bug introduced in 0.10.2 caused all lessons built before 0.10.2 to fail when rebuilt on CI. This was due to the assumption that the .gitignore itemrenv/sandbox
was strictly necessary with no clear method to automatically update a file like this (reported: @zkamvar, #347; fixed: @zkamvar, #348).
- An accidental commit of
sandpaper-version.txt
in version 0.8.0 inside the workflow templates folder was causing workflow update script to create pull requests for the workflows every week when they should have been much less frequent (the irony of this commit is that it will trigger another pull request) (fixed: @zkamvar, #346).
- The default
.gitignore
now hasrenv/sandbox
to avoid a sandbox directory from being tracked by git. (see rstudio/renv#1088) (reported: @zkamvar; #344, fixed: @zkamvar, #343)
- The
deploy-aws.yaml
workflow has been removed as plans for its use is relegated to the beta stage of the workbench.
- If the
index.md (or Rmd)
file has atitle
YAML element, this will take precedence over the default title of "Summary and Setup". (requested: @SaraMorsy, #339; fixed: @zkamvar #342)
- Titles in navigation bar now have Markdown parsed correctly.
- The default behavior of
create_episode()
andcreate_lesson()
is to use episodes without numbered prefixes and will now automatically add episodes to the schedule (requested: @tobyhodges, #330; fixed @zkamvar, #333) - New function
move_episode()
allows the lesson contributor to move an episode in the schedule (requested: @tobyhodges, #330, fixed: @zkamvar, #333) - New functions
draft_lesson_md()
anddraft_lesson_rmd()
perform the task ofcreate_lesson(add = FALSE)
. - Helper function
strip_prefix()
will automatically strip the prefixes for all episodes in the schedule.
get_config()
now has a defaultpath
argument.- A bug where anchors for callout headings with generic names (e.g. "discussion" or "keypoints") were missing was fixed.
- A minor bug is fixed. It originated from the most recent update in {cli} where newlines in a span are collapsed. This will fix (reported: @zkamvar, #336; fixed @zkamvar #337)
- The minimum version of CLI has been updated to version 3.4.0
- Pull request response workflows have been updated to make sure their conditionals do not always default to TRUE (see carpentries/actions#56)
- css and js can now be embedded into individual pages for custom styling (see https://bookdown.org/yihui/rmarkdown-cookbook/html-css.html for implementation details).
- The pandoc extension
link_attributes
has been added to process custom link classes (see https://pandoc.org/MANUAL.html#extension-link_attributes for details).
- The CLI styling of an important message about {renv} has been fixed to be more readable (reported: @zkamvar, #331; fixed: @zkamvar, #332).
- The bioschemas metadata version has been updated to 1.0 (reported: @zkamvar, #329; fixed @zkamvar, #332).
- A test that was failing on the R-universe has been skipped
- documentation has been updated to detail the expected and optional values in
config.yaml in
set_dropdown()
- The template for the code of conduct has been updated to reflect our style guide
- The version of the s3-sync action has been corrected. This only affects lessons that deploy to AWS
- Anchor links are now included in all sections and callouts for easy navigation to sections. Thanks to @fiveop and @anenadic for requesting this feature. requested in #285 and carpentries/workbench#28; fixed in #325
set_config()
gains the optioncreate
, which will create new variables if they do not exist.
- A new workflow called
deploy-aws.yaml
has been created to deploy a site to AWS when the right secrets from AWS are available. Because this workflow does not affect normal use, I am relegating this to a patch release.
-
A new workflow called
pr-preflight.yaml
has been created to perform a quick pre-flight check on the pull request to ensure that there is no malicious activity on the lesson itself, which may look like modifying both workflow and lesson files in the same pull request. For lessons that transition to the workbench from styles in official and community-developed lessons, an extra check is added that will validate the branch of the incoming PR does not contain invalid commits. -
Pull Request workflows have been simplified.
- A bug where
fail_on_error
defaulted totrue
has been fixed. This will default tofalse
if they key is not present inconfig.yaml
(#314, @zkamvar).
- Placing
fail_on_error: true
inconfig.yaml
will set the global chunk optionerror = FALSE
for R Markdown documents, meaning that if an error is produced from a chunk, the build will fail unless that chunk explicitly uses theerror = TRUE
option. (requested: #306 by @davidps, implemented: #310 by @zkamvar)
- The sidebar navigation in mobile and tablet views now includes all the information that was included in the navigation bar for the desktop mode. (reported: carpentries/workbench#16 (comment) by @Athanasiamo and #306, fixed: #309 by @zkamvar)
- the downit shims have been updated to be resiliant to upstream changes
- the
config.yaml
template has been updated to default to incubator lessons and has more helpful information included about formatting (@tobyhodges, #302)
create_lesson()
gains thermd
parameter, which is a logical indicator that the lesson should use R Markdown (TRUE
by default). When this isFALSE
, a markdown lesson is created and no package cache is initialised.create_episode()
gains theext
parameter, which allows users to create plain markdown episodes if they do not need R Markdown functionality (see carpentries#296).
create_episode()
will now slugify titles so that they only contain lowercase ASCII letters, numbers and UTF-8 characters with words separated by single hyphens (see carpentries#294).
- The internal
check_episode()
function has been removed as it was over- engineered with marginal value.
- Running the main workflow from GitHub's actions tab now uses a checkbox to indicate if the markdown file cache should be cleared.
- The README file for the workflows no longer contains a link to an image that does not exist.
- Workflows that update lesson elements will now report a more obvious summary of next steps to take with an invalid token (see carpentries/actions#45)
- Pull requests will now report on elements of the lesson that do not pass checks.
- New YAML items can now be added at-will and will be available to varnish in
a
{{#yaml}}
context. - internal function
set_dropdown()
will preserve the yaml items that are not explicitly coded in the config menu.
build_episode_md()
argumentworkenv
now defaults toglobalenv()
to avoid S3 dispatch issues that can occur innew.env()
(see carpentries#288)
- Episodes with ampersands in their titles no longer break the aggregate page building.
- {downlit} shim has been updated to no longer fail when parsing BASH globs. (see r-lib/downlit#138)
- The sidebar now enumerates episodes so it is easier for instructors and learners to indicate episode by number instead of by name (suggested by @fiveop in #276). (@zkamvar, #277)
- {mockr} is now a suggested package (aka soft-dependency) to facilitate testing functions that do not need an entire lesson set up to test their functionality
setup-r
andsetup-pandoc
actions have been pinned to version 2setup-r
action now uses the default R installation on GitHub's runner, which decreases build times by ~ 1 minute.- All R actions will use the RStudio Package Manager, which should avoid overly lengthy build times.
- explicit permissions have been set for the deploy workflow (@zkamvar, #279)
images.html
is built with internal functionbuild_images()
, collecting all images and displaying alt text for non-screen reader users (while marking those paragraphs asaria-hidden
so that screen reader users do not have it read twice).instructor-notes.html
is now built with the internal functionbuild_instructor_notes()
and now collects instructor notes from the episodes in a section calledaggregate-instructor-notes
.
- The internal
build_agg_page()
has a new argument,append
, which takes an XPath expression of what node should have children appended. Defaults to"self::node()"
. An example of alternate usage is inbuild_instructor_notes()
, which usessection[@id='aggregate-instructor-notes']
.
- The All in One page and Keypoints page have been redesigned. These now both
use the underlying internal function
build_agg_page()
(build aggregate page). This allows slow templating processes to be performed once and cached instead of repeated for each page. It provides a framework for future aggregate pages (such as figures, instructor notes, glossary, etc). - A message is now printed when Keypoints and All-in-one pages are written to
disk if
quiet = FALSE
.
- An all-in-one page is now available for lesson websites at
/aio.html
andinstructor/aio.html
.
- Provisioning of the global lesson element cache (metadata, AST, and global
variables for varnish) is now all executed via
this_lesson()
, which is run duringvalidate_lesson()
. This simplifies the setup a bit, and provides the same method of cache invalidation (checking git outputs) for all of these elements
- custom sandpaper and varnish engines will be properly linked to the footer of the lesson pages via this version and varnish 0.1.8.
- testthat tests have been updated.
- a diagram in the vingettes has been updated to reflect the parallel roles of sandpaper and pegboard to a lesson.
keypoints.html
is now rendered askey-points.html
to fix navigation error with varnish.
- pr-receive.yaml has been updated to not report errors for workflow updates. See carpentries#263 for details
- Links from the index page to the setup or any episodes now correctly render
- Links to the setup page now redirect to
index.html#setup
(@zkamvar, #262) - The setup page is now included in the instructor view after the schedule
- The setup in the index page is now a separate section with the id "setup"
- The schedule in the instructor index page is now in a separate section with the id "schedule"
- The minimum version of {varnish} required is now 0.1.5
- A small bug in the update cache workflow that caused a silent error with no detremental effect was fixed (@zkamvar, #250)
- The minimum version for {pegboard} should be at least 0.2.3 to accomodate div validation (@sstevens2, #259)
- The minimuim version for {varnish} should be at least 1.5.0.
- Documents with footnotes without trailing newlines will now parse the external links correctly by adding a newline between the document and the links.
- Common links for markdown lessons can be included via a file at the top of the
lesson called
links.md
. If this file exists, it will be concatenated on each markdown file before it is rendered to HTML. Thanks to @sstevens2 for bringing this feature up (@zkamvar, #257) create_lesson()
now includeslinks.md
in main directory.- A new help page called
?sandpaper.options
provides documentation on the global options used in a sandpaper lesson (subject to change).
validate_lesson()
will perform checks on links and fenced divs in your lesson. This is now included in calls tobuild_lesson()
,ci_deploy()
andserve()
(@zkamvar, #255)
- the minimum pegboard version is now 0.2.0
- internal function
this_lesson()
will now properly invalidate and reset if there is a change in commit (e.g. the lesson to build has switched).
set_dropdown()
no longer fails with {cli} version 3.2.0
- metadata is now processed more consistently across page types, which will first and foremost reduces some of the code complexity, and second, allows for more rapid development of future page types. In some instances, this will result in a marginal improvement of build times, but it will not likely be noticable.
sandpaper::build_lesson()
no longer creates an infinite loop when called aftersandpaper::serve()
(@zkamvar, #247)
- Clarify license information to specify the copyright is held by The Carpentries
- invalid sitemaps have been fixed to have the correct namespace and include a slash in the site name.
- a test requring pandoc 2.11 has been suppressed on systems without that version of pandoc.
- The {pegboard} package is now required to be 0.1.0 or greater due to a fix for generating the keypoints page (carpentries/pegboard#76)
- The metadata included in the lesson footer now correctly states the
@type
asTrainingMaterial
(@zkamvar, #236) - A basic sitemap is now constructed for the lesson (@zkamvar, #243)
- Empty pages will no longer throw errors in rendering and they will not be included in the output (@zkamvar, #237)
- the internal function
render_html()
now passes the--preserve-tabs
parameter to prevent pandoc from removing educationally relevant information from the lessons. - when rebuilding a lesson with
ci_deploy(..., rebuild = TRUE)
, detritus in the lesson site will be cleaned (@zkamvar, #91).
- Add support for the updated frontend in {varnish}. This means that you will need varnish 0.1.0 installed in order to use this update. This change includes modifications to the lua filters along with the general handling of the HTML elements which means that older versions of varnish will cease to work.
- code blocks will no longer contain package links. While the links may have been handy for sighted users to explore documentation, these may represent objstructions for users who rely on screen-readers.
There are now two views of the lesson: instructor view and learner view. The
biggest difference is that instructor view gains the instructor-note
sections
(if they exist).
- Static pages for each view. This means that you can toggle between the pages without needing javascript.
- Removed timings on the learner view (to avoid discouraging our learners)
- Setup page replaces the schedule on the index page
- There are additional buttons included on the instructor view that do not yet work, but will work at some point!
The only downside at the moment is that building the lesson takes a bit longer due to the fact that we now have to render two pages for each change.
A persistant sidebar with links for the main content of the lesson will be present on all pages of the lesson. The navigation bar will prioritise items used most frequently by the respective audiences:
- Learners: Key Points, Glossary, Learner Profiles, "Additional Information" (dropdown)
- Instructors: Key Points, Instructor Notes, Extract All Images, "More" (dropdown)
- The build database now gains a "date" column which will indicate the date the file was last rendered to markdown. This allows the "last updated on" to better reflect the state of the contents from the rendered files.
- The default configuration file now includes a
keywords:
item where you can place a comma-separated list of keywords to include in the site's metadata - The configuration file now also includes an example of what provisioned navigation looks like
- The default episode template now refers to the correct documentation links and provides examples of how to represent code blocks that are not evaluated.
- The setup page now contains a structured example setup page that shows how to provide dropdown menus for different operating systems (@zkamvar, #28).
- If the user does not have a github PAT and we can not detect the name of the repository from the git setup, then the source goes to an example.com link.
- Episodes with missing timing metadata will no longer fail if they also contain questions and objectives blocks. (@zkamvar, #222).
- Internal function
renv_cache_available()
continues to work with {renv} 0.15.0. This new version of {renv} changed the default value of a configuration setting for the system cache from a logical to NULL, which casued a logical operation to fail. (@zkamvar, #223)
- {renv} is pinned to version 0.14.0 as version 0.13.2 would throw an error when checking for consent.
serve()
now allows you to work on your lesson and have it automatically rebuild whenever you save your files to disk.
- {servr} is now used in the
serve()
function.
- Lesson blocks are now treated the same as other blocks. This is a placeholder for us to better test the separation of the lesson veiw from the default learner view.
- Lessons that have readonly zlib compressed files (read: git objects) can now have their websites built. (@zkamvar, #214)
build_handout()
is now an officially exported function.- The pkgdown documentation has been updated
- Workflows have been updated to use
ubuntu-latest
instead ofmacOS-11
. The macOS runners were often ~ 1 minute faster than the ubuntu runners, but the tradeoff was potential failures when packages were not available as binary versions and would need compilation with external C libraries (along with runs failing due to brew timeouts). This update coincides with an update for the github actions, which will now check and install the ubuntu dependencies before updating/installing packages. (@zkamvar, #184)
- A situation where git would fail if it could not remove everything was fixed (#206, @zkamvar)
- Addressed CLI failures due to glue version 1.5.0 (r-lib/cli#370 (comment))
set_config()
now takes a named vector/list instead of a pair of vectors.
set_config()
will set singular items in the configuration file (@zkamvar, #193)
- Package discovery now respects the lesson environment, which was unfixed from 0.0.0.9063
- The package cache can now be built from external {renv} environments (@zkamvar, #197).
- New lessons that specify custom titles will have them reflected in the config file (@zkamvar, #195).
- lessons with colons in the title are now correctly processed (@zkamvar, #192)
- code injection in yaml is now protected against by setting
eval.expr = FALSE
in all yaml parsing calls.
- The title of the lesson will now appear in the index page.
- The translation script no longer lives in the lesson repo and has been moved (and modified) to https://data-lessons/lesson-transition/
- The scheduler for
update-cache.yaml
has been fixed to run strictly on the first Tuesday of the month instead of the first seven days of the month AND on Tuesdays.
update-cache.yaml
has been simplified to pull from the carpentries/actions repository and now updates packages that were not previously included in the lockfile (#185).
update-cache.yaml
has been fixed from a regression introduced with 4b8b14d088d03a8a9c6c90e974bb53c35691fb49 where the workflow would not run because it did not check out the repository beforehand.
update_github_workflows()
now setsclean = "*.yaml"
by default to align with the behavior of the GitHub workflow and to prevent stale workflows from being present in the repository. (#181, @zkamvar)
sandpaper-main.yaml
andpr-receive.yaml
have been simplified by using composite actions hosted incarpentries/actions/setup-sandpaper
andcarpentries/actions/setup-deps
.- The caching mechanism for R packages and the package cache can now be
reset by modifying a per-repository secret called
CACHE_VERSION
.
- A bug introduced in 0.0.0.9054 where dependencies were not discovered was fixed.
manage_deps()
runs slightly faster now that it no longer runsrenv::hydrate()
if no new packages have been added in the lesson.
- setting
option(sandpaper.handout = TRUE)
will create a code handout for R lessons that will live in/files/code-handout.R
on your site.
- An internal caching mechanism has been added for
pegboard::Lesson
objects that we use for extracting components for the syllabus and the handout. See?lesson_storage
for details.
pr-receive.yaml
has fixed spelling.pr-receive.yaml
has changed to short-cut the invalid PR messages and no longer build the lesson if the PR is invalid. Instead, it will emit the same warning message without building artifacts.pr-comment.yaml
will no longer fail when no artifacts exist (which would cause extraneous emails for users).
- Documentation for test fixtures has been improved to include branch functions.
The template for the pull request message reverts back to two-dot diff notation between branches, which is temporary until #169 can be addressed. Linebreaks within paragraphs have been removed to avoid github formatting them as linebreaks.
This update for {sandpaper} brings in dependency management for lessons with generated content which will make collaboration between these lessons much easier and less invasive by establishing a package cache and lockfile via the {renv} R package.
We use the {renv} package for controlling dependency management in the lesson, which is contained in a {renv} profile called "lesson-requirements". We have implemented this as a profile instead of the default {renv} environment to give the maintainers flexibility of whether or not they want to use the package cache.
getOption('sandpaper.use_renv')
will be set when {sandpaper} loads to detect if the contributor has previously consented to use the {renv} package. If this isTRUE
, the lesson will use a package cache, otherwise, the lesson will use the default library.use_package_cache()
will give consent to {sandpaper} to create and use a package cache via {renv}. Internally, this enforces thatoptions(sandpaper.use_renv = TRUE)
.no_package_cache()
does the opposite ofuse_package_cache()
and revokes consent to use the package cache in a lesson temporarily. This can be useful in situtations where the cache is mis-behaving or you want to test the lesson using a newer set of packages. Internally, this enforces thatoptions(sandpaper.use_renv = FALSE)
.package_cache_trigger(TRUE)
allows you to trigger a full rebuild when the lockfile changes. This is set toTRUE
by default onci_build_markdown()
manage_deps()
is a new function that will manage dependencies for a lesson. This is called both increate_lesson()
andbuild_markdown()
to ensure that the correct dependencies for the lesson are installed. This explicitly callsuse_package_cache()
when it runs.update_cache()
will bring in updates for the lesson cache.pin_version()
will pin packages to a specific version, allowing authors to upgrade or downgrade packages at will.
create_lesson()
now additionally will create a {renv} profile called "packages" in the lesson repository ifgetOption('sandpaper.use_renv')
isTRUE
. This will make the lesson more portable.- index and README files can now be Rmd files (though it is recommended to use .renvignore for these files if they are to avoid {sandpaper} becoming part of the package cache).
- internal function
ci_deploy()
will setsandpaper.use_renv
option toTRUE
build_markdown()
and thusbuild_lesson()
will now cacheconfig.yaml
andrenv.lock
. It will no longer step through the build process if no markdown files need to be rebuilt. This will cause any project built with previous versions of sandpaper to be fully rebuilt.sandpaper_site()
(and thus,build_lesson()
) now can take in a single file for rendering and render that specific file regardless if it is present in the cache without rendering other files. This further addresses #77. (n.b. this involved changes tobuild_markdown()
,build_site()
, andbuild_status()
).varnish_vars()
is a list that contains commonly used variables in the lesson that can not be contained in the config.yamlbuild_episode()
andbuild_home()
now supply default variables to varnish.
- unexported function
ci_deploy()
will now automatically check and set the git user and email. sandpaper-main.yaml
andpr-receive.yaml
have been updated to include the {renv} cache, but they will skip these steps for markdown lessons.update-cache.yaml
is a new workflow that will update the package cache lockfile and create a pull request to trigger new builds if the lesson uses {renv}.update-workflows.yaml
now produces more informative instructions for creating a repository secret.
- some of the {callr} functions have been made non-anonymous and moved to a separate file so they could be tested independently.
- changes to
config.yaml
are now reflected on the lesson site without rebuilding (fixes #75) - knitr option
root.dir
has been set to the output directory to avoid generated content from entering the source.
This is a placeholder for the testing of 0.0.0.9050.
- pandoc lua filter no longer errors on raw div HTML elements with no class (@zkamvar, #166)
- The
update-workflows.yaml
workflow now checks if theSANDPAPER_WORKFLOW
secret is valid. If not, it provides instructions for creating a new secret.
- Weekly run pull requests now default to "weekly run" for "who triggered this pull request"
- Weekly run has been added for the workflows action
- Actions have been updated to reflect the zkamvar -> carpenteries repository transfer (@zkamvar, #156)
- The
update-workflow.yaml
parameters have been fixed to not use wildcards
update_github_workflows()
gains aclean
argument and now will print status reports at the end.
- The
update-workflow.yaml
workflow has been updated to use the github action hosted onzkamvar/actions
(soon to be transferred to The Carpentries account - The names of the actions displayed on GitHub have been updated to be more descriptive.
- The script in
inst/scripts/update-workflows.sh
has been removed in favor of the github action.
- An experimental
update-workflow.yaml
workflow has been created which will create a pull request that will update the workflows. It is still very experimental and it requires a scoped with repo and scope, but, nevertheless, the concept is currently valid.
fetch_github_workflows()
has been renamed toupdate_github_workflows()
- github workflows are no longer downloaded from an external source; they now live in inst/workflows. This will reduce the internet connection requirements for setting up a lesson and testing sandpaper.
create_lesson()
now reports progress as it goes along- tests were updated to use the fixtures
ci_deploy()
gains thereset
argument, which can be used to clear the cache for a clean build of the lesson.ci_deploy()
now usesci_build_markdown()
andci_build_site()
, internally
ci_session_info()
will report the session information, which will help clean up the workflow files.
- Fix broken deploy process on continuous integration caused by attempting to fetch all branches in a shallow clone (@zkamvar, #142)
- Output of
ci_bundle_pr_artifacts()
no longer escapes HTML-like output in the diff summary. - remove {xml2} from explicit dependencies
- Documentation for
git_worktree_setup()
has been added for future versions of the maintainer and future contributors. ci_bundle_pr_artifacts()
is a new internal function that will create artifacts for GitHub to upload upon receipt of a pull request. This will replace clunky shell code that lived inside a YAML configuration file. (@zkamvar, #139)- add {brio} to soft dependencies (for testing, but maybe could speed up???)
- Tests for git operations were added to be more robust (@zkamvar, #137)
- new test fixtures for a local remote repository was added to aid the above git tests.
- Authors can now cross-link between files within the lesson as they appear in
the lesson instead of trying to guess how the link would appear on the
website. For example, if you wanted to reference
learners/setup.md
inepisodes/introduction.md
, you would write[setup](../learners/setup.md)
and it will be automatically converted to the correct URL in the website (#43). This is still backwards compatible with the previous iteration of writing the flattened link (as it would appear on the website).
get_drafts()
will report any markdown files that are not currently published in the lesson.- Draft alert notifications are controlled by the
"sandpaper.show_draft"
option. To turn off these messages, useoptions(sandpaper.show_draft = FALSE)
- The
set_dropdown()
family of functions will now throw an error if an author attempts to add a file that does not exist - An error will occurr if the files listed in
config.yaml
do not exist in the lesson with an informative message highlighting the files that are missing.
- The internal
get_resource_list()
function has been modified to incorporate the features ofget_dropdown()
. This means that allget_dropdown()
functions will only report the files in the dropdown menus that actually exist in the directory (#134). - A persistant test fixture is now included to speed up testing time (#132 via #134)
- The {cli} package is now an official import of the package
- The warning message issued from the internal
warn_schedule()
function has been changed exclusively use cli messages and can be suppressed withsuppressMessages()
. - The internal
sandpaper_cli_theme()
is used to style CLI messages.
- A test that caused problems with a new version of {pegboard} was fixed
- The internal database is updated to use relative instead of absolute paths. This fixes #129
The {pingr} package is now being imported to check for online access, which will marginally decrease data usage (@fmichonneau, #127).
create_schedule()
(internal function) no longer uses pegboard's extensions for fixing reference links.
- callout blocks with headers greater than h3 are now rendered properly and no longer forced to h3
- tests now clean up after themselves and no longer change the working directory by default
- {varnish} version bumped to 0.0.0.9005
- tests that require pandoc will be skipped if pandoc is not available
- tests for the presences of multiple files will use setequal instead of equal to allow for alternate sorting orders.
- required {pegboard} has been bumped to version 0.0.0.9014
- {renv} and {sessioninfo} added to Suggested packages.
create_lesson()
will now enforce "main" or the default branch (if init.defaultBranch is set) as the default branch for the new lesson. It will also try to make the URL match the project name and user name (but the latter is limited to users who have GitHub PAT set up that {gh} recognises).
build_episode_md()
now sets theknitr.pandoc.to
knit option to allow for the chunk optionfig.cap
to be rendered as a caption. This fixes #114.
set_dropdown()
is now generalized to set any item in the dropdown menu (though this will likely be wrapped into a better-named function for generalized editing).system.file("transform.R", pacakge = "sandpaper")
points to a file that will be used for transforming styles-repo era lessons to sandpaper lessons.- read/write cycles were reduced in markdown generation because we are no longer interfering with the manipulation of the files at this stage (and haven't been for a while now).
build_markdown(rebuild = TRUE)
now actually rebuilds the lesson- Changing an episode suffix will no longer result in a build error. This was
due to
build_markdown()
trying to clean after building the output instead of before. It's a situation of throwing the baby out with the bathwater. In any case, this fixes #102.
- the template will be initialized with ALL folders with placeholders inside
of the
instructor/
andprofile/
menus. This fixes #103.
- the
set_*()
functions no longer mess up yaml lists inconfig.yaml
. This fixes #53.
- The required version of {pegboard} has been bumped to 0.0.0.9012, which gives better error messages and allows us to read in {sandpaper} lessons with the Lesson object.
- The episode template has been rearranged slightly and given level 2 headers.
- The version of pandoc will be explicitly checked to ensure that the version used is at least 2.11.
create_episode()
withmake_prefix = FALSE
will no longer create episodes prefixed with-
(see #93).
fetch_github_workflows()
will download and update the GitHub workflows from the Carpentries actions repository.update_varnish()
will download and update the {varnish} styling package to your local repository.
- Episode order is retained in the HTML navigation (#85)
- index.md is recorded in the site/build/ directory, and thus in the md-pages branch on deployment.
The caching mechanism is now similar to that of {blogdown} where a database of source files and their checksum hashes is kept and only the updated files are built. This provides two advantages, the first is that we no longer have to peek at the top of the files to check if they need to be updated and the second is that we can keep the files in the right order (see #85)
Importantly, the workflow itself should not be affected, but there will be changes in what gets displayed on the github diff of the md-outputs branch.
- In RStudio, the knit button works 🎉 (fix #77; @zkamvar, #82)
sandpaper_site()
is a site generator function that allows {rmarkdown} to use the {sandpaper} machinery to build the site fromrmarkdown::render_site()
build_site()
gains aslug
argument that tailors the previewed content.create_lesson()
will now create a blankindex.md
withsite: sandpaper_site
as the only YAML item.- HTML accidentally rendered to the source directories are silently removed when the site is built. (fix #78, @zkamvar, #84)
- Inline and reference-based footnotes are now supported.
- Bare links and text emoji (e.g. 😉) are now rendered (fix #67).
- Objectives and Questions headings will now no longer be rendered (fix #64).
- If
index.md
exists at the top level, it will be used instead ofREADME.md
for the lesson index page (fix #56).
- The lua filter responsible for creating the Objectives summary block at the beginning of episodes now uses native pandoc divs instead of HTML block shims. This ensures that the content is not corrupted by pandoc's section divs extension. This addresses issue #64
- All aside elements will be forced to have level 3 headers (this fixes an issue with pandocs --section-divs where it couldn't understand when an HTML block contained only the start of an aside tag and decided to end the section right after it.
- The Objectives and Questions blocks will no longer include their headers in the initial summary block.
- A bug introduced in version 0.0.0.9008 was fixed. This bug improperly used regex resulting in the accidental removal of cached rendered images. This fixes issue #49
- Rendered images now have the prefix of
{SOURCE}-rendered-
in thesite/built/fig/
subdir.
- files that were removed from the source are now also removed in the site/built directory. This fixes issue #47
-
HTML will now be processed with pandoc lua filters that will do the following:
- overview block will be constructed from the teaching and exercises metadata with the question and objectives blocks
- instructor and callout divs will be converted to
<aside>
tags - divs without H2 level headers will have them automatically inserted
- divs with incorrect level headers will have them converted to H2
- only divs in our list of carpentries divs will be converted
-
README updated to reflect API changes
Continuous integration functions added:
ci_deploy()
will build the markdown source and the site and commit them to separate branches, including information about their source.ci_build_markdown()
will build the markdown source files and commit them to a separate branch, including information about the source commit.ci_build_site()
will build the site directly from the markdown branch, bypassing re-rendering the markdown files.
Miscellaneous additions
- {dovetail} no longer in suggests
- new internal function
build_site()
compartmentalizes the conversion from markdown to html - any files or folders named
.git
in the episodes directory will not be copied over to the website.
- sandpaper now requires and uses additional folders and files:
- CODE_OF_CONDUCT.md
- learners/Setup.md
- instructors/
- profiles/
- LICENSE.md
_schedule()
functions have been renamed to_episodes()
.clean_*()
functions are now renamed toreset_*()
- Generic
set/get/reset_dropdown()
functions have been created to facilitate modification/access of folders that are dropdown menus inside of the lesson - questionable practices with directories mucking about.
build_markdown()
will now generate artifacts in thesite/built/assets/
directory instead ofepisodes/
directory to prevent generated artifacts from being included in git (See carpentries#24)
- Internal
html_from_md()
renamed torender_html()
- Internal
build_episode()
renamed tobuild_episode_html()
and exported, but documentation still internal - Internal
build_single_episode()
renamed tobuild_episode_md()
and exported, but documentation still internal
- A regression in
build_markdown()
due to being called in a separate process was fixed. - Internal functions for setting {knitr} options were migrated to live inside
build_markdown()
- Migrate template to use fenced divs instead of {dovetail}.
build_lesson()
will now render HTML in episode titles.- {callr} is now imported to protect the processes building markdown and HTML files.
- Add
override
argument tobuild_lesson()
. This gets passed on topkgdown::as_pkgdown()
for more control over where the site gets built. - Update dependency of {pegboard} to 0.0.0.9006, which includes the $questions field to make parsing the ever shifting landscape a bit easier.
- First tracking version with NEWS