diff --git a/src/laminar.cpp b/src/laminar.cpp index 196fbce..c164c7e 100644 --- a/src/laminar.cpp +++ b/src/laminar.cpp @@ -425,6 +425,12 @@ void Laminar::assignNewJobs() { run->startedAt = time(0); run->build = ++buildNums[run->name]; run->laminarHome = homeDir; + // set the last known result if exists + db->stmt("SELECT result FROM builds WHERE name = ? ORDER BY completedAt DESC LIMIT 1") + .bind(run->name) + .fetch([=](int result){ + run->lastResult = RunState(result); + }); fs::path wd = fs::path(homeDir)/"run"/run->name/std::to_string(run->build); if(!fs::is_directory(wd) && !fs::create_directory(wd)) { diff --git a/src/run.cpp b/src/run.cpp index ec426d4..cf1b84e 100644 --- a/src/run.cpp +++ b/src/run.cpp @@ -42,7 +42,7 @@ std::string to_string(const RunState& rs) { Run::Run() { result = RunState::SUCCESS; - + lastResult = RunState::UNKNOWN; } Run::~Run() { @@ -84,6 +84,8 @@ bool Run::step() { setenv("PATH", PATH.c_str(), true); setenv("lBuildNum", buildNum.c_str(), true); setenv("lJobName", name.c_str(), true); + setenv("lResult", to_string(result).c_str(), true); + setenv("lLastResult", to_string(lastResult).c_str(), true); setenv("lWorkspace", (fs::path(laminarHome)/"run"/name/"workspace").string().c_str(), true); for(auto& pair : params) { setenv(pair.first.c_str(), pair.second.c_str(), false); diff --git a/src/run.h b/src/run.h index 7ba48db..f1334ea 100644 --- a/src/run.h +++ b/src/run.h @@ -66,6 +66,7 @@ public: std::function notifyCompletion; Node* node; RunState result; + RunState lastResult; std::string laminarHome; std::string name; std::string wd;