# Release notes for Subplot
This file summarises the changes between released versions of Subplot and its
associated libraries, especially with regards to changes visible to
the user of the Subplot software.
# Version 0.11.0, released 2024-08-20
* We've fixed step parsing to only split a step into words at ASCII
white spaces, instead of any Unicode white space character. This
allows a scenario to match on any literal Unicode characters,
without Subplot turning them to an ASCII space character.
* We now only self-close HTML tags that allow it, based on list at
<https://www.scaler.com/topics/self-closing-tags-in-html/>.
Specifically, `br`, `hr`, `img`, `link`, and `meta` tags are closed:
`<br/>` instead of `<br></br>`. Previously we self-closed any
element that was empty, but it turns out world wide web technology
is more complicated than that.
* Errors using `subplot_build` from a project's `build.rs` are now
more visible in `cargo` output.
* The HTML generated by `subplot docgen` now contains a more useful
and easier to read table of contents. Headings are numbered also in
the text, not just in the table of contents.
* We're using `cargo minimal-versions` so that when we depend on a
crate, we can try to specify the minimal version that will work
for us. This is meant to help packaging Subplot for Linux
distributions, by not being so strict about requiring the latest
version of everything. Over time we will relax dependencies as we
determine that they are safe to do so.
* We've updated Subplot's MSRV to 1.79 to permit wider dependency
flexibility.
# Version 0.10.0, released 2024-06-15
It has been a long time since the previous release. Due to life and
work commitments, our work on Subplot has had to be put on a lower
priority. However, some things have happened.
* HTML output is now more technically correct HTML5 rather than just
something that seems to render more or less OK in whatever browser
Lars has handy. To start with, it's explicitly declared as HTML5 by
the DOCTYPE. A number of fixes has been made to the HTML, and the
test suite now verifies the correctness with the html-tidy tool.
There is now a table of contents, and at least basic tables work.
The CSS provided by Subplot has also been changed, and is now less
of a prototype. (We'd love to have help making the output more
readable, more accessible, and more stylish.)
* Subplot now requires bindings files to have documentation for each
binding (overridden by `--merciful`), and warns if the name or type
of a capture is missing. We generate documentation for the step
libraries provided by Subplot, and publish it at
<https://doc.subplot.tech/libdocs/>. Further, when a binding has an
error, the error message now tells the user what file the binding
came from.
* The fledgling "Subplot book" (in the `book` directory and published
at <https://doc.subplot.tech/user-guide.html>) now defines the
terminology we use to discuss "needs", "acceptance criteria", and
"requirements".
Bug fixes:
* In the Rust implementation of the `lib/files` step library, when a
file is overwritten, it is first truncated. Previously, we were only
writing the new content over the beginning of the file, which could
result in parts of the old content remaining at the end of the file.
Related to development of Subplot itself:
* We've re-enabled testing against chosen old versions of Subplot
(specifically, 0.9.0) so that we are less likely to accidentally
break backwards compatibility.
* We now require contributors to add a `Signed-off-by` footer in git
commit messages to signal the commit meets the assertion for a
Developer Certificate of Origin. See the the `DECISIONS.md` file in
the source tree.
- We've update Subplot's minimum supported Rust version (MSRV) to 1.75
in line with Debian testing a the time of the update.
# Version 0.9.0, released 2023-08-27
- We hope this will be the last breaking change before 1.0, however we
are not ruling out future breaks if they are justified to improve
usability or capability before an official 1.0 release
- We now pass a lot more meta-information about step location to the
templates for building test suites.
# Version 0.8.0, released 2023-06-14
- Subplot now permits multiple markdown documents to be used in a single
subplot document.
- Indented scenario statements, while permitted before, were never meant
to be part of the spec, they are now considered an error in case we
wish to use the semantics of indentation later.
# Version 0.7.1, released 2023-04-30
- Subplot now handles scenario titles with markup (such as bold face).
This was broken in the changes to drop use of Pandoc for parsing.
- CI job using the MSRV version doesn't check source code formatting
anymore.
- The dependency on the roadmap crate now depends on a version that
doesn't require the `clap` crate at all anymore.
# Version 0.7.0, released 2023-04-10
- Subplot no longer uses `pandoc` at all. This means that
output is currently limited to HTML only, and the formatting
of that HTML has changed, however this is the first step
along the path of being significantly easier to use long-term.
- Subplot's MSRV has been updated to 1.63 and our plan is to
maintain an MSRV of whatever is in Debian's `testing` distribution
until Subplot is in Debian.
- We have updated our crates to the 2021 edition of Rust. This should
not affect anyone since the 2021 edition has been supported since
1.56 of Rust.
# Version 0.6.0, released 2022-11-13
- Subplot metadata now expects `authors` rather than `author`
to support multiple authors for documents. This is a breaking
change, hence the semver bump.
- Subplot metadata now supports a `pandoc` mapping at the top level
which provides metadata to be inserted into the Pandoc document
build when producing PDFs or HTML.
- There is now a `path` type, to go alongside `text` `word` etc.
Paths are expected to be (parts of) paths on the filesystem and
we have updated all bindings to use `path` where sensible to do so.
- Subplotlib steps now handle the `path` type as `&Path`, so steps which
expect to be given paths should use that, rather than `&str`.
# Version 0.5.0, released 2022-09-13
- The big, breaking change for this release is that Subplot now
expects document metadata in a separate YAML file. It was previously
embedded in the Markdown input file. This allows us to be more
strict, when parsing the metadata: we only need to support what
Subplot needs, not the nearly arbitrary YAML Pandoc supports. Later
on, it will also enable us to support multiple Markdown files as
input.
- That change also means that we drop support for use of Subplot as a
Pandoc filter (the `subplot-filter` command and the `subplot filter`
subcommand). It doesn't make sense unless the metadata is
embedded in the Markdown.
- We've renamed things so that we consistently call a Markdown fenced
code block that is marked as a data file, an "embedded file".
Previously we also used other names, causing unnecessary confusion.
- The new home page URL is updated in all crate metadata. This means
crates.io will point at the new location after this release is made.
# Version 0.4.3, released 2022-007-29
- Bump the dependency on the `roadmap` crate to a version that depends
on `clap` version 3 to that it doesn't drag in `structopt`.
# Version 0.4.2, released 2022-007-28
- New feature: Subplot now supports example blocks: embedded files
that are in the subplot document only as examples, not for use by
scenarios.
- Subplot error messages are now a little bit more specific as to the
cause, and what operation failed.
- Subplot now uses the `time` crate instead of the `chrono` crate to
avoid a potential security issue.
- Terminology change: we now refer to diagrams as diagrams, not
graphs.
# Version 0.4.1 (subplotlib only), released 2022-04-17
- Fix issue where subplotlib cannot be built out-of-tree
# Version 0.4.0, released 2022-04-16
- The largest change from the previous release is that Rust based
subplot scenario test suites are now considered supported.
You can find an example of this in the `examples/seq` project in
the Subplot source code.
- To achieve this, bindings are now "polyglot" in the sense that they
are not language specific, though some bindings may only provide
implementations for particular languages (e.g. the daemon bindings
currently only support Python)
- Subplot considers Rust 1.48.0 to be its MSRV. This is to enable
integration into certain distributions and to work with other projects
whose MSRVs are around that value.
- A number of quality of life improvements around warning delivery,
template handling, etc. have been made. For the full details, see
the Git changelog.
# Version 0.3.1, released 2021-11-16
- The primary purpose of this release is to make the `PATH` bug fix
available via crates.io, to fix use of Subplot in the Sequoia-PGP
project. There are no breaking changes, so only the patch level of
the version number is incremented.
- The licence of Subplot has been changed to
[MIT-0](https://mit-license.org/), to make it as simple as possible
to use Subplot on other projects, without having to worry about
license compatibility. Previously, this was technically possible,
but the Subplot licence situation was complex enough that it caused
people ask questions.
The Subplot developers prefer, for Subplot, to maximize adoption and
though they would favor a copyleft licence otherwise, they're
willing to compromise this time.
- A bug has been fixed in the Rust `lib/runcmd` function
implementation to prepend a directory to the `PATH`, in the
`subplotlib::steplibrary::runcmd::try_to_run_in` function. The bug
meant that the directories in `PATH` ended up in the wrong order.
# Version 0.3.0, released 2021-10-20
This is still an ALPHA quality release, and includes breaking changes.
## Breaking changes
You definitely need to pay attention to these changes.
- Subplot is moving to libraries and subplots being able to support
multiple step implementation languages at once. In this release,
bindings can indicate different functions for each language. Note
that a binding only needs to support one language. The new binding
format is:
```yaml
- given: foo
impl:
python:
function: foo
cleanup: foo_cleanup
rust:
function: somelib::foo
cleanup: somelib::foo_cleanup
```
- The Subplot code generator now uses the `pulldown-cmark` crate for
parsing Markdown input. The reason for this change is to not have to
have Pandoc installed in a CI or other environment that only
generates and runs test programs.
The document generator still uses Pandoc for this, but it, too, will
migrate to `pulldown-cmark` so that all parsing is done in the same
way.
The parsing crate should support the same Markdown variants as
Pandoc does, more or less.
Unfortunately, the YAML document metadata block is less forgiving
now. The new metadata parser doesn't accept everything Pandoc does,
and there will be a need to change input documents. The next release
of Subplot is likely to introduce further changes, and we will
document the new metadata format then.
- The generated test programs no longer clear the environment
variables before running scenarios. This is partly to allow Subplot
to be more easily ported to operating systems other than Debian
(such as NixOS, but also Windows and macOS), but also because
clearing the environment variables is not a good way to make sure
the tests run in a known environment. Subplot now makes it the
responsibility of the person running the test program to control
where it is run: what software is installed, what services are
available, etc.
- Subplot code generation now refuses documents that have no
scenarios. Document generation still accepts them so that Subplot
can be used to produce typeset documents and web pages.
## General
The changes in this section should not break any existing Subplot
documents. They affect all uses of Subplot, regardless of step
implementation language and whether Subplot code or document
generation is used.
- After a bug fix, Subplot now handles better the input files being
elsewhere than the current directory. If the Markdown input file is
in `foo/bar/yo.md`, the files referred to from the input file are
looked up relative to `foo/bar` instead of the current working
directory.
- Subplot now has initial support for logging to make it easier to
find out what it's doing, when it's doing something surprising. The
environment variables `SUBPLOT_LOG`, `SUBPLOT_LOG_FILE`, and
`SUBPLOT_LOG_FORMAT` (`oneline`, `json`, or `pretty`). What Subplot
logs is still rudimentary but will be improved over time. We'd
welcome suggestions.
- The Subplot Debian package now builds in the resource into the
Subplot binary.
- Document titles can now use markup to indicate `literal` text.
- Subplot now automatically handles versions of Pandoc that don't have
a separate `pandoc-citeproc` binary, and want the `--citeproc`
option instead.
- Subplot now works with version 1.48.0 of the Rust language and
toolchain, in order to make it possible for the Sequoia-PGP project
to use Subplot.
## Python support
- The generated Python test program now supports the `--run-all`
(`-k`) option to run all scenarios even if one or more fail.
## Rust support
- Subplot now provides the `subplot-build` crate, for using Subplot
code generation from another project's `build.rs` script.
- We are in the process of elevating Rust into a supported language,
so that it will be on par with Python. This release does not get
there, but starts the process.
## Bash support
- We've not made much effort to improve the Bash support (modulo the
environment cleanup). Compared to Python and Rust it is not a
well-support language in Subplot. Lars and Daniel do not feel it is
a target worth spending much of their free time on, but would
welcome help with that.
# Version 0.2.2, released 2021-08-07
This is release is meant for use by people other than Subplot's own
developers. It is of ALPHA quality, in that what is implemented is
meant to work, but we reserve the right to make backwards incompatible,
breaking changes in future releases.
## General
- When a scenario step matches more than one binding, the error
message now lists all the matching bindings to make it easier for
the user to fix the problem. (By Lars Wirzenius)
- The documentation now explains core concepts relevant to Subplot,
and suggests an initial workflow for a project using Subplot. (By
Lars Wirzenius)
## Python support
- The `lib/daemon` Subplot library now uses custom Python code instead
of the netcat tool. This removes a dependency, and also avoids the
problem of there being at least two more or less incompatible
versions of netcat in common use. (By Alexander Batischev)
- The `lib/daemon` library now has a way to pass environment variables
to the daemon. (By Alexander Batischev)
## Bash support
- The documentation now makes it clearer that the `files_get`
function returns the contents of the embedded file and not a
filename. (By Richard Maw)
- Some spelling and other language mistakes have been fixed in the
documentation for Bash support. (By Richard Maw)
- The `dict` helper functions can now read embedded files. (By Richard
Maw)
- The generated Bash test program now supports the `--env` option to
let the user pass in environment variables when invoking the test
program. (By Richard Maw)
- Assertion functions now return an error rather then terminating the
test program. This lets cleanups run. (By Richard Maw)
# Version 0.2.1, released 2021-07-11
This is the first release meant for use by people other than Subplot's
own developers.
- The locations of the `dot` and `plantuml` programs and for the Java
byte code interpreter can now be configured when Subplot is invoked,
which is useful when they're not installed in the locations where
Debian puts them. Those programs are used by Subplot to render
diagrams.
- The `./check` script now outputs the last one hundred lines or so of
the log file produced by the generated test program, if that program
fails. This makes it easier to debug failures under CI.
- Additionally, there have been some minor tweaks only visible to
those developing Subplot itself.
# Version 0.2.0, released 2021-06-12
This is the first public release of Subplot. No APIs or other surfaces are to be
considered stable at this time. While the `subplotlib` and `subplotlib-derive`
crates have been published, they do not form part of this release.
The only _template_ which is considered in any sense "supported" in this release
is the `python` template.