A declarative, configuration-driven SDK for building, validating, and deploying reproducible tutorial packages.
Project description
A declarative, reproducible tutorial packaging system and command-line tool that bridges the gap between technical content and stable containerized runtimes.
💡 Focus on teaching. We'll handle the runtime.
Tutorial environments tend to drift over time: Dockerfiles diverge from notebooks, dependencies go unpinned, and validation is left to CI pipelines assembled by hand. tutorial-sdk addresses this by driving the full lifecycle — resolving and locking dependencies, synthesizing deterministic Dockerfiles, validating notebooks locally and inside built containers, and publishing images through a standardized CI workflow — all from a single declarative config.
[!IMPORTANT] This project is currently under active development. While we strive for stability, expect API changes and evolving best practices as we approach our first official release.
Key Features
- Declarative Configuration (
tutorial.yml): Declare the whole tutorial surface - metadata, contents, package environments, and validation rules - in a single, Pydantic-validated YAML file. - Deterministic Environment Synthesis: Generates cache-friendly, reproducible Dockerfiles matching the exact dependency graph specified in your config.
- Notebook-Aware Container Validation: Runs comprehensive local checks (assets, dependencies, notebook error detection) as well as full container validation (verifying built containers start successfully and that JupyterLab runs flawlessly inside).
- GitHub Actions Integration: Built-in support for standard, thin CI workflows (
tutorial-sdk ci) that validate, build, test, and publish images from pull requests and releases. - Extensible Scaffolding Templates: Starter templates to quickly spin up beginner workshops, notebooks, course modules, or custom lab exercises.
Documentation
For comprehensive guides, API references, and architecture details, refer to the following documentation files:
- Getting Started: Features, quickstart commands, and standard project layouts.
- Configuration Schema: Reference manual for all options in
tutorial.yml. - Architecture & Design: Deep dive into the modular layers, container validation model, and extension override blocks.
- CLI Reference: Reference details for CLI commands and usage examples.
- Public API & Full SDK API References: API surface specifications and implementation details for Orchestration (
TutorialProject), Spec Models (TutorialSpec), Scaffolding, Generators, Builders, and Validators.
[!NOTE] Online Documentation: https://bnl-peso-hub.github.io/tutorial-sdk/
Acknowledgments
This project was inspired by and carries the core ideas of the ExaWorks project and the subsequent implementation of the Tutorials management approach (radical-cybertools/tutorials) developed by the RADICAL Research Team.
License
This project is licensed under the Apache License, Version 2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tutorial_sdk-0.1.0.tar.gz.
File metadata
- Download URL: tutorial_sdk-0.1.0.tar.gz
- Upload date:
- Size: 1.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
075c2c2408e048b1983f30de62d128ad72f93dcd6881f9c219e3f9cd37287f8d
|
|
| MD5 |
8fa1733c433ebb08d868501572a501f3
|
|
| BLAKE2b-256 |
a7c43c536491827b3230a12a7042cdef0fb7ce890c844d72bd70ebb3b4e99227
|
Provenance
The following attestation bundles were made for tutorial_sdk-0.1.0.tar.gz:
Publisher:
publish.yml on BNL-PESO-Hub/tutorial-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tutorial_sdk-0.1.0.tar.gz -
Subject digest:
075c2c2408e048b1983f30de62d128ad72f93dcd6881f9c219e3f9cd37287f8d - Sigstore transparency entry: 1735237958
- Sigstore integration time:
-
Permalink:
BNL-PESO-Hub/tutorial-sdk@096862ef11eb721175ffee1b8b224950d1f3cdeb -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/BNL-PESO-Hub
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@096862ef11eb721175ffee1b8b224950d1f3cdeb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file tutorial_sdk-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tutorial_sdk-0.1.0-py3-none-any.whl
- Upload date:
- Size: 43.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66dab0a6d53e4de5fc744a3dbbdd86080f068858e2c47c552414b8c0d64d4b3b
|
|
| MD5 |
5986829b45c1d2d74feca707b3e130e3
|
|
| BLAKE2b-256 |
7d66f5f7d528f4d3c43c8d147f5462319a71a1485c26eeb187bf3c71570974cf
|
Provenance
The following attestation bundles were made for tutorial_sdk-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on BNL-PESO-Hub/tutorial-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tutorial_sdk-0.1.0-py3-none-any.whl -
Subject digest:
66dab0a6d53e4de5fc744a3dbbdd86080f068858e2c47c552414b8c0d64d4b3b - Sigstore transparency entry: 1735237980
- Sigstore integration time:
-
Permalink:
BNL-PESO-Hub/tutorial-sdk@096862ef11eb721175ffee1b8b224950d1f3cdeb -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/BNL-PESO-Hub
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@096862ef11eb721175ffee1b8b224950d1f3cdeb -
Trigger Event:
workflow_dispatch
-
Statement type: