mirror of
https://github.com/NixOS/nix.git
synced 2025-11-19 00:39:37 +01:00
Bare minimum ssh-ng:// extensions for Hydra
This is not as comprehensive as #10748, but I am also interested in figuring out whether all those additions are in fact necessary. This is bare minimum needed for https://github.com/NixOS/hydra/pull/1445, which has notable gaps but nevertheless reimplements enough with `ssh-ng://` to past all tests. I would like to merge this change as definitely necessary, and unclear whether sufficient. Then I would iterate on the corresponding Hydra PR until it seems potentially correct, seeing what, if any, further Nix API changes are necessary. Co-authored-by: Jörg Thalheim <Mic92@users.noreply.github.com>
This commit is contained in:
parent
1293388039
commit
a92104f7ac
4 changed files with 34 additions and 2 deletions
|
|
@ -767,7 +767,22 @@ BuildResult RemoteStore::buildDerivation(const StorePath & drvPath, const BasicD
|
||||||
auto conn(getConnection());
|
auto conn(getConnection());
|
||||||
conn->putBuildDerivationRequest(*this, &conn.daemonException, drvPath, drv, buildMode);
|
conn->putBuildDerivationRequest(*this, &conn.daemonException, drvPath, drv, buildMode);
|
||||||
conn.processStderr();
|
conn.processStderr();
|
||||||
return WorkerProto::Serialise<BuildResult>::read(*this, *conn);
|
return conn->getBuildDerivationResponse(*this, &conn.daemonException);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::function<BuildResult()> RemoteStore::buildDerivationAsync(
|
||||||
|
const StorePath & drvPath, const BasicDerivation & drv,
|
||||||
|
BuildMode buildMode)
|
||||||
|
{
|
||||||
|
// Until we have C++23 std::move_only_function
|
||||||
|
auto conn = std::make_shared<ConnectionHandle>(getConnection());
|
||||||
|
(*conn)->putBuildDerivationRequest(*this, &conn->daemonException, drvPath, drv, buildMode);
|
||||||
|
conn->processStderr();
|
||||||
|
|
||||||
|
return [this,conn]() -> BuildResult {
|
||||||
|
return (*conn)->getBuildDerivationResponse(*this, &conn->daemonException);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -122,6 +122,18 @@ public:
|
||||||
BuildResult buildDerivation(const StorePath & drvPath, const BasicDerivation & drv,
|
BuildResult buildDerivation(const StorePath & drvPath, const BasicDerivation & drv,
|
||||||
BuildMode buildMode) override;
|
BuildMode buildMode) override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Note, the returned function must only be called once, or we'll
|
||||||
|
* try to read from the connection twice.
|
||||||
|
*
|
||||||
|
* This function is used by Hydra.
|
||||||
|
*
|
||||||
|
* @todo Use C++23 `std::move_only_function`.
|
||||||
|
*/
|
||||||
|
std::function<BuildResult()> buildDerivationAsync(
|
||||||
|
const StorePath & drvPath, const BasicDerivation & drv,
|
||||||
|
BuildMode buildMode);
|
||||||
|
|
||||||
void ensurePath(const StorePath & path) override;
|
void ensurePath(const StorePath & path) override;
|
||||||
|
|
||||||
void addTempRoot(const StorePath & path) override;
|
void addTempRoot(const StorePath & path) override;
|
||||||
|
|
|
||||||
|
|
@ -209,7 +209,7 @@ ref<RemoteStore::Connection> SSHStore::openConnection()
|
||||||
}
|
}
|
||||||
command.insert(command.end(),
|
command.insert(command.end(),
|
||||||
extraRemoteProgramArgs.begin(), extraRemoteProgramArgs.end());
|
extraRemoteProgramArgs.begin(), extraRemoteProgramArgs.end());
|
||||||
conn->sshConn = master.startCommand(std::move(command));
|
conn->sshConn = master.startCommand(std::move(command), std::list{extraSshArgs});
|
||||||
conn->to = FdSink(conn->sshConn->in.get());
|
conn->to = FdSink(conn->sshConn->in.get());
|
||||||
conn->from = FdSource(conn->sshConn->out.get());
|
conn->from = FdSource(conn->sshConn->out.get());
|
||||||
return conn;
|
return conn;
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,11 @@ struct SSHStoreConfig : virtual RemoteStoreConfig, virtual CommonSSHStoreConfig
|
||||||
const Setting<Strings> remoteProgram{
|
const Setting<Strings> remoteProgram{
|
||||||
this, {"nix-daemon"}, "remote-program", "Path to the `nix-daemon` executable on the remote machine."};
|
this, {"nix-daemon"}, "remote-program", "Path to the `nix-daemon` executable on the remote machine."};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hack for hydra
|
||||||
|
*/
|
||||||
|
Strings extraSshArgs = {};
|
||||||
|
|
||||||
const std::string name() override
|
const std::string name() override
|
||||||
{
|
{
|
||||||
return "Experimental SSH Store";
|
return "Experimental SSH Store";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue