Skip to content

Releases: snapshotmanager/snapm

v0.7.0

07 Jan 19:54

Choose a tag to compare

Overview

This release introduces significant new features, fixes, and quality of life improvements. These include enhancements to the Difference Engine: support for multiple -s|--start-path arguments, cache fixes, better file type detection when not using --file-types, and improved move detection behaviour when multiple destinations exist, as well as support for plugin priorities in Manager and the in-tree plugins (for example, allowing the administrator to choose between lvm2-thin, and lvm2-cow snapshot providers where both can snapshot the same volume), better documentation for the Mount Manager in the User Guide, and a new, user-visible timeline categorization ("yearly", "monthly", "weekly", "daily", etc.) that is available for all snapshot sets. This release also includes a fix for the snapm / podman netns mount issue documented in earlier releases (#586) and stronger validation for schedule create name arguments (#906).

Users should upgrade to v0.7.0 as soon as possible to take advantage of these enhancements.

Notes

  • It is now possible to specify the -s|--start path multiple times when invoking the snapset diff and snapset diffreport commands. This allows the user to compare multiple independent subtrees in a single diff operation.
  • The path based file type detection has been improved to support more common file extensions, text and binary path locations, and categorisations.
  • A new BINARY_LOG file type categorisation has been added to describe files such as wtmp, SAR logs, and the journal.
  • Plugins now support a PluginPriority configuration that specifies a positive integer priority level. The plugin with the greatest priority is chosen when multiple plugins can snapshot the same device. This allows the user to prefer lvm2-cow snapshots over lvm2-thin where both are possible and will in future allow support for file system level snapshots (for example, Btrfs). Refer to snapm(8), and snapm-plugins.d(5) for further information on configuring plugin priorities.
  • The Mount Manager is now described in the on-line and in-package User Guide.
  • The Mount Manager now handles unmounting of duplicate /run/netns mounts via a targeted workaround.
  • The timeline classification algorithm used by the Timeline garbage collection policy has been generalised and is now available for all snapshot sets via the "Categories" snapshot set property and "categories" report field.
  • The static file type classifier now uses a broader set of rules for classifying likely text or binary content types.
  • The tree output format of the snapset diff command now displays separate nodes for paths that have both been moved and modified (for example, a file that was backed up and then changed in-place).

Full Changelog: v0.6.0...v0.7.0

What's Changed

  • doc: add new snapm logo to README.md by @bmr-cymru in #823
  • doc: update README.md and user_guide.rst with mount manager and difference engine by @bmr-cymru in #830
  • snapm: btrfs plugin pre-requisite features and fixes by @bmr-cymru in #843
  • Fixes for progress log interleaving and text-like best-guess file type detection by @bmr-cymru in #851
  • fsdiff: add BINARY_LOG file type category and fix TEXT_FILE_PATHS prefixing by @bmr-cymru in #855
  • fsdiff: ctrl char glitches when diff -o tree --color=always | less -R by @bmr-cymru in #857
  • fsdiff: tolerate missing python-file-magic and work around Magic.close() bug by @bmr-cymru in #859
  • fsdiff: make include_system_dirs more robust and disable in next release by @bmr-cymru in #871
  • fsdiff: implement cheap sibbling proximity heuristic for moves by @bmr-cymru in #874
  • fsdiff: support DiffOptions.from_path as list by @bmr-cymru in #875
  • plugins: bump plugin versions for prio support by @bmr-cymru in #876
  • tests: improve snapm.fsdiff coverage by @bmr-cymru in #881
  • snapm: lift timeline classification logic up to SnapshotSet by @bmr-cymru in #885
  • snapm: don't alpha sort categories in reports by @bmr-cymru in #892
  • mounts: container mount workarounds by @bmr-cymru in #900
  • snapm: schedule name checks by @bmr-cymru in #910
  • fsdiff: add DiffOptions.no_mem_check / --no-mem-check option by @bmr-cymru in #912
  • snapm: broaden file type heuristics for suffix paths and support multiple change records in tree rendering by @bmr-cymru in #913

Full Changelog: v0.6.0...v0.7.0

v0.5.3

05 Jan 14:29

Choose a tag to compare

Overview

This is a maintenance release for snapm-0.5-stable that includes two bug fixes.

Users of snapm-0.5.x who are unable to upgrade to a later y-stream release should update to v0.5.3 as soon as possible to take advantage of these fixes.

What's Changed

  • Timeline index fix for v0.5.2 by @bmr-cymru in #609
  • boot: hex escape literal ':' in values passed to systemd.{mount,swap}-extra by @bmr-cymru in #894

Full Changelog: v0.5.2...v0.5.3

v0.6.0

22 Dec 10:37

Choose a tag to compare

Overview

This release introduces significant new features and fixes, including the Mount Manager and the Difference Engine for efficiently computing changes between two snapshot sets, or the system root file system and a snapshot set. Fixes include Stratis plugin performance enhancements and bug fixes for lvm2 device callouts . Users should upgrade to v0.6.0 as soon as possible to take advantage of these enhancements.

Notes

  • It is now possible to mount individual snapshot sets and interact with them using the snapset {mount,umount}, snapset exec, and snapset shell commands. Snapshot sets are mounted under /run/snapm/mounts.
  • Comprehensive file system comparison is now available with the snapset diff and snapset diffreport commands. See snapm(8) and the user guide for more information.
  • The snapm.fsdiff API is considered unstable and may be subject to change in a future release.
  • The snapset diff --output-format=json JSON schema is also potentially subject to change and will be formalised in a future release.
  • The snapset diff/snapset diffreport command syntax is stable but output and formatting may change in future releases.
  • Future releases may include new content differs for specific file types and more comprehensive file type detection when libmagic is disabled.
  • Generating content diffs of large file system trees with many content changes may consume large amounts of memory: snapm will refuse to diff trees if VmRSS exceeds 33% of system memory after walking the filesystem. Caching is disabled if VmRSS exceeds 60% of system memory after computing diffs.

What's Changed

  • lvm2: Fix "no device" case for _is_lvm_device() and avoid no provider test if /boot is not a mount point by @bmr-cymru in #589
  • Add mount manager by @bmr-cymru in #541
  • snapm: fix renaming of snapshot sets with boot entries by @bmr-cymru in #591
  • schedule: fix timeline garbage collection by @bmr-cymru in #596
  • schedule: fix TIMELINE policy retention indexing when keep_x > len(x) by @bmr-cymru in
    #607
  • stratis: re-use initial DBus query for StratisSnapshot cache by @bmr-cymru in #615
  • container_tests: fix GcPolicyParamsTimeline.evaluate() tests edge case by @bmr-cymru in
    #628
  • Clean up and enhance progress implementation by @bmr-cymru in #646
  • doc: add missing snapm.manager._mounts to Sphinx docs by @bmr-cymru in #661
  • Fix progress message overflow, bar width, and BrokenPipeError handling by @bmr-cymru in
    #662
  • progress: clean up Progress and add Throbber classes by @bmr-cymru in #675
  • progress: Fix Throbber no_clear bug and add styles by @bmr-cymru in #679
  • mounts: fix incorrect SnapshotSet instead of name in name_map by @bmr-cymru in #684
  • snapm: add fsdiff snapshot set comparison facility by @bmr-cymru in #620
  • progress: cleanups and log integration by @bmr-cymru in #698
  • snapm: implement snapshot set comparison UI (snapm snapset diff) by @bmr-cymru in
    #707
  • snapm: address v0.6.0 feature/fix release blockers by @bmr-cymru in #759
  • snapm: fix "Computing diffs" progress bar flicker and at move detector progress by @bmr-cymru in #775
  • doc: add missing links, summary format and clarify defaults for output formats by @bmr-cymru in #779
  • fsdiff: catch EOFError on truncated cache file by @bmr-cymru in #782
  • fsdiff: move detector may mis-detect identical files as moves by @bmr-cymru in
    #784
  • fsdiff: optimize cache writing and add progress reporting by @bmr-cymru in #791
  • fsdiff: implement best-effort file type detection and "always exclude" paths by @bmr-cymru in
    #810

Known issues

There is one known issue for this release. Please see the wiki pages for more details, status, and workarounds:

This will be addressed in a future release.

Full Changelog: v0.5.2...v0.6.0

v0.5.2

16 Nov 20:44

Choose a tag to compare

This is a bug fix release for two important bugs found in v0.5.0 and v0.5.1. Users of these versions should update to v0.5.2 as soon as possible.

#603 (#590)
#604 (#592)

This release also includes minor usability enhancements and fixes (original issues: #593, #594, #595, #597, #598, #600).

What's Changed

Full package changelog:

  • schedule: Fix COUNT policy off-by-many when keep_count > len(sets)
  • snapm: make -c|--config mandatory for create-scheduled/gc
  • snapm: report garbage collected snapshot set names
  • schedule: fix timeline classification to allow multiple categories
  • schedule: add gc decision debug logging
  • snapm: add new snapm.schedule debug subsystem
  • snapm: fix renaming of snapshot sets with boot entries

Full Changelog: v0.5.1...v0.5.2

v0.5.1

03 Nov 21:16

Choose a tag to compare

What's Changed

Full package changelog:

  • dist: don't recursively set SELinux contexts for /run/snapm
  • tests: coverage for Scheduler.edit()
  • snapm: implement schedule edit command
  • scheduler: add Scheduler.edit() method
  • scheduler: add GcPolicy.has_params property
  • scheduler: remove schedule from lists/dicts on Scheduler.delete()
  • boot: use maxsplit=1 in BootEntryCache._parse_entry()
  • boot: Replace asserts with explicit exceptions
  • boot: Type the machine-id helper as Optional and align docstring
  • command: Fix typo in print_schedules doc - 'separateed' → 'separated'
  • command: Fix typo in create_schedule doc - 'autoinxed' → 'autoindex'
  • command: Fix _revert_cmd docstring - 'Delete' instead of 'Revert'
  • boot: drop lvm_root_lv docstring from _create_boom_boot_entry()
  • boot: handle swap entries explicitly in create_snapset_boot_entry()
  • boot: don't include swap entries in the snapset mount list
  • snapm: fix formatting glitches in snapm.manager
  • dist: add /run/snapm/lock to systemd/tmpfiles.d/snapm.conf
  • manager: re-locate lock files to /run/snapm/lock
  • dist: add tmpfiles.d drop-in for /run/snapm to snapm.spec
  • snapm: add systemd/tmpfiles.d/snapm.conf
  • snapm: add constants for runtime and mount dirs
  • snapm: wire up new debug log filttering in snapm.command.setup_logging()
  • snapm: convert modules to new log filtering interface
  • snapm: replace SnapmLogger Logging class with SubsystemFilter Filter class
  • snapm: use "snapm" rather than name (snapm._snapm) for getLogger()
  • snapm: add string constants for new name-based subsystem log filtering

Full Changelog: v0.5.0...v0.5.1

v0.5.0

06 Oct 21:51

Choose a tag to compare

What's Changed

  • dist: move python3-boom dep to python3-snapm and require >= 1.6.4 by @bmr-cymru in #94
  • tests: temporarily exclude CentOS from test_boot.is_redhat() check by @bmr-cymru in #95
  • tests: enable workflow on pull_request by @bmr-cymru in #97
  • jenkins: add test dependency file to support Jenkins CI by @trgill in #99
  • dist: use %{name} instead of hardcoding snapm in URL and autosetup by @bmr-cymru in #100
  • Test suite logging fixes by @bmr-cymru in #101
  • Improve KeyboardInterrupt handling by @bmr-cymru in #104
  • Refactor Manager methods and move logic to SnapshotSet by @bmr-cymru in #105
  • [dist] update GPL license text and headers by @bmr-cymru in #107
  • lvm2: reporting format fixes by @bmr-cymru in #111
  • tests: switch GitHub workflows over to Stratis 3.8.0 by @bmr-cymru in #115
  • snapm: raise SnapmNotFoundError if source path does not exist by @bmr-cymru in #119
  • snapm: add snapm.manager.calendar and CalendarSpec class by @bmr-cymru in #139
  • tests: add CalendarSpec unit tests by @bmr-cymru in #141
  • Add template systemd units for scheduler by @bmr-cymru in #138
  • tests: add python3-pytest-subtests to Ubuntu dependencies by @bmr-cymru in #143
  • dist: replace license classifier with SPDX expression in pyproject.toml by @bmr-cymru in #144
  • Fix setting autoactivation during bootable snapshot set creation by @bmr-cymru in #154
  • snapm: boot cache fixes by @bmr-cymru in #157
  • Support iterations of a snapshot set with a common base name by @bmr-cymru in #165
  • Add support for snapshot set 'split' and 'prune' operations by @bmr-cymru in #178
  • snapm: fix Manager.split_snapshot_sets() with empty sources by @bmr-cymru in #180
  • snapm: unify filtering for valid characters in names by @bmr-cymru in #182
  • dist: avoid Python packaging warnings by @bmr-cymru in #185
  • Rewrite plugin loader and move Plugin to snapm.manager.plugins by @bmr-cymru in #195
  • Fix class variable misuse in snapm.report by @bmr-cymru in #204
  • dist: change snapm license from GPL-2.0-only AND Apache-2.0 to Apache-2.0 by @bmr-cymru in #206
  • dist: fix spec file issues by @bmr-cymru in #190
  • dist: drop unnecessary snapm/manager/pliugins/stratislib/LICENSE by @bmr-cymru in #209
  • dist: consolidate dependencies in requirements.txt and enable dynamic dependencies in pyproject.toml by @bmr-cymru in #211
  • dist: fix mixed tabs-and-spaces in snapm.spec by @bmr-cymru in #213
  • dist: pass test suite directory as positional arg to pytest macro by @bmr-cymru in #217
  • boot: tolerate missing boom.command.create_config() by @bmr-cymru in #222
  • Packaging fixes by @bmr-cymru in #224
  • FIx install dependencies by @bmr-cymru in #231
  • Fix packaging inconsistencies by @bmr-cymru in #235
  • Plugin: fix method docstring formatting by @bmr-cymru in #239
  • manager: Make manager modules private by @bmr-cymru in #243
  • dist: fix mixed-tabs-and-spaces in snapm.spec by @bmr-cymru in #244
  • CalendarSpec fixes by @bmr-cymru in #253
  • tests: fix CommandTests.test_main_* problems by @bmr-cymru in #261
  • manager: add debug logging to create_snapshot_set() by @bmr-cymru in #263
  • Add timer infrastructure by @bmr-cymru in #254
  • fix constants in docstring descriptions and add to docs by @bmr-cymru in #275
  • dist: fix readthedocs.org builds (restore requirements.txt) by @bmr-cymru in #280
  • docs: multiple small issues by @bmr-cymru in #289
  • Fix lvm2 environment variable filtering by @bmr-cymru in #294
  • Fix lvm callout issues by @bmr-cymru in #297
  • snapm: implement plugin configuration and snapshot limits by @bmr-cymru in #324
  • snapm: implement scheduling and garbage collection by @bmr-cymru in #309
  • boot: drop explicit setting of lvm_root_lv when calling boom by @bmr-cymru in #376
  • Do not require wheel for building by @hroncok in #377
  • update to allow bootable snapshot sets without root device by @trgill in #358
  • doc: add CONTRIBUTING.md by @bmr-cymru in #381
  • snapm: support --json with {snapset,schedule} create commands by @bmr-cymru in #386
  • tests: make cleanup.sh more robust for Stratis pools by @bmr-cymru in #388
  • doc: man page fixes & updates by @bmr-cymru in #400
  • doc: improve man2html compatibility in snapm.8 by @bmr-cymru in #434
  • doc: add DeepWiki badge to README.md by @bmr-cymru in #437
  • Add virt_tests end-to-end testing wokflow by @bmr-cymru in #383
  • dist: add missing timer and service units to snapm.spec by @bmr-cymru in #445
  • snapm: fix swapped _log_info() args in 'snapm snapset prune' output by @bmr-cymru in #447
  • snapm: fix report field definition for snapshot_origin by @bmr-cymru in #449
  • tests: re-order python-basic-tests to run cheap tests first by @bmr-cymru in #453
  • snapm: make --yes/--no required and mutually exclusive for autoactivate by @bmr-cymru in #461
  • snapm: require -p/--policy-type for 'snapm schedule create' by @bmr-cymru in #462
  • snapm: fix typos in source and documentation by @bmr-cymru in #470
  • doc: don't drop PYTHONPATH entries - concatenate them like PATH by @bmr-cymru in #473
  • lvm2: fix confusing error message when probing non-dm devices by @bmr-cymru in #478
  • snapm: snapshot set resize fixes by @bmr-cymru in #490
  • schedule: write_config(): do not reference tmp_path when it is undefined by @bmr-cymru in #493
  • snapm: add Manager level locking by @bmr-cymru in #515
  • snapm: reject duplicates in Scheduler.create() sources argument by @bmr-cymru in #518

Full package changelog:

  • snapm: bump release to 0.5.0
  • snapm: reject duplicates in Scheduler.create() sources argument
  • snapm: introduce Manager-level locking
  • snapm: add Manager.{activate,deactivate}_snapshot_set()
  • snapm: require root priveleges for snapm commands
  • schedule: write_config(): do not reference tmp_path when it is undefined
  • tests: make git clones with --depth 1
  • tests: update stratisd to stratisd-v3.8.5 and pin rust toolchain
  • doc: note that lvm2cow does not support shrinking snapshots in snapm.8
  • lvm2: add debug logging to size policy calculations
  • lvm2: skip no-ops and use relative size in Lvm2Cow.resize_snapshot()
  • lvm2: Detect and reject attempts to shrink CoW snapshots
  • lvm2: round up SizePolicy.size byte values to lvm2 extent boundaries
  • snapm: add size policy debug logging to create and resize
  • lvm2: extend _Lvm2.vg_free_space() to return extent size
  • lvm2: add lvm2._round_up_extents() to round sizes to extent boundaries
  • lvm2: Check path args to _is_lv_device() for existence and major nr match
  • lvm2: check for device-mapper major number before calling dmsetup
  • tests: fix test_create_snapshot_set_no_provider to f...
Read more

v0.4.3

17 Apr 21:24

Choose a tag to compare

What's Changed

Full package changelog:

  • dist: sync classifiers between pyproject.toml and setup.cfg
  • dist: drop quotes around license value
  • dist: drop obsolete python macro use
  • dist: revise dependency versions
  • dist: drop requirements.txt
  • dist: restore install_requires
  • dist: re-order BuildRequires and separate python and non-python deps
  • dist: clean up Sphinx doc build and make unconditional
  • dist: use install -p/--preserve-timestamps
  • boot: tolerate missing boom.command.create_config()

Full Changelog: v0.4.2...v0.4.3

v0.4.2

15 Apr 20:29

Choose a tag to compare

LICENSE

The snapm project is now licensed under the Apache-2.0 license.

What's Changed

  • Rewrite plugin loader and move Plugin to snapm.manager.plugins @bmr-cymru in #195
  • Fix class variable misuse in snapm.report @bmr-cymru in #204
  • dist: change snapm license from GPL-2.0-only AND Apache-2.0 to Apache-2.0 @bmr-cymru in #206
  • dist: fix spec file issues @bmr-cymru in #190
  • dist: drop unnecessary snapm/manager/pliugins/stratislib/LICENSE @bmr-cymru in #209
  • dist: consolidate dependencies in requirements.txt @bmr-cymru in #211
  • dist: fix mixed tabs-and-spaces in snapm.spec @bmr-cymru in #213
  • dist: pass test suite directory as positional arg to pytest macro @bmr-cymru in #217
  • snapm: bump release to 0.4.2 by @bmr-cymru in #218

Full package changelog:

  • snapm: bump release to 0.4.2
  • dist: pass test suite directory as positional arg to pytest macro
  • dist: fix mixed tabs-and-spaces in snapm.spec
  • dist: make version dynamic in pyproject.toml
  • dist: consolidate dependencies in requirements.txt
  • dist: drop unnecessary snapm/manager/pliugins/stratislib/LICENSE
  • dist: add pytest to build requirements
  • tests: use pytest macro instead of directly calling pytest-3
  • dist: drop centos/rhel special casing for python build/install
  • dist: change snapm license from GPL-2.0-only AND Apache-2.0 to Apache-2.0
  • report: Row - stop misusing class vars
  • report: Report - stop misusing class vars
  • report: Field - stop misusing class vars
  • report: FieldType - stop misusing class vars
  • report: ReportOpts - stop misusing class vars
  • report: ReportObjType - stop misusing class vars
  • report: FieldProperties - stop misusing class vars and add initialiser
  • snapm: move Plugin into snapm.manager.plugins
  • snapm: drop PluginRegistry metaclass
  • snapm: refactor plugin loader and move to snapm.manager._loader

Full Changelog: v0.4.1...v0.4.2

v0.4.1

03 Apr 16:41

Choose a tag to compare

What's Changed

  • dist: move python3-boom dep to python3-snapm and require >= 1.6.4 by @bmr-cymru in #94
  • tests: temporarily exclude CentOS from test_boot.is_redhat() check by @bmr-cymru in #95
  • tests: enable workflow on pull_request by @bmr-cymru in #97
  • jenkins: add test dependency file to support Jenkins CI by @trgill in #99
  • dist: use %{name} instead of hardcoding snapm in URL and autosetup by @bmr-cymru in #100
  • Test suite logging fixes by @bmr-cymru in #101
  • Improve KeyboardInterrupt handling by @bmr-cymru in #104
  • Refactor Manager methods and move logic to SnapshotSet by @bmr-cymru in #105
  • [dist] update GPL license text and headers by @bmr-cymru in #107
  • lvm2: reporting format fixes by @bmr-cymru in #111
  • tests: switch GitHub workflows over to Stratis 3.8.0 by @bmr-cymru in #115
  • snapm: raise SnapmNotFoundError if source path does not exist by @bmr-cymru in #119
  • dist: replace license classifier with SPDX expression in pyproject.toml by @bmr-cymru in #144
  • snapm: boot cache fixes by @bmr-cymru in #157
  • Add support for snapshot set 'split' and 'prune' operations by @bmr-cymru in #178
  • snapm: fix Manager.split_snapshot_sets() with empty sources by @bmr-cymru in #180
  • snapm: unify filtering for valid characters in names by @bmr-cymru in #182
  • Update python packaging license specification by @bmr-cymru in #185
  • snapm: bump release to 0.4.1 by @bmr-cymru in #183

Full package changelog:

  • snapm: fix Manager.split_snapshot_sets() with empty sources
  • command: add new 'snapm snapset prune' command
  • command: add new 'snapm snapset split' command
  • tests: add Manager.split_snapshot_set() tests
  • snapm: add Manager.split_snapshot_set()
  • snapm: include state string in exception raised from _check_snapset_status()
  • snapm: add snapm.SnapmArgumentError exception class
  • tests: add missing '[cache]' section to test boom.conf
  • snapm: refresh boot cache after creating entries in create_snapshot_set()
  • snapm: improve SnapshotSet action method logging
  • snapm: use Manager._set_autoactivate() in create_snapshot_set()
  • Manager: use common snapm.bool_to_yes_no() in Manager.set_autoactivate()
  • Manager: factor out common code from Manager.set_autoactivate()
  • snapm: move _bool_to_yes_no() from snapm.command to snapm
  • Plugins: add generic Plugin.autoactivate setter and drop set_autoactivate()
  • Manager: fix autoactivate setting during snapshot set creation
  • snapm: move snapshot -> snapset linkage into SnapshotSet()
  • dist: replace license classifier with SPDX expressions
  • snapm: raise SnapmNotFoundError if source path does not exist
  • tests: switch GitHub workflows over to Stratis 3.8.0
  • tests: install stratis-cli from git and pin version to 3.7.0
  • lvm2: filter out LVM2 environment variables when calling lvm commands
  • lvm2: make vg_lv_from_device_path a method of Lvm2Cow and Lvm2Thin
  • lvm2: ensure vg_lv_from_device_path() gets the expected report format
  • lvm2: determine LVM2 JSON format argument based on installed version
  • lvm2: refactor helper functions as Lvm2 plugin methods
  • tests: allow mock vgs/lvs to accept --reportformat json or json_std
  • dist: clean up copyright statements and convert to SPDX license headers
  • dist: update GPLv2 text in COPYING
  • snapm: factor out common code for snapshot origin and mount point links
  • snapm: move rename logic from Manager to SnapshotSet.rename()
  • snapm: move resize logic from Manager to SnapshotSet.resize()
  • snapm: move {de,}activate logic from Manager to SnapshotSet.{de,}activate()
  • snapm: move revert logic from Manager into SnapshotSet.revert()
  • snapm: move boot entry creation inside Manager.create_snapshot_set()
  • manager: replace open-coded snapset delete with snapset.delete()
  • snapm: implement SnapshotSet.delete()
  • snapm: catch KeyboardInterrupt in snapm.command.main()
  • snapm: decorate state-changing Manager methods with @suspend_signals
  • snapm: add @suspend_signals decorator to block SIGINT, SIGTERM
  • report: strip trailing whitespace from report output
  • tests: bracket test cases with log messages
  • tests: add explicit log formatter to file and console handlers
  • tests: capture tool output and log command execution
  • tests: add console handler to test suite logger
  • snapm: avoid duplicating log handlers when main() is called repeatedly
  • tests: fix duplicate log handlers in test suite
  • dist: use {name} instead of hardcoding snapm in URL and autosetup
  • jenkins: add file to list dependencies of python test suite
  • tests: enable workflow on pull_request
  • tests: temporarily exclude CentOS from test_boot.is_redhat() check
  • dist: move python3-boom dep to python3-snapm and require >= 1.6.4

New Contributors

Full Changelog: v0.4.0...v0.4.1

v0.4.0

13 Dec 19:06

Choose a tag to compare

What's Changed

Full Changelog: v0.3.1...v0.4.0