borg/docs/misc/asciinema
Thomas Waldmann b8476563ca
docs: make asciinema README a markdown file so sphinx ignores it
docs/misc/asciinema/README.rst was picked up by sphinx but not part of any
toctree, causing a "document isn't included in any toctree" warning in CI.
As this README is developer notes, not part of the built docs, rename it to
README.md: conf.py has source_suffix = ".rst", so sphinx ignores markdown.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WRRe8BEFk4sV2GHVxDRo5A
2026-07-23 01:02:36 +02:00
..
borg2-demo.cast new borg2 demo screencast, recorded in a container, fixes #6303 2026-07-22 15:21:21 +02:00
Containerfile new borg2 demo screencast, recorded in a container, fixes #6303 2026-07-22 15:21:21 +02:00
demo-data.py new borg2 demo screencast, recorded in a container, fixes #6303 2026-07-22 15:21:21 +02:00
demo.tcl new borg2 demo screencast, recorded in a container, fixes #6303 2026-07-22 15:21:21 +02:00
entrypoint.sh new borg2 demo screencast, recorded in a container, fixes #6303 2026-07-22 15:21:21 +02:00
README.md docs: make asciinema README a markdown file so sphinx ignores it 2026-07-23 01:02:36 +02:00
record.exp new borg2 demo screencast, recorded in a container, fixes #6303 2026-07-22 15:21:21 +02:00
record.sh new borg2 demo screencast, recorded in a container, fixes #6303 2026-07-22 15:21:21 +02:00

The borg2 demo screencast

The screencast linked from our README and website is not recorded by hand: demo.tcl is "typed" into a shell by expect, while asciinema records the result. So, when borg's output changes, we just record it again.

Do not run these scripts directly on your machine: they create users, mount filesystems and write to /media. They are meant to run inside the container defined by Containerfile.

Recording

./record.sh [output directory]     # uses podman, set ENGINE=docker for docker

This exports the borg sources of the git tag given by BORG_VERSION at the top of record.sh, builds borg from them in a container, generates the demo data and records the screencast to borg2-demo.cast. So, for a new release, set BORG_VERSION to its tag (after tagging it) and record again.

While working on the demo itself, you can also record from your work tree:

BORG_VERSION=HEAD ./record.sh

Then have a look at it and upload it:

asciinema play borg2-demo.cast
asciinema upload borg2-demo.cast

Afterwards, update the links in README.rst (in the repository root) and on borgbackup.org to point to the new screencast.

Editing the demo

demo.tcl contains the commands and comments that get typed, in the order they appear in the screencast. Keep the typed lines below ~95 characters, the recording uses a 100x30 terminal (see record.exp).

The lines we type are colored by type_line (comments, commands, options), see the color array at the top of demo.tcl if you want other colors. The output of the commands is not touched, it looks like in your terminal.

demo-data.py generates the data that gets backed up: compressible, but not trivially repetitive, so that both compression and deduplication show realistic numbers (see #6303).

Known quirks

borg extract runs with --noxattrs: when recording with rootless podman on a SELinux host, restoring the security.selinux xattrs of the demo data is not permitted, and the warnings about it would show up in the screencast.