From 2d548dbc09a509f1b5af58f31d6f2503cf8d9f5e Mon Sep 17 00:00:00 2001 From: David Worms Date: Tue, 9 Mar 2021 22:41:19 +0100 Subject: [PATCH] feat(core): activate diff in log.md --- packages/core/lib/actions/log/md.js | 21 +++++++++++++++--- packages/core/lib/actions/log/stream.js | 14 ++++++++---- packages/core/src/actions/log/md.coffee.md | 14 +++++++++++- .../core/src/actions/log/stream.coffee.md | 8 +++---- packages/core/test/actions/log/md.coffee | 21 +++++++++++++++--- packages/file/lib/touch.js | 15 +++---------- .../test/{diff.coffee => index.diff.coffee} | 22 +++++++++++++++++++ 7 files changed, 88 insertions(+), 27 deletions(-) rename packages/file/test/{diff.coffee => index.diff.coffee} (83%) diff --git a/packages/core/lib/actions/log/md.js b/packages/core/lib/actions/log/md.js index 4c217aa93..ba103b2e5 100644 --- a/packages/core/lib/actions/log/md.js +++ b/packages/core/lib/actions/log/md.js @@ -55,6 +55,11 @@ handler = async function({config}) { $: log_fs }, config, { serializer: { + 'diff': function(log) { + if (log.message) { + return `\n\`\`\`diff\n${log.message}\`\`\`\n`; + } + }, 'nikita:action:start': function({action}) { var act, bastard, content, header, headers, walk; act = action.parent; @@ -68,9 +73,19 @@ handler = async function({config}) { } content = []; if (config.enter && action.metadata.module && action.metadata.log !== false && bastard !== true) { - content.push(`\nEntering ${action.metadata.module} (${(action.metadata.position.map(function(index) { - return index + 1; - })).join('.')})\n`); + content.push([ + '\n', + 'Entering', + ' ', + `${action.metadata.module}`, + ' ', + '(', + `${(action.metadata.position.map(function(index) { + return index + 1; + })).join('.')}`, + ')', + '\n' + ].join('')); } if (!action.metadata.header) { return content.join(''); diff --git a/packages/core/lib/actions/log/stream.js b/packages/core/lib/actions/log/stream.js index fda63089a..2f881ceb9 100644 --- a/packages/core/lib/actions/log/stream.js +++ b/packages/core/lib/actions/log/stream.js @@ -57,6 +57,16 @@ handler = function({ return config.stream.close(); } }; + events.on('diff', function(log) { + var data; + if (!config.serializer.diff) { + return; + } + data = config.serializer.diff(log); + if (data != null) { + return config.stream.write(data); + } + }); events.on('nikita:action:start', async function() { var data; if (!config.serializer['nikita:action:start']) { @@ -109,8 +119,6 @@ handler = function({ }); events.on('nikita:resolved', function({action}) { var data; - // console.log 'nikita:resolved', position, uuid, action.metadata.position, !!action.parent - // return unless position.slice(0, -1).join('.') is action.metadata.position.join('.') if (config.serializer['nikita:resolved']) { data = config.serializer['nikita:resolved'].apply(null, arguments); if (data != null) { @@ -121,8 +129,6 @@ handler = function({ }); events.on('nikita:rejected', function({action}) { var data; - // console.log 'nikita:rejected', position, uuid, action.metadata, !!action.parent - // return unless position.slice(0, -1).join('.') is action.metadata.position.join('.') if (config.serializer['nikita:rejected']) { data = config.serializer['nikita:rejected'].apply(null, arguments); if (data != null) { diff --git a/packages/core/src/actions/log/md.coffee.md b/packages/core/src/actions/log/md.coffee.md index b01bac16c..294d7cf3c 100644 --- a/packages/core/src/actions/log/md.coffee.md +++ b/packages/core/src/actions/log/md.coffee.md @@ -49,6 +49,8 @@ nikita(async function(){ handler = ({config}) -> state = {} await @call $: log_fs, config, serializer: + 'diff': (log) -> + "\n```diff\n#{log.message}```\n" if log.message 'nikita:action:start': ({action}) -> act = action.parent bastard = undefined @@ -58,7 +60,17 @@ nikita(async function(){ act = act.parent content = [] if config.enter and action.metadata.module and action.metadata.log isnt false and bastard isnt true - content.push "\nEntering #{action.metadata.module} (#{(action.metadata.position.map (index) -> index + 1).join '.'})\n" + content.push [ + '\n' + 'Entering' + ' ' + "#{action.metadata.module}" + ' ' + '(' + "#{(action.metadata.position.map (index) -> index + 1).join '.'}" + ')' + '\n' + ].join '' return content.join '' unless action.metadata.header walk = (parent) -> precious = parent.metadata.header diff --git a/packages/core/src/actions/log/stream.coffee.md b/packages/core/src/actions/log/stream.coffee.md index 013a94f01..96d47b816 100644 --- a/packages/core/src/actions/log/stream.coffee.md +++ b/packages/core/src/actions/log/stream.coffee.md @@ -41,6 +41,10 @@ Write log to custom destinations in a user provided format. # Events close = -> config.stream.close() if config.end + events.on 'diff', (log) -> + return unless config.serializer.diff + data = config.serializer.diff log + config.stream.write data if data? events.on 'nikita:action:start', -> return unless config.serializer['nikita:action:start'] data = await config.serializer['nikita:action:start'].apply null, arguments @@ -62,15 +66,11 @@ Write log to custom destinations in a user provided format. data = config.serializer.stdout_stream log config.stream.write data if data? events.on 'nikita:resolved', ({action}) -> - # console.log 'nikita:resolved', position, uuid, action.metadata.position, !!action.parent - # return unless position.slice(0, -1).join('.') is action.metadata.position.join('.') if config.serializer['nikita:resolved'] data = config.serializer['nikita:resolved'].apply null, arguments config.stream.write data if data? close() events.on 'nikita:rejected', ({action}) -> - # console.log 'nikita:rejected', position, uuid, action.metadata, !!action.parent - # return unless position.slice(0, -1).join('.') is action.metadata.position.join('.') if config.serializer['nikita:rejected'] data = config.serializer['nikita:rejected'].apply null, arguments config.stream.write data if data? diff --git a/packages/core/test/actions/log/md.coffee b/packages/core/test/actions/log/md.coffee index 1cd0b3215..ce4737f55 100644 --- a/packages/core/test/actions/log/md.coffee +++ b/packages/core/test/actions/log/md.coffee @@ -61,9 +61,7 @@ describe 'actions.log.md', -> log message: 'ok 1' await @call -> new Promise (resolve) -> - setTimeout -> - resolve() - , 500 + setTimeout resolve 200 @call $header: 'h2', ({tools: {log}}) -> log message: 'ok 2' @fs.assert @@ -164,6 +162,23 @@ describe 'actions.log.md', -> ``` """ + describe 'event `diff`', -> + + they 'write message in code block', ({ssh}) -> + nikita + $ssh: ssh + $tmpdir: true + , ({metadata: {tmpdir}}) -> + await @log.md basedir: tmpdir, enter: false + await @call ({tools: {log}}) -> + log message: '1 + new line', type: 'diff' + @fs.base.readFile + target: "#{tmpdir}/localhost.log" + encoding: 'ascii' + .should.be.resolvedWith + data: '\n```diff\n1 + new line```\n' + + describe 'config `enter`', -> they 'disabled when false', ({ssh}) -> diff --git a/packages/file/lib/touch.js b/packages/file/lib/touch.js index 44bbf1324..c863faaf5 100644 --- a/packages/file/lib/touch.js +++ b/packages/file/lib/touch.js @@ -21,16 +21,9 @@ // console.info(`File was touched: ${$status}`) // ``` -// ## Hooks -var handler, on_action, schema; - -on_action = function({config, metadata}) { - if (metadata.argument != null) { - return config.target = metadata.argument; - } -}; - // ## Schema +var handler, schema; + schema = { type: 'object', properties: { @@ -105,10 +98,8 @@ handler = async function({ // ## Exports module.exports = { handler: handler, - hooks: { - on_action: on_action - }, metadata: { + argument_to_config: 'target', schema: schema } }; diff --git a/packages/file/test/diff.coffee b/packages/file/test/index.diff.coffee similarity index 83% rename from packages/file/test/diff.coffee rename to packages/file/test/index.diff.coffee index f65fe86a4..95d392ba2 100644 --- a/packages/file/test/diff.coffee +++ b/packages/file/test/index.diff.coffee @@ -93,3 +93,25 @@ describe 'file config diff', -> content: 'some content' diff: (text, raw) -> diff = text diff.should.eql '1 + some content\n' + + they 'honored by `log.md` action', ({ssh}) -> + nikita + $ssh: ssh + $tmpdir: true + , ({metadata: {tmpdir}}) -> + await @log.md + basedir: tmpdir + filename: 'nikita.log' + await @file + target: "#{tmpdir}/file" + content: 'some content' + diff: (text, raw) -> diff = text + {data} = await @fs.base.readFile + $log: false + target: "#{tmpdir}/nikita.log" + encoding: 'ascii' + data.should.containEql ''' + ```diff + 1 + some content + ``` + '''