Skip to content

Releases: Nukesor/pueue

v4.0.0-rc.1

01 Dec 17:26
aa4b046
Compare
Choose a tag to compare

[4.0.0] - unreleased

This release aims to further improve Pueue and to rectify some old design decisions.

Removing internal channel communication

TLDR: Commands that start/stop/kill/pause tasks now only return when the task is actually started/stopped/killed/paused.


Until recently, Pueue managed subprocess (task) states in a dedicated thread.
Client commands affecting subprocesses, such as pueue start --immediate, were relayed to this special thread via an mpsc channel for processing.

This setup caused short delays before the instructions were executed.
For instance, tasks would begin a few hundred milliseconds after the client received an Ok from the daemon, despite using the --immediate flag.
This behavior was unintuitive and often led to commands like pueue add --immediate install_something && pueue send 0 'y\n' failing, as the task had not started by the time pueue send was called.

The new state design resolves this issue by allowing Pueue to manipulate subprocess states directly within the client message handlers, eliminating any delays.

New editing

Task editing was a bit tedious until recently.
One could only edit a single task at a time and you had to specify which properties you wanted to add.
Each property was then opened in a new $EDITOR session, which meant that users had to open and close editors up to four times to edit a single task.

After a lot of consideration, a new way of editing tasks has been designed that allows simple and convenient editing of multiple tasks at once.
For this, a temporary directory is created for every task to edit and a new file for every property, resulting in the following structure:

   📁 0/
   │ * command
   │ * label
   │ * path
   └ * priority

You can then just navigate the resulting file structure and edit the properties you want in the editor of your choice.

I'm aware that this might not be for everyone, so feedback is very much encouraged over here.

Runtime invariants

TLDR: A new task state representation has been introduced, that's significantly cleaner and fixes some bugs.
However, it breaks compatibility with old states, so ensure there are no important tasks in your queue before updating. You'll also need to recreate groups.


Previously, various task-state related invariants were manually enforced during runtime. For example, a Queued task should not have a start or enqueued_at time set.
Turns out, doing this manually is highly error-prone, as it is difficult to account for every state transition and ensure everything is set or cleaned up correctly.

Fortunately, this issue can be addressed in a more elegant way in Rust using struct enums. This method enforces invariants via the type system at compile time.
Although the affected code became slightly more verbose (about 25% larger), it eliminated an entire class of bugs.
During this refactoring, I discovered at least two instances where I had forgotten to clear a variable, leading to inconsistent state.

Since the new structure differs significantly from the old one, it completely breaks backward compatibility.
Upon updating Pueue and restarting the daemon, the previous state will be wiped, resulting in a clean slate.

Change

  • Breaking: Refactor internal task state. Some task variables have been moved into the TaskStatus enum, which now enforces various invariants during compile time via the type system.
    Due to this, several subtle time related inconsistencies (task start/stop/enqueue times) have been fixed. #556
    Important: This completely breaks backwards compatibility, including previous state.
    Important: The Pueue daemon needs to be restarted and the state will be wiped clean.
  • Breaking: Streamlined pueue log parameters to behave the same way as start, pause or kill. #509
  • Breaking: Remove the --children commandline flags, that have been deprecated and no longer serve any function since v3.0.0.
  • Send log output to stderr instead of stdout #562.
  • Change default log level from error to warning #562.
  • Bumped MSRV to 1.70.
  • Breaking: Redesigned task editing process #553.

Add

  • Add support for NetBSD.
  • Add --all and --group to pueue log. #509
  • Add --all and --group to pueue enqueue. #558
  • Add --all and --group to pueue stash. #558
  • Add pueue reset --groups [group_names] to allow resetting individual groups. #482
    This also refactors the way resets are done internally, resulting in a cleaner code architecture.
  • Ability to set the Unix socket permissions through the new unix_socket_permissions configuration option. #544
  • Add command filter to pueue status. #524 #560
  • Allow pueue status to order tasks by enqueue_at. #554
  • Added Windows service on Windows to allow a true daemon experience. #344 #567
  • Add queued_count and stashed_count to callback template variables. This allows users to fire callbacks when whole groups are finished. #578
  • Add new subcommand to set or unset environment variables for tasks. #503

Fixed

  • Fixed delay after sending process related commands from client. #548
  • Callback templating arguments were html escaped by accident. #564
  • Print incompatible version warning info as a log message instead of plain stdout input, which broke json outputs #562.
  • Fixed -d daemon mode on Windows. #344

v3.4.1

04 Jun 13:52
990f1aa
Compare
Choose a tag to compare

[3.4.1] - 2024-06-04

Added

  • Nushell autocompletion script #527
  • Add FreeBSD process helper to facilitate FreeBSD builds

Changed

  • Replace chrono-english by the interim drop-in replacement. #534

