/// /// Copyright 2019 Oliver Giles /// /// This file is part of Laminar /// /// Laminar is free software: you can redistribute it and/or modify /// it under the terms of the GNU General Public License as published by /// the Free Software Foundation, either version 3 of the License, or /// (at your option) any later version. /// /// Laminar is distributed in the hope that it will be useful, /// but WITHOUT ANY WARRANTY; without even the implied warranty of /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the /// GNU General Public License for more details. /// /// You should have received a copy of the GNU General Public License /// along with Laminar. If not, see /// #include "log.h" #include #include #include #include #include #include #include #include #include #include "run.h" // short syntax helper for kj::Path template inline kj::Path operator/(const kj::Path& p, const T& ext) { return p.append(ext); } template inline kj::Path operator/(const kj::PathPtr& p, const T& ext) { return p.append(ext); } struct Script { kj::Path path; kj::Path cwd; bool runOnAbort; }; class Leader final : public kj::TaskSet::ErrorHandler { public: Leader(kj::AsyncIoContext& ioContext, kj::Filesystem& fs, const char* jobName, uint runNumber); RunState run(); private: void taskFailed(kj::Exception&& exception) override; kj::Promise step(std::queue