This repository contains a Python program to run code blocks in Markdown-formatted files in Docker containers. The primary use case is running code samples of documentation in a controlled environment.
For installation, you may want to create a virtual environment after cloning:
python -m venv .env
. .env/bin/activate
Install the requirements as usual:
python -m pip install -r requirements.txt
bin
: Contains scripts to extract the code from Markdown files and executing
them in containers. Normally, you only need to use the scripts in this directory.
mdcoderun
: A python package that can be used to import the parser and execute functionality.
test
: Unit tests.
test/test-files
: Various Markdown documents to test the package.
bin/extract-md-code.py
is used to extract the code from Markdown files. By
default, it extracts all inline code
and code blocks enclosed by ```. There
are options to limit the extracted portions.
usage: extract-md-code.py [-h] [--katacoda-tag KATACODA_TAG] [--no-inline]
[--no-block] [--language LANGUAGE] [--debug]
files [files ...]
-l, --language lang
: Used to limit the extracted code to a particular language
specified like
```lang
code
..
```
-k, --katacoda-tag
: Used to limit the extracted code to a Katacoda tag
like {{execute}}
. For code blocks in Katacoda Markdown documents, you can
specify the trailing tag with this option.
python extract-md-code.py -k execute katacoda-file.md
extracts only the code blocks that have {{execute}}
at the end, e.g.,
```
code
...
```{{execute}}
--no-inline
: Skips inline code
elements within the text.
--no-blocks
: Skips code blocks enclosed by ```.
bin/run-in-container.py
sends the extracted code to a Docker container specified by its tag.
usage: run-in-container.py [-h] --container CONTAINER
[--katacoda-tag KATACODA_TAG] [--no-inline]
[--no-block] [--no-fix-initial-dollar] [--no-stop]
[--language LANGUAGE] [--debug]
files [files ...]
Extracts code blocks from .md files and runs these code in specified container
--container CONTAINER, -c CONTAINER
: (Required) Docker image id to run the code.
--katacoda-tag KATACODA_TAG, -k KATACODA_TAG
: The Katacoda tag that will be
searched in .md code blocks, e.g., for {{execute}}, specify 'execute'
--language LANGUAGE, -l LANGUAGE
: Filter the code blocks by language
.
Implies --no-inline, as inline code elements cannot specify language
--no-inline
: Skip inline code elements
while parsing
--no-block
: Skip code blocks
while parsing
--no-fix-initial-dollar
: Code blocks in Markdown documents may contain $
signs as prompt. By default these are removed before sending them to the
container. Setting this option keeps them intact.
--no-stop
: By default, the container is stopped at the end. This options
tells to keep it running, e.g., for debugging purposes.
--debug
Show debug output