import cliutils, docopt, os, sequtils, strutils, tempfile, uuids import strawbosspkg/configuration import strawbosspkg/core import strawbosspkg/server let SB_VER = "0.2.0" proc logProcOutput*(outMsg, errMsg: TaintedString, cmd: string) = let prefix = if cmd != nil: cmd else: "" if outMsg != nil: stdout.writeLine prefix & outMsg if errMsg != nil: stderr.writeLine prefix & errMsg when isMainModule: let doc = """ Usage: strawboss serve [options] strawboss run strawboss hashpwd Options -c --config-file Use this config file instead of the default (strawboss.config.json). """ let args = docopt(doc, version = "strawboss v" & SB_VER) let cfgFile = if args["--config-file"]: $args["--config-file"] else: "strawboss.config.json" var cfg = loadStrawBossConfig(cfgFile) cfg.pathToExe = paramStr(0) if not existsDir(cfg.buildDataDir): echo "Build data directory (" & cfg.buildDataDir & ") does not exist. Creating..." createDir(cfg.buildDataDir) cfg.buildDataDir = expandFilename(cfg.buildDataDir) if args["run"]: var req: RunRequest try: req = loadRunRequest($args[""]) except: echo "strawboss: unable to parse run request (" & $args[""] & ")" quit(QuitFailure) try: if req.workspaceDir.isNilOrEmpty: req.workspaceDir = mkdtemp() let status = core.run(cfg, req, logProcOutput) if status.state == BuildState.failed: raiseEx status.details echo "strawboss: build passed." except: echo "strawboss: build FAILED: " & getCurrentExceptionMsg() & "." quit(QuitFailure) finally: if existsDir(req.workspaceDir): removeDir(req.workspaceDir) elif args["serve"]: server.start(cfg) elif args["hashpwd"]: echo $cfg.pwdCost let pwd = server.hashPwd($args[""], cfg.pwdCost) echo pwd echo pwd[0..28]