serokell / deploy-rs

A simple multi-profile Nix-flake deploy tool.
Other
1.22k stars 100 forks source link

add support for asynchronous building and pushing of profiles #271

Open PhilTaken opened 2 months ago

PhilTaken commented 2 months ago

NB: I have opened this Pull Request as a draft since I intend to continue working on it by improving the logging output. Since the builds are started concurrently, the build progress information is pretty much useless and flickers a lot.

Problem

The current implementation builds every single profile synchronously, including remote builds. Since remote builds were introduced back in #175, remote builds could be pipelined to deploy new configurations in a more time-efficient manner.

Solution

Build configurations that support remote builds concurrently.


Sidenote: I have decided to continue building local builds in a synchronous manner because I have run into hardware deadlocks previously when trying to evaluate and/or build multiple systems at the same time.

I have tested this code by deploying to my personal infrastructure (https://github.com/philtaken/dotfiles) and it works as intended.

PhilTaken commented 3 weeks ago

mentioning #46 for visibility

the current version works as expected, the only issue is the log flickering with multiple invocations of nix writing to stdout in parallel. I was considering utilising the raw-internal-json output similarly to how nix-output-monitor does it but that might be out of scope here 🤔

PhilTaken commented 3 weeks ago

activation is fully synchronous but that is usually the part that takes the least amount of time

rvem commented 3 weeks ago

The new approach seems good 👍