v3.4.0

22 Mar 00:57
a247b3b
Compare
Choose a tag to compare

[3.4.0] - 2024-03-22

Added

  • Support modification of task priorities via pueue edit --priority/-o and pueue restart --edit-priority/-o #449.
  • If no output directory is provided in completions, the generated file is printed to stdout #489.
  • Allow setting the parallel_tasks value of groups to 0. Setting this value allows unlimited tasks for that group #500.

Fixed

  • Include priority in Tasks' Debug output #493
  • Made the daemon exit gracefully (exit code 0) on SIGINT and SIGTEM. #504
  • Fix reading of configuration files that lacks a shared section. #505
  • Respect the -g flag when using the status filter query. #508

v3.3.3

04 Jan 12:11
fb6caab
Compare
Choose a tag to compare

[3.3.3] - 2024-01-04

First release of the year 🎉

Fixed

  • Bump ring from 0.16 to 0.17 to add riscv64 support #484.
  • Fix that add --priority flag tried to get multiple arguments #486.

pueue-lib-v0.25.1

04 Jan 12:10
21451a4
Compare
Choose a tag to compare

[0.25.1] - 2024-01-04

Changed

  • Bump dependencies. Most notably ring from 0.16 to 0.17 to add riscv64 support #484.

v3.3.2

28 Nov 16:10
3724643
Compare
Choose a tag to compare

[3.3.2] - 2023-11-28

Fixed

  • Fixed panic when calling pueue parallel without arguments #477
  • Fixed wrong default location for pueue_aliases.yml #480
  • Fix typos

v3.3.1

27 Oct 16:31
70c1969
Compare
Choose a tag to compare

[3.3.1] - 2023-10-27

Fixed

  • Daemonization doesn't work if pueued is not in $PATH #299

v3.3.0

21 Oct 11:50
3de707a
Compare
Choose a tag to compare

[3.3.0] - 2023-10-21

This release is a somewhat special one.

I now consider Pueue "feature-complete". Everything I ever planned for Pueue has been implemented and much more. It seems to be working quite well and it's used by thousands of people. Most of the code is well-tested, well-documented and I refactored every part of the code several times (including a full rewrite).

This effectively means that no "big" features are going to be added to Pueue from here on. Future releases will only contain QoL improvements, improvents of existing features, bug fixes and dependency bumps.

Don't get me wrong:
There're tons of other stuff that could be added to Pueue. I'm regularly approached by people with cool features and new usecases. However, this would be a job for another tool.

Pueue was always intended to be a nice and minimalistic tool for people on the commandline. It grew a bit beyond that, but the original vision for the project still stayed the same. Now feels like the right time to call it done, before feature creep transforms this project into something it wasn't intended to be.

I'm happy that this many people find this project useful and I'm always amazed to see the creative ways in which one can use Pueue that they discover. It never get's boring.

Added

  • Support the PUEUE_CONFIG_PATH environment variable in addition to the --config option. #464

Fixed

  • Support parameter parsing for signal names with capslock (SIGINT) and short name (INT|int). #455
  • Better error messages for pid related I/O errors. #466

Changed

  • QoL improvement: Don't pause groups if there're no queued tasks. #452
    Auto-pausing of groups was only done to prevent the unwanted execution of other tasks, but this isn't necessary if there're no queued tasks.

Added

  • clear and cleanup aliases for clean subcommand.

The two following features are very new and marked as "experimental" for the time being.
They might be reworked in a later release since working with shells is always tricky and this definitely needs more testing.

  • Experimental: Allow configuration of the shell command that executes task commands. #454
  • Experimental: Allow injection of hard coded environment variables via config file. #454

v3.2.0

13 Jun 01:11
1f3d840
Compare
Choose a tag to compare

[3.2.0] - 2023-06-13

Added

  • Add the --priority/-o flag to pueue add #427.
    This feature can be used to have easier control in which order tasks are executed.
    This was previously only possible via pueue switch.
  • Add pueued.plist template to run pueue with launchd on MacOS. #429
  • Add the -j/--json flag to pueue group to get a machine readable list of all current groups. #430
  • Add the success wait status. With this status, pueue will exit with 1 as soon as a single task fails. #434
  • Add query syntax documentation to pueue status #438

Fix

  • Fix broken bash autocompletion. Temporarily changes the name in the help texts to pueue and pueued. #426
  • Reword, extend and format most subcommand help texts.

Change

  • Don't fail on follow if a followed task exists but hasn't started yet. #436
  • Fail with a 1 exit code, when a followed task disappears or doesn't exist in the first place. #436

v3.1.2

26 Feb 13:36
be6ce66
Compare
Choose a tag to compare

[3.1.2] - 2023-02-26

Fixed

  • Fixed changes to stdout not being printed after each I/O copy when using pueue follow. #416