diff --git a/.gitignore b/.gitignore
index ba4e60c..e17b757 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,3 @@
-# Project specific
-
-BuildArtifacts/
-
# Created by https://www.gitignore.io/api/cake,visualstudio
### Cake ###
@@ -304,4 +300,9 @@ __pycache__/
# By default, sensitive information, such as encrypted password
# should be stored in the .pubxml.user file.
-# End of https://www.gitignore.io/api/cake,visualstudio
\ No newline at end of file
+# End of https://www.gitignore.io/api/cake,visualstudio
+
+# Project specific
+
+BuildArtifacts/
+config.wyam.*
\ No newline at end of file
diff --git a/config.wyam b/config.wyam
new file mode 100644
index 0000000..ec66293
--- /dev/null
+++ b/config.wyam
@@ -0,0 +1 @@
+System.Globalization.CultureInfo.DefaultThreadCurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");
diff --git a/docs/input/_Bottom.cshtml b/docs/input/_Bottom.cshtml
new file mode 100644
index 0000000..b6d59d7
--- /dev/null
+++ b/docs/input/_Bottom.cshtml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
diff --git a/docs/input/_Footer.cshtml b/docs/input/_Footer.cshtml
new file mode 100644
index 0000000..e483ca2
--- /dev/null
+++ b/docs/input/_Footer.cshtml
@@ -0,0 +1,5 @@
+
+ Copyright © Pascal Berger and contributors .
+
+ Website generated by Wyam
+
diff --git a/docs/input/assets/css/override.less b/docs/input/assets/css/override.less
new file mode 100644
index 0000000..74d8ed4
--- /dev/null
+++ b/docs/input/assets/css/override.less
@@ -0,0 +1,122 @@
+/* Control the margin for bootstrap alert boxes */
+.alert > p {
+ margin-top: 0px;
+}
+
+/* Control the look and feel of the copy box applied to code sections */
+.btn-copy[disabled] .clippy {
+ opacity: .3;
+}
+pre .btn-copy {
+ -webkit-transition: opacity 0.3s ease-in-out;
+ -o-transition: opacity 0.3s ease-in-out;
+ transition: opacity 0.3s ease-in-out;
+ opacity: 0;
+ padding: 2px 6px;
+ float: right;
+}
+pre:hover .btn-copy {
+ opacity: 1;
+}
+.tooltipped {
+ position: relative
+}
+.tooltipped:after {
+ position: absolute;
+ z-index: 1000000;
+ display: none;
+ padding: 5px 8px;
+ font: normal normal 11px/1.5 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-wrap: break-word;
+ white-space: pre;
+ pointer-events: none;
+ content: attr(aria-label);
+ background: rgba(0, 0, 0, 0.8);
+ border-radius: 3px;
+ -webkit-font-smoothing: subpixel-antialiased
+}
+.tooltipped:before {
+ position: absolute;
+ z-index: 1000001;
+ display: none;
+ width: 0;
+ height: 0;
+ color: rgba(0, 0, 0, 0.8);
+ pointer-events: none;
+ content: "";
+ border: 5px solid transparent
+}
+.tooltipped:hover:before, .tooltipped:hover:after, .tooltipped:active:before, .tooltipped:active:after, .tooltipped:focus:before, .tooltipped:focus:after {
+ display: inline-block;
+ text-decoration: none
+}
+.tooltipped-s:after, .tooltipped-se:after, .tooltipped-sw:after {
+ top: 100%;
+ right: 50%;
+ margin-top: 5px
+}
+.tooltipped-s:before, .tooltipped-se:before, .tooltipped-sw:before {
+ top: auto;
+ right: 50%;
+ bottom: -5px;
+ margin-right: -5px;
+ border-bottom-color: rgba(0, 0, 0, 0.8)
+}
+
+@font-family-sans-serif: "Roboto", Helvetica, Arial, sans-serif;
+
+/* For Gitter and GitHub */
+.bottom-footer {
+ margin-bottom: 40px !important; // Make room for Gitter and GitHub buttons
+}
+
+.gitter-open-chat-button {
+ background-color: #3c8dbc;
+ font-family: @font-family-sans-serif;
+ letter-spacing: normal;
+ right: 90px;
+}
+
+.gitter-open-chat-button:focus, .gitter-open-chat-button:hover,
+.github-button:focus, .github-button:hover,
+{
+ background-color: #4EABDD;
+ color: #fff;
+}
+
+.gitter-chat-embed {
+ top: 49px;
+ border-top: 1px solid #000;
+ z-index: 10000;
+}
+
+.github-button {
+ z-index: 100;
+ position: fixed;
+ bottom: 0px;
+ right: 240px;
+ padding: 1em 3em;
+ background-color: #367fa9;
+ border: 0;
+ border-top-left-radius: 0.5em;
+ border-top-right-radius: 0.5em;
+ font-family: sans-serif;
+ font-size: 9pt;
+ text-transform: uppercase;
+ text-align: center;
+ text-decoration: none;
+ cursor: pointer;
+ cursor: hand;
+ -webkit-transition: all .3s ease;
+ transition: all .3s ease;
+ color: #fff;
+ a, a:active, a:hover, a:focus {
+ color: #fff;
+ }
+}
\ No newline at end of file
diff --git a/docs/input/assets/images/clippy.svg b/docs/input/assets/images/clippy.svg
new file mode 100644
index 0000000..e1b1703
--- /dev/null
+++ b/docs/input/assets/images/clippy.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/input/assets/js/anchor.min.js b/docs/input/assets/js/anchor.min.js
new file mode 100644
index 0000000..7f34489
--- /dev/null
+++ b/docs/input/assets/js/anchor.min.js
@@ -0,0 +1,6 @@
+/**
+ * AnchorJS - v3.2.2 - 2016-10-05
+ * https://github.com/bryanbraun/anchorjs
+ * Copyright (c) 2016 Bryan Braun; Licensed MIT
+ */
+!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";function A(A){function e(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.class=A.hasOwnProperty("class")?A.class:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64}function t(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}function n(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style"),t=" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",n=" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",i=' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',o=" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }";e.className="anchorjs",e.appendChild(document.createTextNode("")),A=document.head.querySelector('[rel="stylesheet"], style'),void 0===A?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(t,e.sheet.cssRules.length),e.sheet.insertRule(n,e.sheet.cssRules.length),e.sheet.insertRule(o,e.sheet.cssRules.length),e.sheet.insertRule(i,e.sheet.cssRules.length)}}this.options=A||{},this.elements=[],e(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var i,o,s,c,r,a,h,l,u,d,f,p,w=[];if(e(this.options),p=this.options.visible,"touch"===p&&(p=this.isTouchDevice()?"always":"hover"),A||(A="h1, h2, h3, h4, h5, h6"),i=t(A),0===i.length)return!1;for(n(),o=document.querySelectorAll("[id]"),s=[].map.call(o,function(A){return A.id}),r=0;r-1,t=A.lastChild&&(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ")>-1;return e||t||!1}}return A});
diff --git a/docs/input/assets/js/clipboard.min.js b/docs/input/assets/js/clipboard.min.js
new file mode 100644
index 0000000..1d7c5d5
--- /dev/null
+++ b/docs/input/assets/js/clipboard.min.js
@@ -0,0 +1,7 @@
+/*!
+ * clipboard.js v1.5.16
+ * https://zenorocha.github.io/clipboard.js
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Clipboard=e()}}(function(){var e,t,n;return function e(t,n,i){function o(a,c){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!c&&l)return l(a,!0);if(r)return r(a,!0);var s=new Error("Cannot find module '"+a+"'");throw s.code="MODULE_NOT_FOUND",s}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return o(n?n:e)},u,u.exports,e,t,n,i)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function e(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function e(){var t=this,n="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=document.body.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[n?"right":"left"]="-9999px";var i=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.addEventListener("focus",window.scrollTo(0,i)),this.fakeElem.style.top=i+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,o.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function e(){this.fakeHandler&&(document.body.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function e(){this.selectedText=(0,o.default)(this.target),this.copyText()}},{key:"copyText",value:function e(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function e(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function e(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function e(){this.removeFake()}},{key:"action",set:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function e(){return this._action}},{key:"target",set:function e(t){if(void 0!==t){if(!t||"object"!==("undefined"==typeof t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function e(){return this._target}}]),e}();e.exports=c})},{select:5}],8:[function(t,n,i){!function(o,r){if("function"==typeof e&&e.amd)e(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if("undefined"!=typeof i)r(n,t("./clipboard-action"),t("tiny-emitter"),t("good-listener"));else{var a={exports:{}};r(a,o.clipboardAction,o.tinyEmitter,o.goodListener),o.clipboard=a.exports}}(this,function(e,t,n,i){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var s=o(t),u=o(n),f=o(i),d=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText}},{key:"listenClick",value:function e(t){var n=this;this.listener=(0,f.default)(t,"click",function(e){return n.onClick(e)})}},{key:"onClick",value:function e(t){var n=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new s.default({action:this.action(n),target:this.target(n),text:this.text(n),trigger:n,emitter:this})}},{key:"defaultAction",value:function e(t){return l("action",t)}},{key:"defaultTarget",value:function e(t){var n=l("target",t);if(n)return document.querySelector(n)}},{key:"defaultText",value:function e(t){return l("text",t)}},{key:"destroy",value:function e(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}]),t}(u.default);e.exports=h})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)});
\ No newline at end of file
diff --git a/docs/input/docs/index.cshtml b/docs/input/docs/index.cshtml
new file mode 100644
index 0000000..1167fab
--- /dev/null
+++ b/docs/input/docs/index.cshtml
@@ -0,0 +1,19 @@
+---
+Title: Documentation
+---
+This user guide, like Cake.Tfs itself, is under very active development. Some parts of it aren't
+documented as completely as they need to be, but we gladly accept your contributions.
+
+We need your help to improve the documentation for Cake.Tfs, so if there is something that you
+would like to add then you can edit the content directly on GitHub.
+
+@foreach(IDocument child in Model.DocumentList(Keys.Children).OrderBy(x => x.Get(DocsKeys.Order, 1000)))
+{
+ @(child.String(Keys.Title))
+ if(child.ContainsKey(DocsKeys.Description))
+ {
+ @Html.Raw(child.String(DocsKeys.Description))
+ }
+
+ @Html.Partial("_ChildPages", child)
+}
\ No newline at end of file
diff --git a/docs/input/docs/usage/examples.md b/docs/input/docs/usage/examples.md
new file mode 100644
index 0000000..814dcdc
--- /dev/null
+++ b/docs/input/docs/usage/examples.md
@@ -0,0 +1,12 @@
+# Build Script
+
+To use the Cake Tfs addin in your Cake file simply import it. Then define a task.
+
+```csharp
+#addin "Cake.Tfs"
+
+Task("run-generator").Does(() =>
+{
+ RunYeomanGenerator("my-generator");
+}
+```
\ No newline at end of file
diff --git a/docs/input/docs/usage/index.cshtml b/docs/input/docs/usage/index.cshtml
new file mode 100644
index 0000000..acaa015
--- /dev/null
+++ b/docs/input/docs/usage/index.cshtml
@@ -0,0 +1,7 @@
+---
+Order: 10
+Description: How to obtain, configure, and use Cake.Tfs.
+---
+@Html.Raw(Model.String(DocsKeys.Description))
+
+@Html.Partial("_ChildPages")
\ No newline at end of file
diff --git a/docs/input/index.cshtml b/docs/input/index.cshtml
new file mode 100644
index 0000000..720913e
--- /dev/null
+++ b/docs/input/index.cshtml
@@ -0,0 +1,13 @@
+---
+Title: Cake.Tfs
+NoSidebar: true
+NoContainer: false
+NoGutter: true
+---
+
+
+
What is it?
+
+ The Tfs Addin for Cake allows you to access Team Foundation Server or Visual Studio Team Services from Cake build scripts.
+
+
\ No newline at end of file
diff --git a/docs/packages.xml b/docs/packages.xml
new file mode 100644
index 0000000..fbdfa4b
--- /dev/null
+++ b/docs/packages.xml
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/setup.cake b/setup.cake
index 0f21c30..ce2e9bd 100644
--- a/setup.cake
+++ b/setup.cake
@@ -9,7 +9,8 @@ BuildParameters.SetParameters(
title: "Cake.Tfs",
repositoryOwner: "cake-contrib",
repositoryName: "Cake.Tfs",
- appVeyorAccountName: "cakecontrib");
+ appVeyorAccountName: "cakecontrib",
+ shouldDeployGraphDocumentation: false);
BuildParameters.PrintParameters(Context);