このブログをご覧のみなさん、こんにちは。

以下を参考に、Visual Studio Online のビルドタスクをハックしようとしたらハマりました。

VisualStudioOnline – Visual Studio Onlineのビルドタスクを作成する – Qiita

作成した task.json は以下の通りです。

{
  "id": "805ec540-849b-11e5-932a-a52ba8bc3e95",
  "name": "sbt",
  "friendlyName": "sbt",
  "description": "The interactive build tool for Scala",
  "author": "Takashi Takebayashi",
  "helpMarkDown": "\[More Information\](http://www.scala-sbt.org)",
  "category": "Build",
  "visibility": [
    "Build"
  ],
  "demands": [],
  "version": {
    "Major": 0,
    "Minor": 1,
    "Patch": 0
  },
  "minimumAgentVersion": "1.83.0",
  "instanceNameFormat": "sbt $(message)",
  "groups": [
    {
      "name": "advanced",
      "displayName": "Advanced",
      "isExpanded": false
    }
  ],
  "inputs": [
    {
      "name": "cwd",
      "type": "filePath",
      "label": "Working Directory",
      "defaultValue": "",
      "required": false,
      "helpMarkDown": "Current working directory when sbt is run.",
      "groupName": "advanced"
    },
    {
      "name": "msg",
      "type": "string",
      "label": "Message",
      "defaultValue": "Hello sbt",
      "required": true,
      "helpMarkDown": "Message to echo out"
    },
    {
      "name": "arguments",
      "type": "string",
      "label": "sbt command(s)",
      "defaultValue": "",
      "helpMarkDown": "Optional. Specifying a space-separated list of sbt commands as arguments. compile is not needed since already added via default input.",
      "required": false
    }
  ],
  "execution": {
    "Node": {
      "target": "sbt.js",
      "argumentFormat": ""
    }
  }
}

作成した sbt.js は以下の通りです。

var path = require(‘path’);
var tl = require(‘vso-task-lib’);
var echo = new tl.ToolRunner(tl.which(‘echo’, true));
var cwd = tl.getPathInput(‘cwd’, false);
echo.arg(cwd);
echo.arg(tl.getDelimitedInput(‘targets’, ‘ ‘, false));
echo.exec({ failOnStdErr: false})
.then(function(code) {
tl.exit(code);
})
.fail(function(err) {
console.error(err.message);
tl.debug(‘taskRunner fail’);
tl.exit(1);
})
tl.checkPath(cwd, ‘cwd’);
tl.cd(cwd);
echo.exec({ failOnStdErr: false})
.then(function(code) {
tl.exit(code);
})
.fail(function(err) {
console.error(err.message);
tl.debug(‘taskRunner fail’);
tl.exit(1);
})

そして、得られた実行結果は以下の通りです。

2015-11-07T02:39:15.540Z: [command]/bin/echo 'Hello sbt'
2015-11-07T02:39:15.550Z: Hello sbt

何がどうなって「[command]/bin/echo ‘Hello sbt’」を実行しているのか理解できません。