Change log
paulrun is now rundot. The project was renamed from paulrun to rundot. Nothing else changed: subcommands, flags and the runbook format all work as before. To move over:
- Install
rundotinstead ofpaulrun, and runrundotinstead ofpaulrun.- Imports start with
rundotinstead ofpaulrun, and backends register in therundot.backendsentry point group, which waspaulrun.backends.PAULRUN_LIBRARYis nowRUNDOT_LIBRARY, and blocks getRUNDOT_RUNBOOK_DIRinstead ofPAULRUN_RUNBOOK_DIR.- The docs are at docs.rundot.dev and the code at github.com/phalt/rundot.
Entries below this note use the old name, as they were written at the time.
0.6.0
paulrun run's output is easier to scan:- the overview and how the run finished are in boxes
- each step is a numbered blue rule, e.g.
1/3 Build - each block is a bracket:
โwith its language and when it started (HH:MM:SS.mmm), each line it printed afterโ, thenโ โ exit 0 ยท 0.4sorโ โ exit 3 ยท 0.4s - docstrings are dim, and confirms are in a yellow box
- A line a block writes to stderr has a red
โ. - Code is hidden unless you pass
--show-code.--dryalways shows it. - The transcript is unchanged.
- Backends:
outputtakes an optionalstderr=Truefor a stderr line, andstream()passes it whenoutputaccepts it. A backend that callsoutput(line)still works.
0.5.0
- A block's output is fenced off between
=== LOG: <when it started> ===and========, with the time to the microsecond and a blank line either side, so it can't be mistaken for the block's code or paulrun's own lines. A block that prints nothing gets no LOG section. Under--step, a blank line comes before and afterRun this block?too. The transcript is unchanged.
0.4.0
- Add a cool logo to the cli output
0.3.0
- A runbook can set
step: truein its frontmatter to always run as if--stepwas given, asking before eachrunblock.--no-stepruns it straight through.checkreports astepthat isn'ttrueorfalse. - The book picker,
paulrun runwith no runbook, now takesqto quit, and says so:Run which? (q to quit). - A block skipped under
--stepis now shown, and recorded in the transcript, asskippedrather thanskipped (--step), sincestep: trueskips blocks too.
0.2.0
A runbook library
- keep runbooks you use across projects in
~/runbooks, or whereverPAULRUN_LIBRARYsays. Then run one by name from anywhere, e.g.paulrun rebuild-frontend.run,checkandinputsall take a book's name as well as a path, and a file where you are is always used before a book with the same name.paulrun librarylists the books in your library, with each one's title and description.paulrun run, with no runbook, lists them by number and runs the one you pick. -
A new docs page, Your runbook library, with a worked example of a book that rebuilds a frontend under nvm.
-
Breaking:
paulrun gois nowpaulrun run, and you don't need to type it:paulrun RELEASING.mdrunsRELEASING.md. Anything afterpaulrunthat isn't a command is a runbook to run, sopaulrun gois no longer a command.paulrunon its own still shows help. - Breaking: blocks now run in the folder you run paulrun from, not the folder the runbook is in. A relative
output_pathis now relative to that folder too. A runbook kept at the root of its project, run from there, works as before. One run aspaulrun path/to/RUNBOOK.mdfrom another folder now works on that other folder and writes its transcript there. This includes blocks run by external backends, whosecwdis now the folder paulrun was started from. - Blocks get
PAULRUN_RUNBOOK_DIR, the folder the runbook is in, so a runbook can still use files kept next to it. - Running a runbook shows the folder blocks will run in, as
directory:straight after the title, so you can check it before answeringStart?.--dryshows it too. paulrun library, the book picker andpaulrun inputsare in colour in a terminal: names you type are bold cyan, details are dim, and secrets and problems stand out. Piped output has no colour, as before.- Inputs can have a
default, shown at the prompt and used when you press enter. The environment still comes first.checkreports a default that isn't text, doesn't match the input'spattern, or is on a secret. - Inputs can have
choices: the only values accepted, listed at the prompt. You type the choice itself, and a value from the environment has to be one of them too.checkreports choices that aren't a list of text, a choice thepatternrefuses, a default that isn't a choice, and choices on a secret.
0.1.0
Initial release. paulrun runs hand-written markdown runbooks.
paulrun goruns a runbook's steps in order, streaming each block's output as it's printed and stopping at the first block that fails.runblocks for shell (sh,bash,shell) and Python (python,py), with thepythonfrontmatter key to choose the interpreter.docstringblocks to show notes as the runbook runs, andconfirmblocks to pause for steps done by hand.inputblocks to ask for a value part way through a run, once it exists: a pull request number from a step done by hand, or a one-time code that expires in seconds.- Inputs, collected from the environment or by asking, with an optional
patternto check them against. Plain inputs fill in<NAME>placeholders; secrets are hidden as you type them and replaced with****everywhere paulrun shows or records them. paulrun go --dryto see every block with its inputs filled in, without running anything.paulrun go --stepto run, skip or quit at each block.- Transcripts: with
output_pathset, every run is added to a plain record of what ran, what it printed and how it finished. - Ctrl-C stops a run cleanly, letting a running block stop and recording how far the run got.
paulrun checkto find problems before running anything: missing or malformed frontmatter, undeclared placeholders, secrets used as placeholders, blocks outside a step, and shell and Python syntax errors, with shellcheck warnings when it's installed.paulrun inputsto list the inputs a runbook needs, andpaulrun backendsto list the languages paulrun can run.- Backends for other languages can be added by any package, through the
paulrun.backendsentry point group.