Design
The purpose of these design documents is to describe the design of zen-do in enough detail to guide a sustainable implementation (i.e., maintainable in the long term) and to ensure that the team has a shared understanding of the package’s scope and architecture.
zen-do’s design builds on our overall Seedcase design principles and patterns, and follows the same principles and patterns described there.
Purpose
The main aim of zen-do is to simplify the process of creating and updating Zenodo deposits from a “product”, which could be some generated content from a Git repository or within a folder in a Git repository. Specifically to:
- Take a product’s metadata and create a new or update an existing Zenodo deposit.
- Add one or more files to a Zenodo deposit.
Requirements
Specifically, zen-do must:
- Be usable as a command-line tool.
- Be usable “interactively” or through automation like continuous deployment (e.g. GitHub workflows).
- Load a product’s metadata for a Zenodo deposit from a file found within the working directory (e.g.
.zenodo.toml) and through the - Update a Zenodo deposit based on the product’s metadata file.
- Upload and/or replace files in a Zenodo deposit.
- Publish a Zenodo record (that contains the DOI) from a new or existing deposit.
- Simplify conversion between and loading from different metadata formats (e.g.
.zenodo.json,CITATION.cff,pyproject.toml,.zenodo.toml, or_quarto.yml). - List all deposits for a given account.
- Allow a GitHub repository to be linked to one or more Zenodo deposits.