Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Effort-based Versioning. (Changes to features documented as “experimental” will not increment macro and meso version numbers.)
Unreleased¶
4.0.0 - 2026-09-02¶
Compatibility with StepUp Core 4, a refactored Zenodo synchronization and more reliable concurrent notebook conversion.
Note that all changes of the 4.0.0rc* release candidates are combined below.
Added¶
- Support for
os.PathLikeobjects instepup.reprep.apifunctions. - The
resourcesanddurationarguments ofstepup.core.api.run()are accepted by allstepup.reprep.apifunctions. - An optional
inpargument incompile_typst()to specify additional input files on which the typst source may depend. If not given, these dependencies are detected automatically after the typst compilation. When some of these additional inputs are the outputs of other steps, specifying them may improve scheduling efficiency. - A
shellargument inwrap_git(), to run the wrapped git command through a shell. - The configuration file of
srr-sync-zenodomay be written in YAML, JSON or TOML. The parser is selected by the suffix of the file name:.yamland.yml,.jsonor.toml. YAML remains the recommended format, because it is the only one that supports comments. A file named.zenodo.jsonis rejected, because that is the metadata Zenodo reads when it archives a GitHub release, which follows a different schema. - A
--dry-runoption insrr-sync-zenodo, which validates the configuration, resolves the description, prints the metadata that would be sent to Zenodo and exits. Unlike an unsetREPREP_ZENODO_TOKEN, this does not depend on the environment. - A
custom_fieldssection in the configuration file ofsrr-sync-zenodo, holding the fields with which Zenodo extends the InvenioRDM record. The former top levelcode_repositoryfield moved into this section, and seven fields are new:development_status,programming_languages,rights_holder,journal,meeting,imprintandthesis. Zenodo deploys them ascode:developmentStatus,code:programmingLanguage,dc:rightsHolder,journal:journal,meeting:meeting,imprint:imprintandthesis:thesis. Everything that can be checked without contacting Zenodo is checked locally: the ISSN of a journal, the ISBN of an imprint, the URL and the identifiers of a meeting, and a thesis date that looks like a plain calendar date. There is nocreatorcustom field, because it would repeatmetadata.creatorsas free text, without ORCIDs or affiliations. - A
metadata.languagesfield in the configuration file ofsrr-sync-zenodo, which takes ISO 639-3 language codes, e.g.engfor English.
Changed¶
- The StepUp RepRep source code has been relicensed under
LGPL-3.0-or-later. This clarifies that users of StepUp can assign any license of their choice to the workflows they create with StepUp (e.g.,plan.pyand related files). This has always been the intention, but with this change, it becomes legally explicit. - Compatibility with StepUp Core 4.
This removes the
blockargument from everystepup.reprep.apifunction, and replaces thepoolargument ofconvert_jupyter()andexecute_papermill()by the more generalresourcesargument. Existingplan.pyfiles must be updated accordingly. - Replace all
stepup.actionsandstepup.toolsentry points by standard console scripts, all with thesrr-prefix. For example,stepup make-inventorybecamesrr-make-inventory. - The
convert_jupyter()function passes parameters to the notebook like papermill does: the newparametersargument takes a dictionary whose items are assigned in a cell inserted after the cell taggedparameters. Thenbargsargument and theREPREP_NBARGSenvironment variable are gone, and so are thejupyterargument and theREPREP_JUPYTERenvironment variable, because the conversion calls thenbconvertPython API instead of thejupyterexecutable. - Rename environment variables for consistency:
REPREP_KEEP_TECTONIC_DEPS->REPREP_TECTONIC_KEEP_DEPSREPREP_KEEP_TYPST_DEPS->REPREP_TYPST_KEEP_DEPS
- The Zenodo synchronization has been refactored, including some breaking changes:
- The
srr-sync-zenodocommand no longer amends input files. Instead, all inputs are determined whensync_zenodo()is called. This has two consequences:- The files to upload to Zenodo are no longer listed
in the
pathsfield of the configuration file. Instead, they are passed as the second argument ofsync_zenodo()and as positional arguments ofsrr-sync-zenodo, after the configuration file. Both entry points reject duplicate file names and more than 100 files, which Zenodo does not accept. - The description is no longer taken from the
path_readmefield ofsync_zenodo.yaml. Instead, it is passed with thepath_descriptionargument ofsync_zenodo()and with the--descriptionoption ofsrr-sync-zenodo. (Markdown is converted to HTML automatically.)
- The files to upload to Zenodo are no longer listed
in the
- The token must be specified in the
REPREP_ZENODO_TOKENenvironment variable, instead of being specified in the configuration file. The old variableREPREP_PATH_ZENODO_TOKENis no longer supported. Note thatREPREP_ZENODO_TOKENholds the token itself, whereasREPREP_PATH_ZENODO_TOKENheld the path to a file containing the token. WhenREPREP_ZENODO_TOKENis unset,srr-sync-zenodovalidates the configuration and exits without contacting Zenodo. The endpoint stays a field of the configuration file,endpoint, which is optional and defaults tohttps://sandbox.zenodo.org/api. Because StepUp tracks the configuration file, switching between the sandbox and the production instance invalidates the step. - Unsupported keys in
sync_zenodo.yamlnow raise an error instead of being ignored, and values that must be strings are no longer coerced silently. For example, an unquotedversion: 1.0is rejected instead of becoming"1.0". - The identifiers of an award in the
metadata.fundingsection are written like those of a meeting, as entries with anidentifierand an optionalscheme. They used to be entries with the scheme as the only key and the identifier as its value, which described the same thing in two ways within one configuration file. - Every field that takes an identifier from a controlled vocabulary of Zenodo
is validated against the identifiers Zenodo has deployed:
languages,license,resource_type,relation_type,development_statusandprogramming_languages. An identifier that Zenodo does not know makes a deposit fail, so it is rejected locally instead, with an error message naming the vocabulary and its URL. Two resource types thatsrr-sync-zenodoused to accept are gone, because Zenodo no longer offers them:audio, for whichvideois the replacement, andpublication-thesis, for whichpublication-dissertationis. The identifiers live inzenodo_vocabularies.yaml, which is regenerated from the Zenodo API bytools/update_zenodo_vocabularies.pyin the source repository. - The fields that Zenodo requires are also required in
sync_zenodo.yaml, and the length bounds that Zenodo enforces are checked locally:metadata.creatorsholds at least one creator, every creator carries afamily_name, andmetadata.titlecounts at least three characters. - The
metadata.publisherfield is required. It used to be optional, but Zenodo refuses to publish a record without a publisher, because it needs one to register a DOI, so a missing publisher is now reported before the record is created. - The
metadata.versionfield may follow any convention, as long as it is a non-empty string of at most 191 characters. Zenodo stores it as free text and does not order the versions of a dataset by it, sosrr-sync-zenodoonly tests it for equality with the versions published on Zenodo. It creates a new version on Zenodo when the local version was never published, and refuses a version that is already published, which is usually a stale checkout or a revert instead of a new release. For the same reason, it refuses to synchronize a record that is no longer the latest published version of the dataset. - Only the metadata keys that carry a value are sent to Zenodo.
The keywords are deposited as subjects only,
because the InvenioRDM metadata has no keyword field.
As observed on the sandbox on 2026-09-01,
Zenodo silently dropped the unknown
keywordskey and accepted the empty values, so this does not change the records deposited with earlier versions. - When a value in
sync_zenodo.yamlis rejected, the error message now explains what is wrong with it, instead of only stating that the value is invalid. - Everything that the user has to correct, and every request that Zenodo refuses,
is reported as a message on standard error, after which
srr-sync-zenodoexits with code 1. It used to re-raise the exception after printing the message, so the diagnosis was followed by a traceback, which for a rejected config file was a nested exception group of about forty lines, most of them pointing into the structuring code thatcattrsgenerates. Only the errors that this command raises on purpose are reported this way. An unexpected error still ends in a traceback, because that is a bug to be reported. - The documentation and the example now recommend the names
sync_zenodo.yamlfor the configuration file andzenodo_description.mdfor the description, instead ofzenodo.yamlandzenodo.md, because the old names are easily confused with the legacy.zenodo.jsonfile. These names are only a convention:srr-sync-zenodoandsync_zenodo()accept any path. -
The documentation of the Zenodo synchronization is split into three pages:
- A guide, which also explains how the legacy
.zenodo.jsonfile and the two Zenodo APIs relate to each other. - A reference of the configuration file, with one section per top level key.
- A page with the relevant Zenodo vocabularies, which is generated from the Zenodo API.
The
accesssection, which decides who can see the record and download its files, is documented for the first time. - A guide, which also explains how the legacy
- The
Removed¶
- The
stepup.reprep.tile_pdfmodule, with itsFigureandPanelclasses, has been removed, as it is no longer needed. This is easily replaced with a simple typst input. - The
compile_typst()function no longer scans thesysinpdictionary forPathobjects to automatically mark them as input dependencies.
Fixed¶
- Many issues have been fixed in
srr-sync-zenodo:- In
sync_zenodo.yaml, a single value written where a list of strings belongs is read as a one element list. For example,keywords: coffeeis the same as a list holding one keyword. This works for every field that takes a list of strings:keywords,license,languages,programming_languagesandrights_holder. It already worked forlicense, whereaskeywordswas previously split into a list of characters. A value that is neither a string nor a list of strings is rejected with a message naming the expected type. - A record that carries no version on Zenodo is read
instead of causing a
KeyError. Zenodo does not require a version, so a record deposited through its web interface beforesrr-sync-zenodowas adopted may well have none. Such a record never matches the local version, so a new version is created for it. - The
--cleanoption removes the drafts that Zenodo serves beyond the first page of the records of a user. As observed on 2026-08-30, that page holds at most 25 records, so the drafts of a user with more records than that were silently left behind. - A run that is given no files to upload no longer fails. It declared an empty list of uploads, which Zenodo rejects, after it had already created the record, so every run left another draft behind without recording its id. Note that Zenodo refuses to publish a record without files, as observed on the sandbox instance on 2026-08-30.
- The publication date of a record that is already published is kept. The date of the build was sent with every metadata update, which moved the publication date of a published version to the day of the last build. A record that is not published yet is still dated on the day it was last synchronized, and a new version still gets the date on which it is created.
- Every request sent to Zenodo times out after 60 seconds, instead of waiting forever for a connection that stalls. A request that cannot reach Zenodo at all is reported as a message, like a request that Zenodo refuses, instead of as a traceback.
- A record is read as published only when Zenodo answers that its draft does not exist. Any other response, such as a refused token or an error of a gateway, is reported instead of being mistaken for a record without a draft.
- The file name in the address of an upload is escaped,
so a name holding a character that delimits a URL, such as
#or?, no longer truncates that address. - When the local files differ from those of a published version, the message explains that the version in the configuration file has to be changed, instead of only reporting the difference.
- The metadata of a draft is sent before the files are uploaded, because Zenodo only accepts an upload to a record whose metadata has enabled its files. A draft that was created without files could therefore not be given any. The metadata is sent again after the upload, so that Zenodo also applies the order of the files and the default preview.
- A rejected value is reported with the message of the validator alone.
A value outside a fixed set, such as an unknown
access.record, used to be followed by the internal representation of the attribute, and an unknownrelated.schemeby the validators of every scheme Zenodo knows. - The run after a failed upload finishes the draft that was left behind.
A file is declared to Zenodo before its content is sent,
so an upload that broke off halfway left a file name without content,
which the next run compared to a checksum that Zenodo does not have yet.
It reported an unexpected checksum format instead,
which left
--cleanas the only way forward. - The directory of the file named by
path_record_idis created when it does not exist, and a failure to write that file is reported as a message. Because the file is not an output of the step, its directory is not prepared for it, so apath_record_idinside a directory that a build does not create ended in a traceback right after the record was created on Zenodo. - A string written where a list of sections belongs, such as
creators: Jane Doe, is reported once instead of once per character, and a scalar written where a section belongs names the type of the value. - The files to upload are checked for existence before Zenodo is contacted.
- A paginated search result is no longer collected beyond a hundred pages, so a Zenodo instance that keeps sending full pages no longer causes an endless loop.
- A record, a file entry or a commit response in which Zenodo leaves out
the id, the checksum or the size is reported as a message instead of a
KeyError. - A trailing slash on the
endpointinsync_zenodo.yamlis removed, so that it does not end up in the middle of every address.
- In
srr-compile-tectoniconly scans theerror:lines of Tectonic’s standard error stream for missing input files. As of Tectonic 0.17, a halted run also dumps the engine transcript to that stream, from which paths were picked up that are no files at all.- The Jupyter kernels started by
convert_jupyter()andexecute_papermill()now communicate over ZeroMQ IPC sockets in a private temporary directory, instead of TCP sockets on localhost. When many notebooks were converted in parallel on a single machine, some conversions could fail with “Address already in use”, becausejupyter_clientselects free TCP ports before the kernel binds them.
3.1.11 - 2026-06-16¶
Switch to typst 0.15 and use its improved dependency tracking in compile_typst.
Changed¶
- The
compile_typst()function has improved dependency tracking, based on the new JSON deps format of typst 0.15. Older versions of typst are no longer supported.
3.1.10 - 2026-04-28¶
This is a minor bugfix release.
Fixed¶
- Allow for HTML output files in
compile_typst.
3.1.9 - 2026-03-22¶
Refactor wrap_git to support more flexible specification of inputs and outputs.
Added¶
- Support for extra
inp,env,out, andvolarguments in thewrap_gitAPI. For example, this allows one to specify that the git command uses a file like.gitattributes. Changes to this file will then trigger the git command to be re-executed in the next build.
Changed¶
- The old
outargument ofwrap_gitis renamed tostdoutto clarify that it only refers to the stdout of the git command, and to allow for other output files to be specified with the newoutargument. Existingplan.pyfiles must be updated accordingly.
Fixed¶
- Update WeasyPrint dependency to version 68.0 to address a security vulnerability in earlier versions. See https://github.com/advisories/GHSA-983w-rhvv-gwmv.
- Update nbconvert dependency to version 7.17.0 to address a security vulnerability in earlier versions. See https://cwe.mitre.org/data/definitions/427.html.
3.1.8 - 2025-12-28¶
Bugfix release
Changed¶
- Replace
pybtexby simpler built-in BibTeX parser inbibsanewritten in Lark. This eliminates a external dependencies, in particularlatexcodec, which caused some issues. - Only report unused citations in
bibsane, instead of dropping them. - Downgrade
cattrsdependency to facilitate installation. - Updated reference test outputs for StepUp Core 3.2.
Fixed¶
- Gracefully handle missing pagination in
bibsanewhen reformatting page ranges.
3.1.7 - 2025-12-20¶
Bugfix release
Added¶
- Bibsane can automatically add braces around words in titles that contain uppercase letters, to avoid unwanted lowercasing by BibTeX styles. This rule applies to titles and journal titles.
Changed¶
- Distribute smaller source package.
Fixed¶
- Correctly report merged records in bibsane’s screen output.
- Fix handling of LaTeX encoding in bibsane and abbreviation of journal names with non-ASCII characters.
3.1.6 - 2025-11-21¶
Preliminary Tectonic support and minor fixes.
Added¶
- Experimental support for the Tectonic LaTeX engine via the
compile_tectonic()function.
Fixes¶
- Minor cleanups.
3.1.5 - 2025-11-11¶
Update for Typst 0.14, refactored bibsane using pybtex.
Changed¶
- Refactor bibsane to use
pybtexinstead ofbibtexparserfor reading and writing BibTeX files. Several minor issues have been fixed in the process, which result in a small change in behavior. Most notably, the indentation style has changed because this is yet not configurable inpybtex. - Rename
wrap_gitaction towrap-gitfor consistency with other StepUp actions. - Update
compile_typstto work with Typst 0.14.
3.1.4 - 2025-10-18¶
Improved sync_zenodo function.
Added¶
- Verbose option for
sync_zenodo() - Allow overriding
path_tokeninsync_zenodo()with theREPREP_PATH_ZENODO_TOKENenvironment variable. - Add support for multiple licenses in
sync_zenodo().
Fixed¶
- Fix Zenodo draft publication REST API.
3.1.3 - 2025-09-28¶
Minor API improvements.
Changes¶
- Add support for other objects than
dictfor thesysinpargument ofcompile_typst(). - The dictionary passed to the
sysinpargument ofcompile_typst()is now sanitized to only contain strings as keys and values. Integer, float and path values are converted to strings automatically. - Add sanity check on the positional argument of
sanitize_bibtex()to ensure that it is a.bibfile.
3.1.2 - 2025-08-25¶
This is a minor feature release.
Added¶
- The function
scan_latex_depsnow has aamend=Trueoptional argument. If it is used in a workflow, it will by default amend the current step with all scanned TeX sources as inputs.
3.1.1 - 2025-06-25¶
Minor improvements (Zenodo synchronization, LaTeX dependencies).
Added¶
- Detect dependencies in LaTeX from
includepdfcommands. - Add
copyrightfield to Zenodo metadata.
Fixed¶
- Fix minor documentation inaccuracies.
3.1.0 - 2025-06-23¶
More powerful sync_zenodo command that uses the Invenio RDM API.
Changed¶
- Switch from the official Zenodo API to the Invenio RDM API.
This is a breaking change, with a new layout of the
zenodo.yamlconfiguration file. See the Zenodo synchronization documentation for details. - Add support for more metadata fields in the
zenodo.yamlconfiguration file. This includes support for keywords, multiple affiliations, RORs, related identifiers, funding information and code repository. - Add the
--cleanoption tosync_zenodoto remove all draft uploads from Zenodo. (Mainly useful for testing purposes.) - Human-readable output when the
zenodo.yamlconfiguration file contains schema errors.
3.0.5 - 2025-06-22¶
This is a bugfix release.
Fixed¶
- Ignore links returned by the Zenodo API that are not strings in
sync_zenodo. - Amend a
make_inventorystep with all files in an inventory as inputs.
3.0.4 - 2025-06-21¶
Support for ORCID field in sync_zenodo.
Changed¶
- Added ORCID field to the author metadata in the
sync_zenodoconfiguration file.
3.0.3 - 2025-06-14¶
Replace a few more markdown imports.
3.0.2 - 2025-06-14¶
Small improvements and a wrapper for git commands that depend on the commit id.
Added¶
wrap_git()to define shell commands (typicallygit ...) that need to be re-executed when the current git branch or commit changes.
Changed¶
- Use the
markdown-it-pypackage instead ofmarkdownfor more precise and faster markdown rendering.
Fixed¶
- Make
flatten_latex()work with other file extensions.
3.0.1 - 2025-05-31¶
Integration with papermill to execute notebooks, and a few bug fixes.
Added¶
- Execution of notebooks with papermill,
using the
execute_papermill()API function.
Fixed¶
- Fixed outdated information in the Zenodo synchronization documentation, and fixed corresponding outdated code.
- Remove
linear=Trueargument when saving a PDF with MuPDF because it is no longer supported as of MuPDF 1.26. (It was not terribly useful in the first place.) For more details, see https://artifex.com/blog/mupdf-removes-linearisation.
3.0.0 - 2025-05-11¶
Major release with breaking changes, compatible with StepUp Core 3.
Changed¶
- Breaking:
- Compatibility with StepUp Core 3.
- Migrated
render_jinja()to StepUp Core 3.
2.3.6 - 2025-04-24¶
Make sanitize_bibtex() work without LaTeX and add support for TOML files in render_jinja().
Added¶
- Support for TOML files in
render_jinja().
Changed¶
- Make
sanitize_bibtex()usable without LaTeX. - New output files in the LaTeX fls file are treated as volatile outputs.
2.3.5 - 2025-03-13¶
Bug fix in rr-cat-pdf and simplify journal abbreviation in rr-bibsane.
This requires an update the bibsane.yaml configuration file.
Fixed¶
- The
--insert-blankopton ofrr-cat-pdfwas always active, even when not present on the command line, which is now fixed. -
The
abbreviate_journalfeature of bibsane used to work with a cache file, which was a remnant from an older implementation. This no longer made much sense (because pyiso4 is fast enough) and it cache files may cause non-reproducible behavior. (They are both inputs and outputs.) For these reasons, the cache feature is replaced by two configuration fields inbibsane.yaml:- A boolean flag
abbreviate_journalsto enable abbreviations. - An optional mapping
custom_abbreviationswith abbreviation overrides for when pyiso4 does not give the desired result.
- A boolean flag
An external file with abbreviations is no longer needed.
They are just included in the bibsane.yaml file.
(This also means that old bibsane.yaml config files may need to be updated.)
See Sanitizing BibTeX files for more details.
2.3.4 - 2025-03-09¶
Improved handling of LaTeX fls file and refactored make_inventory() function.
Changed¶
- The arguments of
make_inventory()are now variadic. Files to be included are passed as positional arguments and the last positional argument is the inventory file to be written. An optional argumentpath_defcan be used to specify an inventory definition file. - The
include-gitandexclude-gitcommands in an inventory definition now accept arguments, which are passed to thegit ls-filescommand. - LaTeX output files inferred from the
.flsfile are filtered in the same ways as input files. LaTeX sometimes writes output files to~/.texlive2023/which should be ignored by StepUp.
Fixed¶
rr-flatten-latexnow correctly handles empty tex files.
2.3.3 - 2025-03-03¶
A few minor improvements related to LaTeX and BibTeX, and parameterized Jupyter notebooks.
Added¶
- Improve detection of inputs and (volatile) outputs when compiling a LaTeX document:
- The
-recorderoption oflatexis used to identify inputs and outputs more precisely. - The manual override
%REPREP inputis replaced by%REPREP inp. - New manual overrides are supported for (volatile) outputs:
%REPREP outand%REPREP vol.
- The
- Add
nbargsoption toconvert_jupyter(), to call a notebook with arguments. If alistor adictis given, the data is convert to JSON.
Changed¶
- Add
overwriteoption tosanitize_bibtex(), to flag thatpath_outrefers to an input file to be overwritten, instead of trying to track it as an output file.
2.3.2 - 2025-02-24¶
This release makes compile_typst compatible with Typst 0.13,
and drops support for markdown-katex.
Added¶
- Configuration for development with devenv
Changed¶
- Drop support for the ailing markdown_katex integration. (Typst can be used to achieve similar results much more efficiently).
- Update
compile_typstfor Typst 0.13
2.3.1 - 2025-02-12¶
This is a minor bugfix release.
Fixed¶
- Remove some debug output.
2.3.0 - 2025-02-12¶
This release adds support for Jupyter notebooks with convert_jupyter()
and introduces small breaking changes to the API.
Other noteworthy changes include new options to the compile_typst() function,
more ways to specify variables in render_jinja().
Added¶
- Execute and convert Jupyter notebooks with
convert_jupyter(). rr-bibsaneis now part of StepUp RepRep, instead of using the (retired)bibsanepackage. The main difference, other than the improved integration with StepUp RepRep, is that journal abbreviations are now generated with pyiso4 instead of the abrevvIso Web API. It has a correspondingsanitize_bibtex()function instepup.reprep.api.
Changed¶
- Extend
compile_typst()with additional options:- Specification of the output file.
- Key-value pairs for the
--inputargument. - PNG and SVG output formats (multipage is not working yet).
- Optional inventory output file.
- Pass-through arguments for
typst
- Breaking changes to existing API:
convert_pdf()and related functions are renamed:convert_pdf()becomesconvert_mutool()convert_pdf_png()becomesconvert_mutool_png()
convert_svg()and related functions are renamed:convert_svg()becomesconvert_inkscape()convert_svg_pdf()becomesconvert_inkscape_pdf()convert_svg_png()becomesconvert_inkscape_png()
- The
inkscape_argsofconvert_inkscape()must now be a list instead of a string. compile_latex()no longer creates an inventory file by default. To recover the old behavior, addinventory=Trueto the arguments or set the environment variableREPREP_LATEX_INVENTORY="1".compile_latex()no longer callsbibsanewhen the LaTeX source has a BibTeX bibliography. If you want to sanitize the BibTeX file, callsanitize_bibtex()aftercompile_latex().- The
paths_variablesargument ofrender_jinja()has been replaced by a variadic positional parameter (i.e.*paths_variables).
- Other changes
- Change
convert_weasyprint()to perform the conversion in a single step. - Improve handling of arguments and dependencies in
convert_markdown() render_jinja()now accepts JSON and YAML files with variables for Jinja2 templates. In addition, one may specify a dictionary with variables directly when calling the function.- Documentation improvements.
- Change
2.2.3 - 2025-02-05¶
This release uses the new STEPUP_EXTERNAL_SOURCES environment variable
introduced in StepUp Core 2.0.6.
Changed¶
- Switch from SemVer to EffVer.
- Scripts that automatically detect dependencies
(
rr-compile-latex,rr-compile-typstandrr-convert-inkscape) now also use the newSTEPUP_EXTERNAL_SOURCESenvironment variable introduced in StepUp Core 2.0.6.
2.2.2 - 2025-01-31¶
This is a bugfix release addressing minor issues in the Typst support.
Fixed¶
- Only call
sys.exitinrr-compile-typstif the returncode is non-zero. This allows for other scripts to call its main function without exiting in case of a succeeded typst build.
2.2.1 - 2025-01-31¶
This is a bugfix release addressing minor issues in the Typst support.
Fixed¶
- Fix returncode of the
rr-compile-typstcommand (now passes through returncode oftypst build). - By default, depfiles created by
typst buildare now stored in a temporary directory, to avoid littering the working directory. You can keep depfiles by setting the environment variableREPREP_TYPST_KEEP_DEPS="1", or with the argumentkeep_deps=Trueincompile_typst(). (Either one will .)
2.2.0 - 2025-01-29¶
This release adds experimental support for typst. It also introduces a few breaking API changes for the sake of consistency. (More breaking changes should be expected in the near future.)
Added¶
- Experimental support for Typst.
Changed¶
- Rename API functions:
latex()->compile_latex()latex_flat()->flatten_latex()latex_diff()->diff_latex()
2.1.0 - 2025-01-27¶
This release contains a few minor breaking changes for the sake of internal consistency.
Changed¶
- The conversion with Inkscape has become a single step. (It was first split up in a step scanning for dependencies followed by the actual conversion.)
- Add more entrypoints for command-line utilities in StepUp RepRep.
Existing ones were renamed from
reprep-*torr-*. - Rename module
stepup.reprep.rendertostepup.reprep.render_jinja. - Rename API function:
render()->render_jinja()
2.0.2 - 2025-01-22¶
This is the first release of StepUp RepRep that is compatible with StepUp Core 2.0.0. (Earlier 2.0 releases were yanked due to packaging issues.)
Added¶
- Add
smartyextension to markdown conversion. - Add option to insert blank page after odd-paged PDF when concatenating PDFs.
Changed¶
- Compatibility with StepUp Core 2.0.0, which breaks compatibility with older StepUp Core versions.
Fixed¶
- Use
shlexfor building shell commands instepup.reprep.apito avoid shell injection.
1.4.1 - 2024-09-02¶
Added¶
- An extra argument was added to
convert_markdownto specify CSS files. - Support default arguments for
convert_markdowndefined as environment variables:${REPREP_KATEX_MACROS}and${REPREP_MARKDOWN_CSS}.
Fixed¶
- Fix bug: put header output of
markdown_katexplugin in the HTML header. - Fix bug: rewrite paths to CSS files in
convert_markdownto be relative to the parent of the output HTML file.
1.4.0 - 2024-08-27¶
Added¶
- The unplot script, a sanitized version of Depix. It converts paths from SVG files back into data, which can be used to reverse-engineer data sets from plots.
Changed¶
- Move
load_module_filefrom StepUp Core tostepup.reprep.renderand improve it to facilitate local imports.
1.3.0 - 2024-06-28¶
Added¶
- The script
rr-sync-zenodoand corresponding StepUp API functionsync_zenodo()synchronize your local data with a draft dataset on Zenodo. - Small documentation updates
Fixed¶
- Upgraded dependency markdown-katex to version 202406.1035 and enabled concurrency for markdown conversion with equations.
- Scrub PDF files after opening them with
fitz. See https://github.com/pymupdf/PyMuPDF/issues/3635
1.2.1 - 2024-05-27¶
Changed¶
- Conversion from HTML to weasyprint is now a two-step process and includes detection of implicit input files used in the HTML to PDF conversion. (Images and external CCS)
- Improved reusability of script modules:
add_notes_pdf,check_hrefs,convert_inkscape,convert_markdown,convert_weasyprint,latex,latex_flat,make_inventory,normalized_pdf,nup_pdf,raster_pdf,renderandzip_inventory.
Fixed¶
- Fixed a few errors in the HTML generated by
convert_markdown()
1.2.0 - 2024-05-20¶
Added¶
rr-zip-inventorycommand to manually create a reproducible ZIP file from aninventory.txtfile.- More documentation on how to work with inventory files.
- Tutorial for archiving StepUp publication Git repositories.
Changed¶
- Renamed all
MANIFESTandmanifestoccurrences toinventoryand removed dependency of setuptools for processing such files. - The API of
make_inventoryis made simpler than that ofmake_manifest. - The commands supported in
inventory.deffiles now differ from those in setuptools:include,exclude,include-git,exclude-git,include-workflowandexclude-workflow. - The css style has been made customizable in
convert_markdown. - KaTeX is now optional in
convert_markdown.
Fixed¶
- An error message is raised when trying to a put a directory in an inventory file.
- Symbolic links are no longer dereferenced when they are listed in an inventory file.
- Symbolic links are archived in ZIP files without dereferencing.
1.1.2 - 2024-05-16¶
Fixed¶
- Nicer fix for concurrent Inkscape SVG to PDF or PNG conversion
(with
SELF_CALL=x). See: https://gitlab.com/inkscape/inkscape/-/issues/4716 - Make unit tests work with stepup-core 1.2.2.
1.1.1 - 2024-05-07¶
Fixed¶
- Inkscape SVG to PDF or PNG conversion now works also in parallel, thanks to the workaround posted here: https://gitlab.com/inkscape/inkscape/-/issues/4716
- LibrOffice PDF conversion now works also in parallel, thanks to the workaround posted here: https://bugs.documentfoundation.org/show_bug.cgi?id=106134
- Inkscape conversion no longer opens files in write mode, which triggered the watcher of StepUp Core.
- Fixed packaging mistake that confused PyCharm and Pytest.
Changed¶
- Documentation improvements
1.1.0 - 2024-05-02¶
Changed¶
- Documentation improvements
- Unit tests are made compatible with StepUp Core 1.2.0.
1.0.0 - 2024-04-25¶
Initial release