From 261e974883ed334633f293da0febd678f1f18e7e Mon Sep 17 00:00:00 2001 From: Thorarinn Sigurdsson Date: Wed, 28 Nov 2018 13:08:24 +0100 Subject: [PATCH] fix: fix dev command terminating on config change Also added a headerRendered instance var to commands accepting the watch flag, to prevent commands re-rendering their header on restart. --- garden-service/src/cli/cli.ts | 37 +++++++++++---------------- garden-service/src/commands/base.ts | 7 +++++ garden-service/src/commands/build.ts | 8 +++--- garden-service/src/commands/deploy.ts | 6 +++-- garden-service/src/commands/dev.ts | 10 +++++--- garden-service/src/commands/test.ts | 14 +++++----- 6 files changed, 45 insertions(+), 37 deletions(-) diff --git a/garden-service/src/cli/cli.ts b/garden-service/src/cli/cli.ts index 4209e17fea..6ffcd9e55b 100644 --- a/garden-service/src/cli/cli.ts +++ b/garden-service/src/cli/cli.ts @@ -7,36 +7,26 @@ */ import * as sywac from "sywac" -import { merge, intersection, range } from "lodash" +import { intersection, merge, range } from "lodash" import { resolve } from "path" import { safeDump } from "js-yaml" import { coreCommands } from "../commands/commands" -import stringify = require("json-stringify-safe") import { DeepPrimitiveMap } from "../config/common" -import { - getEnumKeys, - shutdown, - sleep, -} from "../util/util" +import { getEnumKeys, shutdown, sleep } from "../util/util" import { BooleanParameter, - Command, ChoicesParameter, + Command, + CommandResult, + EnvironmentOption, Parameter, StringParameter, - EnvironmentOption, - CommandResult, } from "../commands/base" -import { - GardenError, - PluginError, - toGardenError, - InternalError, -} from "../exceptions" -import { Garden, ContextOpts } from "../garden" - -import { Logger, LoggerType, getLogger } from "../logger/logger" +import { GardenError, InternalError, PluginError, toGardenError } from "../exceptions" +import { ContextOpts, Garden } from "../garden" + +import { getLogger, Logger, LoggerType } from "../logger/logger" import { LogLevel } from "../logger/log-node" import { BasicTerminalWriter } from "../logger/writers/basic-terminal-writer" import { FancyTerminalWriter } from "../logger/writers/fancy-terminal-writer" @@ -44,20 +34,21 @@ import { FileWriter } from "../logger/writers/file-writer" import { Writer } from "../logger/writers/base" import { - falsifyConflictingParams, + envSupportsEmoji, failOnInvalidOptions, + falsifyConflictingParams, + filterByKeys, getArgSynopsis, getKeys, getOptionSynopsis, - filterByKeys, prepareArgConfig, prepareOptionConfig, styleConfig, - envSupportsEmoji, } from "./helpers" import { GardenConfig } from "../config/base" import { defaultEnvironments } from "../config/project" import { ERROR_LOG_FILENAME } from "../constants" +import stringify = require("json-stringify-safe") const OUTPUT_RENDERERS = { json: (data: DeepPrimitiveMap) => { @@ -283,6 +274,8 @@ export class GardenCli { } let garden: Garden let result + await command.printHeader(log) + do { garden = await Garden.factory(root, contextOpts) diff --git a/garden-service/src/commands/base.ts b/garden-service/src/commands/base.ts index b86220b13e..edf8552606 100644 --- a/garden-service/src/commands/base.ts +++ b/garden-service/src/commands/base.ts @@ -272,6 +272,13 @@ export abstract class Command { arguments = buildArguments options = buildOptions + async printHeader(log) { + logHeader({ log, emoji: "hammer", command: "Build" }) + } + async action( { args, opts, garden, log }: CommandParams, ): Promise> { - await garden.clearBuilds() - const modules = await garden.getModules(args.module) const dependencyGraph = await garden.getDependencyGraph() const moduleNames = modules.map(m => m.name) - logHeader({ log, emoji: "hammer", command: "Build" }) - const results = await processModules({ garden, log, diff --git a/garden-service/src/commands/deploy.ts b/garden-service/src/commands/deploy.ts index 509dbc44cc..8119ecf188 100644 --- a/garden-service/src/commands/deploy.ts +++ b/garden-service/src/commands/deploy.ts @@ -73,6 +73,10 @@ export class DeployCommand extends Command { arguments = deployArgs options = deployOpts + async printHeader(log) { + logHeader({ log, emoji: "rocket", command: "Deploy" }) + } + async action({ garden, log, args, opts }: CommandParams): Promise> { const services = await garden.getServices(args.service) @@ -94,8 +98,6 @@ export class DeployCommand extends Command { watch = opts.watch } - logHeader({ log, emoji: "rocket", command: "Deploy" }) - // TODO: make this a task await garden.actions.prepareEnvironment({ log }) diff --git a/garden-service/src/commands/dev.ts b/garden-service/src/commands/dev.ts index 9f0386786a..a1bcbbcc77 100644 --- a/garden-service/src/commands/dev.ts +++ b/garden-service/src/commands/dev.ts @@ -24,6 +24,7 @@ import { CommandResult, CommandParams, StringsParameter, + handleTaskResults, } from "./base" import { STATIC_DIR } from "../constants" import { processModules } from "../process" @@ -65,13 +66,15 @@ export class DevCommand extends Command { options = devOpts - async action({ garden, log, opts }: CommandParams): Promise { + async printHeader(log) { // print ANSI banner image const data = await readFile(ansiBannerPath) log.info(data.toString()) log.info(chalk.gray.italic(`\nGood ${getGreetingTime()}! Let's get your environment wired up...\n`)) + } + async action({ garden, log, opts }: CommandParams): Promise { await garden.actions.prepareEnvironment({ log }) const modules = await garden.getModules() @@ -127,7 +130,7 @@ export class DevCommand extends Command { } - await processModules({ + const results = await processModules({ garden, log, modules, @@ -136,7 +139,8 @@ export class DevCommand extends Command { changeHandler: tasksForModule(true), }) - return {} + return handleTaskResults(log, "dev", results) + } } diff --git a/garden-service/src/commands/test.ts b/garden-service/src/commands/test.ts index 103942e108..b9c548f80a 100644 --- a/garden-service/src/commands/test.ts +++ b/garden-service/src/commands/test.ts @@ -72,6 +72,14 @@ export class TestCommand extends Command { arguments = testArgs options = testOpts + async printHeader(log) { + logHeader({ + log, + emoji: "thermometer", + command: `Running tests`, + }) + } + async action({ garden, log, args, opts }: CommandParams): Promise> { const dependencyGraph = await garden.getDependencyGraph() let modules: Module[] @@ -82,12 +90,6 @@ export class TestCommand extends Command { modules = await garden.getModules() } - logHeader({ - log, - emoji: "thermometer", - command: `Running tests`, - }) - await garden.actions.prepareEnvironment({ log }) const name = opts.name