diff --git a/CHANGELOG.md b/CHANGELOG.md index bde02e6a..13dcb63a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY! This project adheres to [Semantic Versioning](http://semver.org/). +## v7.0.6 - 2018-03-20 + +* Make sure image name is all lowercase #815 [Akis Kesoglou] +* Improve handling of build log output #815 [Akis Kesoglou] + ## v7.0.5 - 2018-03-15 * Add bash completions #801 [Ronald McCollam] diff --git a/lib/utils/compose.coffee b/lib/utils/compose.coffee index a8116dc2..3a0c24a3 100644 --- a/lib/utils/compose.coffee +++ b/lib/utils/compose.coffee @@ -63,7 +63,7 @@ createProject = (composePath, composeStr, projectName = null) -> # generate an image name based on the project and service names # if one is not given and the service requires a build if descr.image.context? and not descr.image.tag? - descr.image.tag = [ projectName, descr.serviceName ].join('_') + descr.image.tag = [ projectName, descr.serviceName ].join('_').toLowerCase() return descr return { path: composePath, @@ -188,7 +188,7 @@ exports.buildProject = ( # multibuild parses the composition internally so any tags we've # set before are lost; re-assign them here - task.tag ?= [ projectName, task.serviceName ].join('_') + task.tag ?= [ projectName, task.serviceName ].join('_').toLowerCase() if d.image.context? d.image.tag = task.tag @@ -225,6 +225,7 @@ exports.buildProject = ( task.progressHook = pullProgressAdapter(captureStream) else task.streamHook = (stream) -> + stream = createLogStream(stream) if qemuPath? buildThroughStream = transpose.getBuildThroughStream hostQemuPath: toPosixPath(qemuPath) @@ -236,6 +237,7 @@ exports.buildProject = ( # where we're given objects. capture these strings as they come # before we parse them. rawStream + .pipe(dropEmptyLinesStream()) .pipe(captureStream) .pipe(buildProgressAdapter(inlineLogs)) .pipe(task.logStream) @@ -440,13 +442,22 @@ pushProgressRenderer = (tty, prefix) -> tty.clearLine() return fn +createLogStream = (input) -> + split = require('split') + stripAnsi = require('strip-ansi-stream') + return input.pipe(stripAnsi()).pipe(split()) + +dropEmptyLinesStream = -> + through = require('through2') + through (data, enc, cb) -> + str = data.toString('utf-8') + @push(str) if str.trim() + cb() + buildLogCapture = (objectMode, buffer) -> - _ = require('lodash') through = require('through2') through { objectMode }, (data, enc, cb) -> - return cb(null, data) if not data? - # data from pull stream if data.error buffer.push("#{data.error}") @@ -457,30 +468,14 @@ buildLogCapture = (objectMode, buffer) -> # data from build stream else - # normalise build log output here. it is somewhat ugly - # that this supposedly "passthrough" stream mutates the - # values before forwarding them, but it's convenient - # as it allows to both forward and save normalised logs - - # convert to string, split to lines, trim each one and - # filter out empty ones. - lines = _(data.toString('utf-8').split(/\r?\n$/)) - .map(_.trimEnd) - .reject(_.isEmpty) - - # forward each line separately - lines.forEach (line) => - buffer.push(line) - @push(line) - - return cb() + buffer.push(data) cb(null, data) buildProgressAdapter = (inline) -> through = require('through2') - stepRegex = /^\s*Step\s+(\d+)\/(\d+)\s*:\s+(.+)$/ + stepRegex = /^\s*Step\s+(\d+)\/(\d+)\s*: (.+)$/ [ step, numSteps, progress ] = [ null, null, undefined ] @@ -495,7 +490,7 @@ buildProgressAdapter = (inline) -> else if (match = stepRegex.exec(str)) step = match[1] - numSteps = match[2] + numSteps ?= match[2] str = match[3] if step? str = "Step #{step}/#{numSteps}: #{str}" diff --git a/package.json b/package.json index 23e86cd9..1af86acf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "resin-cli", - "version": "7.0.5", + "version": "7.0.6", "description": "The official resin.io CLI tool", "main": "./build/actions/index.js", "homepage": "https://github.com/resin-io/resin-cli", @@ -148,8 +148,10 @@ "rimraf": "^2.4.3", "rindle": "^1.0.0", "semver": "^5.3.0", + "split": "^1.0.1", "stream-to-promise": "^2.2.0", "string-width": "^2.1.1", + "strip-ansi-stream": "^1.0.0", "through2": "^2.0.3", "tmp": "0.0.31", "umount": "^1.1.6",