diff --git a/.gitignore b/.gitignore index 4306654..545ca15 100644 --- a/.gitignore +++ b/.gitignore @@ -30,9 +30,15 @@ _ReSharper*/ *.vsix publish.bat +*.js + .fake node_modules SetPaketCredentialProvider.dev/CredentialProvider/ SetPaketCredentialProvider/ +FAKE5/ +FAKE5Vault/ PaketCredentialCleanup/ +PaketRestore/ /.vs +_build \ No newline at end of file diff --git a/Common/common.ts b/Common/common.ts new file mode 100644 index 0000000..ebeb7c9 --- /dev/null +++ b/Common/common.ts @@ -0,0 +1,25 @@ + +"use strict"; + +import * as semver from "semver"; +import * as credMgr from "./paketCredMgr"; +import * as vault from "./myvault"; +import * as fake5 from "./fake5"; + +export async function setupPaketCredentialManager() { + await credMgr.setup(); +} + +export async function cleanupPaketCredentialManager() { + await credMgr.cleanup(); +} + +export type Vault = vault.Vault + +export function createFakeVariablesJson(secretPath : string, filterSecrets : boolean) { + return fake5.createFakeVariablesJson(secretPath, filterSecrets); +} + +export function downloadFakeAndReturnInvocation(fakeVersion:semver.SemVer, fakeArgs : string) { + return fake5.downloadAndReturnInvocation(fakeVersion, fakeArgs); +} \ No newline at end of file diff --git a/Common/fake5.ts b/Common/fake5.ts new file mode 100644 index 0000000..f2fd70b --- /dev/null +++ b/Common/fake5.ts @@ -0,0 +1,117 @@ + +import * as path from "path"; +import * as fs from "fs"; +import * as tl from "vsts-task-lib"; +import * as semver from "semver"; +import * as rm from 'typed-rest-client'; +import * as toolLib from 'vsts-task-tool-lib/tool'; +import * as ghTyped from "./githubTyped"; +import * as vault from "./myvault"; +import { isNullOrUndefined } from "util"; + +interface Variables { + keyFile : string; + iv : string; + values : tl.VariableInfo[]; + } + +export function createFakeVariablesJson(secretFile : string, filterSecrets : boolean) { + let v = new vault.Vault(secretFile); + let variables : tl.VariableInfo[] = + tl.getVariables() + .map((entry, _) => { + if (entry.secret) { + let encrypted = v.encryptSecret(entry.value); + return { secret: true, value: encrypted, name: entry.name }; + } else { + return { secret: false, value: entry.value, name: entry.name } + } + }) + .filter((entry, _) =>{ + if (filterSecrets && entry.secret) { + return false; + } else { + return true; + } + }); + let json = JSON.stringify({ + keyFile: secretFile, + iv: v.retrieveIVBase64(), + values: variables }); + return json; +} + + +let toolCacheName = "fake"; + +async function retrieveVersionEntry(targetVersion : semver.SemVer){ + let rest = new rm.RestClient('fake-vsts-task', 'https://api.github.com/'); + async function getPage(pageNum:number){ + let result = await rest.get(`repos/fsharp/fake/releases?page=${pageNum}`); + if (result.statusCode != 200) { + tl.warning(`retrieved status code '${result.statusCode}' from page '${pageNum}'`) + } else { + tl.debug(`retrieved status code '${result.statusCode}' from page '${pageNum}'`); + } + return result; + } + + let pageNr = 1; + let currentPage = await getPage(pageNr); + while (currentPage.statusCode == 200 && currentPage.result.length > 0) { + let result = currentPage.result.find((val) => { + let version = semver.parse(val.name); + if (!version){ + version = semver.parse(val.tag_name); + } + + return targetVersion.compare(version) == 0; + }); + + if (result) { + return result; + } else { + pageNr = pageNr + 1; + currentPage = await getPage(pageNr); + } + } + + return null; +} + +async function downloadPortableFake(targetVersion : semver.SemVer) { + let release = await retrieveVersionEntry(targetVersion); + if (!release) { + return null; + } + + let portableAsset = release.assets.find(asset => asset.name == "fake-dotnetcore-portable.zip"); + let downloadPath = await toolLib.downloadTool(portableAsset.browser_download_url); + let extPath = await toolLib.extractZip(downloadPath); + return await toolLib.cacheDir(extPath, toolCacheName, targetVersion.raw); +} + +export async function downloadAndReturnInvocation(fakeVersion:semver.SemVer, fakeArgs : string) { + let dotnetExecutable = tl.which("dotnet"); + if (!dotnetExecutable) { + // In the future we could download the not-portable version here... + tl.error("Require a `dotnet` executable in PATH for this task, consider using the 'DotNetCoreInstaller' task before this one."); + return null; + } + + let toolPath = toolLib.findLocalTool(toolCacheName, fakeVersion.raw); + if (!toolPath){ + toolPath = await downloadPortableFake(fakeVersion); + if(!toolPath) { + tl.error(`Version '${fakeVersion.raw}' was not found in the official releases.`); + return null; + } + } + + let fakeDll = path.join(toolPath, "fake.dll"); + if (isNullOrUndefined(fakeArgs) || fakeArgs === "") { + return [ dotnetExecutable, fakeDll ] + } else { + return [ dotnetExecutable, `${fakeDll} ${fakeArgs}`] + } +} \ No newline at end of file diff --git a/Common/githubTyped.ts b/Common/githubTyped.ts new file mode 100644 index 0000000..c8a1631 --- /dev/null +++ b/Common/githubTyped.ts @@ -0,0 +1,80 @@ +// from http://json2ts.com/ + +export interface Author { + login: string; + id: number; + node_id: string; + avatar_url: string; + gravatar_id: string; + url: string; + html_url: string; + followers_url: string; + following_url: string; + gists_url: string; + starred_url: string; + subscriptions_url: string; + organizations_url: string; + repos_url: string; + events_url: string; + received_events_url: string; + type: string; + site_admin: boolean; +} + +export interface Uploader { + login: string; + id: number; + node_id: string; + avatar_url: string; + gravatar_id: string; + url: string; + html_url: string; + followers_url: string; + following_url: string; + gists_url: string; + starred_url: string; + subscriptions_url: string; + organizations_url: string; + repos_url: string; + events_url: string; + received_events_url: string; + type: string; + site_admin: boolean; +} + +export interface Asset { + url: string; + browser_download_url: string; + id: number; + node_id: string; + name: string; + label: string; + state: string; + content_type: string; + size: number; + download_count: number; + created_at: Date; + updated_at: Date; + uploader: Uploader; +} + +export interface RootObject { + url: string; + html_url: string; + assets_url: string; + upload_url: string; + tarball_url: string; + zipball_url: string; + id: number; + node_id: string; + tag_name: string; + target_commitish: string; + name: string; + body: string; + draft: boolean; + prerelease: boolean; + created_at: Date; + published_at: Date; + author: Author; + assets: Asset[]; +} diff --git a/Common/myvault.ts b/Common/myvault.ts new file mode 100644 index 0000000..490efe0 --- /dev/null +++ b/Common/myvault.ts @@ -0,0 +1,53 @@ + +// This is a defensive copy from https://raw.githubusercontent.com/Microsoft/vsts-task-lib/91e03a14f1188edc658954320f9d75565b2d1da5/node/vault.ts +// To save ourself from breaking changes... +// Add some members for retrieving the decrypted value and use IV. + +import fs = require('fs'); +import crypto = require('crypto'); + +var algorithm = "aes-256-ctr"; + +// +// Store sensitive data in proc. +// Main goal: Protects tasks which would dump envvars from leaking secrets inadvertently +// the task lib clears after storing. +// Also protects against a dump of a process getting the secrets +// The secret is generated and stored externally for the lifetime of the task. +// +export class Vault { + constructor(keyFile: string) { + this._keyFile = keyFile; + this.genKey(); + this._iv = crypto.randomBytes(16); + } + + private _keyFile: string; + private _iv: Buffer; + + public initialize(): void { + + } + + public encryptSecret(data: string) : string { + var key = this.getKey(); + var cipher = crypto.createCipheriv(algorithm, key, this._iv); + var crypted = cipher.update(data,'utf8','base64') + crypted += cipher.final('base64'); + return crypted; + } + + public retrieveIVBase64(): string { + return this._iv.toString('base64'); + } + + private getKey() { + let readData = fs.readFileSync(this._keyFile, 'utf8'); + return Buffer.from(readData, 'base64'); + } + + private genKey(): void { + let base64String = crypto.randomBytes(32).toString('base64'); + fs.writeFileSync(this._keyFile, base64String, { encoding: 'utf8' }); + } +} \ No newline at end of file diff --git a/Common/package-lock.json b/Common/package-lock.json new file mode 100644 index 0000000..a2a1dcd --- /dev/null +++ b/Common/package-lock.json @@ -0,0 +1,177 @@ +{ + "name": "vsts-fsharp-task-common", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "7.0.69", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.69.tgz", + "integrity": "sha512-S5NC8HV6HnRipg8nC0j30TPl7ktXjRTKqgyINLNe8K/64UJUI8Lq0sRopXC0hProsV2F5ibj8IqPkl1xpGggrw==" + }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" + }, + "@types/uuid": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.3.tgz", + "integrity": "sha512-5fRLCYhLtDb3hMWqQyH10qtF+Ud2JnNCXTCZ+9ktNdCcgslcuXkDTkFcJNk++MT29yDntDnlF1+jD+uVGumsbw==", + "requires": { + "@types/node": "*" + } + }, + "adm-zip": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==" + }, + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + }, + "brace-expansion": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "requires": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mockery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", + "integrity": "sha1-9O3g2HUMHJcnwnLqLGBiniyaHE8=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "q": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=" + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "tunnel": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", + "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + }, + "typed-rest-client": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.9.tgz", + "integrity": "sha512-iOdwgmnP/tF6Qs+oY4iEtCf/3fnCDl7Gy9LGPJ4E3M4Wj3uaSko15FVwbsaBmnBqTJORnXBWVY5306D4HH8oiA==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=" + }, + "vsts-task-lib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.6.0.tgz", + "integrity": "sha512-ja2qX4BIUvswcNbGtIoGo1SM5mRVc3Yaf7oM4oY64bNHs04chKfvH6f3cDDG0pd44OrZIGQE9LgECzeau6z2wA==", + "requires": { + "minimatch": "3.0.4", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + }, + "vsts-task-tool-lib": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/vsts-task-tool-lib/-/vsts-task-tool-lib-0.10.0.tgz", + "integrity": "sha512-0u7EOJiCSXAneH13EnRbxj52Dj5cbG1h1tVudqlXSO+hIc68ezcPPoFP+YNDA2+VS2BH//rAiqvDinkO4IjupQ==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.0.1", + "semver": "^5.3.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "1.0.7", + "uuid": "^3.0.1", + "vsts-task-lib": "2.4.0" + }, + "dependencies": { + "typed-rest-client": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.7.tgz", + "integrity": "sha512-0u+4yiprNuCoXzWllWuDB81i5Riyg0nwrMFs9RczRjU0ZzIWG4lodtXNxoBL19Jb9I8qVN/VTBG7x+mR2kvq+A==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "vsts-task-lib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.4.0.tgz", + "integrity": "sha512-AqKNrYw6ebzlaV6o09TTWE9LxcywQPanPeocss8BUJXJFEMLRYr3ZyzzjM+lvvsgcYth74VXoHtkBonBpx//Tg==", + "requires": { + "minimatch": "3.0.4", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + } + } + } + } +} diff --git a/Common/package.json b/Common/package.json new file mode 100644 index 0000000..f0f8959 --- /dev/null +++ b/Common/package.json @@ -0,0 +1,21 @@ +{ + "name": "vsts-fsharp-task-common", + "version": "0.1.0", + "description": "VSTS F# Helper Tasks Common", + "main": "common.js", + "scripts": { + "tsc": "tsc" + }, + "dependencies": { + "adm-zip": "^0.4.11", + "semver": "^5.5.1", + "tmp": "0.0.31", + "typed-rest-client": "^1.0.9", + "vsts-task-lib": "^2.6.0", + "vsts-task-tool-lib": "^0.10.0" + }, + "devDependencies": { + "@types/node": "^7.0.12", + "typescript": "^2.9.2" + } +} diff --git a/Common/paketCredMgr.ts b/Common/paketCredMgr.ts new file mode 100644 index 0000000..23016b1 --- /dev/null +++ b/Common/paketCredMgr.ts @@ -0,0 +1,37 @@ + +"use strict"; + +import * as tl from "vsts-task-lib"; +import * as tmp from "tmp"; +import * as path from "path"; + +export async function setup() { + tmp.setGracefulCleanup(); + let credentialProviderPath = path.join(__dirname, "CredentialProvider"); + var tmpDir = tmp.dirSync(); + var cwd = process.cwd(); + + var isDebug = process.env.DEBUG == "true"; + var requireWhenRelease = true; + if (isDebug) { + requireWhenRelease = false; + } + + var orig = process.env["NUGET_CREDENTIALPROVIDERS_PATH"]; + var newCredPath = credentialProviderPath + if (orig) { + newCredPath = newCredPath + ";" + orig; + } + + tl.setVariable("NUGET_CREDENTIALPROVIDERS_PATH", newCredPath); + let auth = tl.getEndpointAuthorization("SYSTEMVSSCONNECTION", false); + if (auth.scheme === "OAuth") { + tl.setVariable("PAKET_VSS_NUGET_ACCESSTOKEN", auth.parameters["AccessToken"]); + } else { + tl.warning("Could not determine credentials to use for NuGet"); + } +} + +export async function cleanup() { + tl.setVariable("PAKET_VSS_NUGET_ACCESSTOKEN", ""); +} \ No newline at end of file diff --git a/Common/tsconfig.json b/Common/tsconfig.json new file mode 100644 index 0000000..79a868c --- /dev/null +++ b/Common/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/FAKE5.dev/icon.png b/FAKE5.dev/icon.png new file mode 100644 index 0000000..16de1ce Binary files /dev/null and b/FAKE5.dev/icon.png differ diff --git a/FAKE5.dev/package-lock.json b/FAKE5.dev/package-lock.json new file mode 100644 index 0000000..6f2c9f1 --- /dev/null +++ b/FAKE5.dev/package-lock.json @@ -0,0 +1,187 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@types/node": { + "version": "7.0.69", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.69.tgz", + "integrity": "sha512-S5NC8HV6HnRipg8nC0j30TPl7ktXjRTKqgyINLNe8K/64UJUI8Lq0sRopXC0hProsV2F5ibj8IqPkl1xpGggrw==" + }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" + }, + "@types/uuid": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.3.tgz", + "integrity": "sha512-5fRLCYhLtDb3hMWqQyH10qtF+Ud2JnNCXTCZ+9ktNdCcgslcuXkDTkFcJNk++MT29yDntDnlF1+jD+uVGumsbw==", + "requires": { + "@types/node": "*" + } + }, + "adm-zip": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mockery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", + "integrity": "sha1-9O3g2HUMHJcnwnLqLGBiniyaHE8=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "tunnel": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", + "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + }, + "typed-rest-client": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.9.tgz", + "integrity": "sha512-iOdwgmnP/tF6Qs+oY4iEtCf/3fnCDl7Gy9LGPJ4E3M4Wj3uaSko15FVwbsaBmnBqTJORnXBWVY5306D4HH8oiA==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "vsts-fsharp-task-common": { + "version": "file:../_build/vsts-fsharp-task-common-0.1.0.tgz", + "integrity": "sha512-zSvAre/buvNmEE/ovrC7mFS2h4NA/p2CTxApcqGDXUp6GOR46zpw8YUbLrw2xxycMd0yvQQmgGbE856BuRqG5w==", + "requires": { + "adm-zip": "^0.4.11", + "semver": "^5.5.1", + "tmp": "0.0.31", + "typed-rest-client": "^1.0.9", + "vsts-task-lib": "^2.6.0", + "vsts-task-tool-lib": "^0.10.0" + } + }, + "vsts-task-lib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.6.0.tgz", + "integrity": "sha512-ja2qX4BIUvswcNbGtIoGo1SM5mRVc3Yaf7oM4oY64bNHs04chKfvH6f3cDDG0pd44OrZIGQE9LgECzeau6z2wA==", + "requires": { + "minimatch": "3.0.4", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + }, + "vsts-task-tool-lib": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/vsts-task-tool-lib/-/vsts-task-tool-lib-0.10.0.tgz", + "integrity": "sha512-0u7EOJiCSXAneH13EnRbxj52Dj5cbG1h1tVudqlXSO+hIc68ezcPPoFP+YNDA2+VS2BH//rAiqvDinkO4IjupQ==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.0.1", + "semver": "^5.3.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "1.0.7", + "uuid": "^3.0.1", + "vsts-task-lib": "2.4.0" + }, + "dependencies": { + "typed-rest-client": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.7.tgz", + "integrity": "sha512-0u+4yiprNuCoXzWllWuDB81i5Riyg0nwrMFs9RczRjU0ZzIWG4lodtXNxoBL19Jb9I8qVN/VTBG7x+mR2kvq+A==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "vsts-task-lib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.4.0.tgz", + "integrity": "sha512-AqKNrYw6ebzlaV6o09TTWE9LxcywQPanPeocss8BUJXJFEMLRYr3ZyzzjM+lvvsgcYth74VXoHtkBonBpx//Tg==", + "requires": { + "minimatch": "3.0.4", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + } + } + } + } +} diff --git a/FAKE5.dev/package.json b/FAKE5.dev/package.json new file mode 100644 index 0000000..ff0b474 --- /dev/null +++ b/FAKE5.dev/package.json @@ -0,0 +1,15 @@ +{ + "scripts": { + "tsc": "tsc" + }, + "dependencies": { + "semver": "^5.5.1", + "vsts-fsharp-task-common": "file:../_build/vsts-fsharp-task-common-0.1.0.tgz", + "vsts-task-lib": "^2.6.0" + }, + "devDependencies": { + "@types/node": "^7.0.12", + "@types/semver": "^5.5.0", + "typescript": "^2.9.2" + } +} diff --git a/FAKE5.dev/runFake5.ts b/FAKE5.dev/runFake5.ts new file mode 100644 index 0000000..c963fbd --- /dev/null +++ b/FAKE5.dev/runFake5.ts @@ -0,0 +1,76 @@ + +"use strict"; + +import * as tl from "vsts-task-lib/task"; +import * as trm from 'vsts-task-lib/toolrunner'; +import * as path from "path"; +import * as fs from "fs"; +import * as common from "vsts-fsharp-task-common"; +import * as semver from "semver"; +import { isNullOrUndefined } from "util"; + +function exitWithError(message, exitCode) { + tl.error(message); + tl.setResult(tl.TaskResult.Failed, message); + process.exit(exitCode); +} + +async function doMain() { + try { + console.log(`setup paket credential manager`); + await common.setupPaketCredentialManager(); + + let scriptPath = tl.getPathInput("FakeScript", true); + let scriptDir = path.dirname(scriptPath); + let scriptName = path.basename(scriptPath); + let workingDir = tl.getPathInput("WorkingDirectory"); + if (isNullOrUndefined(workingDir) || workingDir == "") { + workingDir = scriptDir; + } + + let scriptArgs = tl.getInput("ScriptArguments"); + if (isNullOrUndefined(scriptArgs)) { + scriptArgs = ""; + } + + let fakeArgs = tl.getInput("FakeArguments"); + if (!fakeArgs){ + fakeArgs = `run "${scriptName}" ${scriptArgs}`; + } + let fakeVersionRaw = tl.getInput("FakeVersion"); + let fakeVersion = semver.parse(fakeVersionRaw); + if(!fakeVersion) { + exitWithError(`Version '${fakeVersionRaw}' is not a valid version.`, 1); + return; + } + + let preventSecrets = tl.getBoolInput("PreventSecrets"); + let failOnStdError = tl.getBoolInput("FailOnStdError"); + + // Download and cache fake as tool + let executable, args = common.downloadFakeAndReturnInvocation(fakeVersion, fakeArgs); + + // get json list of variables. + let fakeBaseDir = path.join(scriptDir, ".fake"); + let fakeScriptDir = path.join(fakeBaseDir, scriptName); + fs.mkdirSync(fakeBaseDir); + fs.mkdirSync(fakeScriptDir); + let secretFile = path.join(fakeScriptDir, ".secret"); + let json = common.createFakeVariablesJson(secretFile, preventSecrets); + tl.debug("FAKE_VSTS_VAULT_VARIABLES: " + json); + process.env["FAKE_VSTS_VAULT_VARIABLES"] = json; + + // run `dotnet fake.dll` with the specified arguments + await tl.exec(executable, args, { + failOnStdErr: failOnStdError, + cwd: workingDir + }); + + console.log(`cleanup paket credential manager`); + await common.cleanupPaketCredentialManager(); + } catch (e) { + exitWithError(e.message, 1); + } +} + +doMain() \ No newline at end of file diff --git a/FAKE5.dev/task.json b/FAKE5.dev/task.json new file mode 100644 index 0000000..8ee3c65 --- /dev/null +++ b/FAKE5.dev/task.json @@ -0,0 +1,96 @@ +{ + "id": "a2dadf20-1a83-4220-a4ee-b52f6c77f3cf", + "name": "FAKE5", + "friendlyName": "FAKE 5 Runner", + "description": "Runs a FAKE 5 build script.", + "helpMarkDown": "This task downloads and caches the FAKE runner and executes the FAKE 5 build script specified.", + "category": "Build", + "author": "Matthias Dittrich", + "version": { + "Major": 1, + "Minor": 0, + "Patch": 0 + }, + "demands": [ + "DotNetCore" + ], + "satisfies": [ + "Fake" + ], + "minimumAgentVersion": "1.83.0", + "instanceNameFormat": "Execute the $(FakeScript) FAKE 5 script", + "groups": [ + { + "name": "advanced", + "displayName": "Complete Command line", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "FakeVersion", + "type": "string", + "label": "Version of FAKE to download and use", + "defaultValue": "5.4.1", + "helpMarkDown": "The version of the fake runner to use. Needs to be >= 5 and this has no effect on the package versions your script uses.", + "required": "true" + }, + { + "name": "FakeScript", + "type": "filePath", + "label": "Path to FAKE script", + "defaultValue": "build.fsx", + "helpMarkDown": "The path to the FAKE build script.", + "required": "true" + }, + { + "name": "ScriptArguments", + "type": "string", + "label": "The command line arguments for the script", + "defaultValue": "", + "helpMarkDown": "For example enter '-s target Build' to run a single target called build.", + "required": "false" + }, + { + "name": "WorkingDirectory", + "groupName": "advanced", + "type": "filePath", + "label": "Working Directory", + "defaultValue":"", + "helpMarkDown": "The working directory (defaults to the path of the script).", + "required":"false" + }, + { + "name": "PreventSecrets", + "groupName": "advanced", + "type": "boolean", + "label": "Prevent script to access secret variables", + "defaultValue": false, + "helpMarkDown": "You can prevent the script from being able to access all secret variables. To forward single ", + "required": "false" + }, + { + "name": "FakeArguments", + "groupName": "advanced", + "type": "string", + "label": "Set the complete fake command line", + "defaultValue": "", + "helpMarkDown": "For example enter 'run build.fsx -s target Build' to run a single target called build. This replaces 'Path to FAKE script' and 'The command line arguments for the script'", + "required": "false" + }, + { + "name": "FailOnStdError", + "groupName": "advanced", + "type": "boolean", + "label": "Fail on standard error output.", + "defaultValue": "false", + "helpMarkDown": "Fail the build if something is printed to the standard-error stream.", + "required": "false" + } + ], + "execution": { + "Node": { + "target": "runFake5.js" + } + } +} \ No newline at end of file diff --git a/FAKE5.dev/tsconfig.json b/FAKE5.dev/tsconfig.json new file mode 100644 index 0000000..79a868c --- /dev/null +++ b/FAKE5.dev/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/FAKE5Vault.dev/icon.png b/FAKE5Vault.dev/icon.png new file mode 100644 index 0000000..16de1ce Binary files /dev/null and b/FAKE5Vault.dev/icon.png differ diff --git a/FAKE5Vault.dev/package-lock.json b/FAKE5Vault.dev/package-lock.json new file mode 100644 index 0000000..6f2c9f1 --- /dev/null +++ b/FAKE5Vault.dev/package-lock.json @@ -0,0 +1,187 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@types/node": { + "version": "7.0.69", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.69.tgz", + "integrity": "sha512-S5NC8HV6HnRipg8nC0j30TPl7ktXjRTKqgyINLNe8K/64UJUI8Lq0sRopXC0hProsV2F5ibj8IqPkl1xpGggrw==" + }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" + }, + "@types/uuid": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.3.tgz", + "integrity": "sha512-5fRLCYhLtDb3hMWqQyH10qtF+Ud2JnNCXTCZ+9ktNdCcgslcuXkDTkFcJNk++MT29yDntDnlF1+jD+uVGumsbw==", + "requires": { + "@types/node": "*" + } + }, + "adm-zip": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mockery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", + "integrity": "sha1-9O3g2HUMHJcnwnLqLGBiniyaHE8=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "tunnel": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", + "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + }, + "typed-rest-client": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.9.tgz", + "integrity": "sha512-iOdwgmnP/tF6Qs+oY4iEtCf/3fnCDl7Gy9LGPJ4E3M4Wj3uaSko15FVwbsaBmnBqTJORnXBWVY5306D4HH8oiA==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "vsts-fsharp-task-common": { + "version": "file:../_build/vsts-fsharp-task-common-0.1.0.tgz", + "integrity": "sha512-zSvAre/buvNmEE/ovrC7mFS2h4NA/p2CTxApcqGDXUp6GOR46zpw8YUbLrw2xxycMd0yvQQmgGbE856BuRqG5w==", + "requires": { + "adm-zip": "^0.4.11", + "semver": "^5.5.1", + "tmp": "0.0.31", + "typed-rest-client": "^1.0.9", + "vsts-task-lib": "^2.6.0", + "vsts-task-tool-lib": "^0.10.0" + } + }, + "vsts-task-lib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.6.0.tgz", + "integrity": "sha512-ja2qX4BIUvswcNbGtIoGo1SM5mRVc3Yaf7oM4oY64bNHs04chKfvH6f3cDDG0pd44OrZIGQE9LgECzeau6z2wA==", + "requires": { + "minimatch": "3.0.4", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + }, + "vsts-task-tool-lib": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/vsts-task-tool-lib/-/vsts-task-tool-lib-0.10.0.tgz", + "integrity": "sha512-0u7EOJiCSXAneH13EnRbxj52Dj5cbG1h1tVudqlXSO+hIc68ezcPPoFP+YNDA2+VS2BH//rAiqvDinkO4IjupQ==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.0.1", + "semver": "^5.3.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "1.0.7", + "uuid": "^3.0.1", + "vsts-task-lib": "2.4.0" + }, + "dependencies": { + "typed-rest-client": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.7.tgz", + "integrity": "sha512-0u+4yiprNuCoXzWllWuDB81i5Riyg0nwrMFs9RczRjU0ZzIWG4lodtXNxoBL19Jb9I8qVN/VTBG7x+mR2kvq+A==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "vsts-task-lib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.4.0.tgz", + "integrity": "sha512-AqKNrYw6ebzlaV6o09TTWE9LxcywQPanPeocss8BUJXJFEMLRYr3ZyzzjM+lvvsgcYth74VXoHtkBonBpx//Tg==", + "requires": { + "minimatch": "3.0.4", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + } + } + } + } +} diff --git a/FAKE5Vault.dev/package.json b/FAKE5Vault.dev/package.json new file mode 100644 index 0000000..5d4ec4a --- /dev/null +++ b/FAKE5Vault.dev/package.json @@ -0,0 +1,13 @@ +{ + "scripts": { + "tsc": "tsc" + }, + "dependencies": { + "vsts-fsharp-task-common": "file:../_build/vsts-fsharp-task-common-0.1.0.tgz", + "vsts-task-lib": "^2.6.0" + }, + "devDependencies": { + "@types/node": "^7.0.12", + "typescript": "^2.9.2" + } +} diff --git a/FAKE5Vault.dev/runFake5Vault.ts b/FAKE5Vault.dev/runFake5Vault.ts new file mode 100644 index 0000000..2d8d5dc --- /dev/null +++ b/FAKE5Vault.dev/runFake5Vault.ts @@ -0,0 +1,25 @@ + +"use strict"; + +import * as tl from "vsts-task-lib/task"; +import * as common from "vsts-fsharp-task-common"; + +function exitWithError(message, exitCode) { + tl.error(message); + tl.setResult(tl.TaskResult.Failed, message); + process.exit(exitCode); +} + +async function doMain() { + try { + let secretFilePath = tl.getPathInput("SecretFile", true); + let preventSecrets = !tl.getBoolInput("IncludeSecrets"); + let varName = tl.getInput("VariableName"); + let json = common.createFakeVariablesJson(secretFilePath, preventSecrets); + tl.setVariable(varName, json); + } catch (e) { + exitWithError(e.message, 1); + } +} + +doMain() \ No newline at end of file diff --git a/FAKE5Vault.dev/task.json b/FAKE5Vault.dev/task.json new file mode 100644 index 0000000..0e99457 --- /dev/null +++ b/FAKE5Vault.dev/task.json @@ -0,0 +1,47 @@ +{ + "id": "26d2a628-d5fe-4d5a-943d-33c78b2d76f3", + "name": "FAKE5Vault", + "friendlyName": "FAKE 5 Vault", + "description": "Prepare the environment to fill a Fake 5 Vault.", + "helpMarkDown": "Please consider using the fake 5 runner task instead. This task encrypts the VSTS variables (including secret ones) and prepares a given environment variable to fill a fake 5 vault. Make sure to remove the variable as soon as you used it by outputting `##vso[task.setvariable variable=FAKE_VAULT;]null`.", + "category": "Build", + "author": "Matthias Dittrich", + "version": { + "Major": 1, + "Minor": 0, + "Patch": 0 + }, + "minimumAgentVersion": "1.83.0", + "instanceNameFormat": "Prepare the environment to fill a Fake 5 Vault.", + "inputs": [ + { + "name": "SecretFile", + "type": "filePath", + "label": "Secret File", + "defaultValue": ".fake/build.fsx/.secret", + "helpMarkDown": "The path to the file containing the key.", + "required": "true" + }, + { + "name": "VariableName", + "type": "string", + "label": "The variable containing the secrets", + "defaultValue": "FAKE_VAULT_VARIABLES", + "helpMarkDown": "The variable containing the encrypted secret variables. Make sure to delete this variable as soon as you read it in the next task.", + "required": "true" + }, + { + "name": "IncludeSecrets", + "type": "boolean", + "label": "Include secret variables into the vault", + "defaultValue": "true", + "helpMarkDown": "We can skip secret variables.", + "required": "true" + } + ], + "execution": { + "Node": { + "target": "runFake5Vault.js" + } + } +} \ No newline at end of file diff --git a/FAKE5Vault.dev/tsconfig.json b/FAKE5Vault.dev/tsconfig.json new file mode 100644 index 0000000..79a868c --- /dev/null +++ b/FAKE5Vault.dev/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/PaketCredentialCleanup.dev/cleanup.js b/PaketCredentialCleanup.dev/cleanup.js index 67f56dd..ba0f699 100644 --- a/PaketCredentialCleanup.dev/cleanup.js +++ b/PaketCredentialCleanup.dev/cleanup.js @@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", { value: true }); const tl = require("vsts-task-lib/task"); +const common = require("vsts-fsharp-task-common"); function exitWithError(message, exitCode) { tl.error(message); tl.setResult(tl.TaskResult.Failed, message); @@ -17,7 +18,7 @@ function exitWithError(message, exitCode) { function doMain() { return __awaiter(this, void 0, void 0, function* () { try { - tl.setVariable("PAKET_VSS_NUGET_ACCESSTOKEN", ""); + common.cleanupPaketCredentialManager(); } catch (e) { exitWithError(e.message, 1); diff --git a/PaketCredentialCleanup.dev/cleanup.ts b/PaketCredentialCleanup.dev/cleanup.ts index 5ea0e92..a6fb75b 100644 --- a/PaketCredentialCleanup.dev/cleanup.ts +++ b/PaketCredentialCleanup.dev/cleanup.ts @@ -6,6 +6,7 @@ import * as fs from "fs"; import * as os from "os"; import * as tmp from "tmp"; import * as path from "path"; +import * as common from "vsts-fsharp-task-common"; import { IExecOptions } from "vsts-task-lib/toolrunner"; function exitWithError(message, exitCode) { @@ -16,7 +17,7 @@ function exitWithError(message, exitCode) { async function doMain() { try { - tl.setVariable("PAKET_VSS_NUGET_ACCESSTOKEN", ""); + common.cleanupPaketCredentialManager(); } catch (e) { exitWithError(e.message, 1); } diff --git a/PaketCredentialCleanup.dev/package-lock.json b/PaketCredentialCleanup.dev/package-lock.json index fa9c499..6f2c9f1 100644 --- a/PaketCredentialCleanup.dev/package-lock.json +++ b/PaketCredentialCleanup.dev/package-lock.json @@ -5,8 +5,20 @@ "@types/node": { "version": "7.0.69", "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.69.tgz", - "integrity": "sha512-S5NC8HV6HnRipg8nC0j30TPl7ktXjRTKqgyINLNe8K/64UJUI8Lq0sRopXC0hProsV2F5ibj8IqPkl1xpGggrw==", - "dev": true + "integrity": "sha512-S5NC8HV6HnRipg8nC0j30TPl7ktXjRTKqgyINLNe8K/64UJUI8Lq0sRopXC0hProsV2F5ibj8IqPkl1xpGggrw==" + }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" + }, + "@types/uuid": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.3.tgz", + "integrity": "sha512-5fRLCYhLtDb3hMWqQyH10qtF+Ud2JnNCXTCZ+9ktNdCcgslcuXkDTkFcJNk++MT29yDntDnlF1+jD+uVGumsbw==", + "requires": { + "@types/node": "*" + } }, "adm-zip": { "version": "0.4.11", @@ -23,7 +35,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -37,7 +49,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "mockery": { @@ -60,6 +72,11 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, "shelljs": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", @@ -70,7 +87,21 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" + } + }, + "tunnel": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", + "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + }, + "typed-rest-client": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.9.tgz", + "integrity": "sha512-iOdwgmnP/tF6Qs+oY4iEtCf/3fnCDl7Gy9LGPJ4E3M4Wj3uaSko15FVwbsaBmnBqTJORnXBWVY5306D4HH8oiA==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" } }, "typescript": { @@ -79,22 +110,77 @@ "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, + "vsts-fsharp-task-common": { + "version": "file:../_build/vsts-fsharp-task-common-0.1.0.tgz", + "integrity": "sha512-zSvAre/buvNmEE/ovrC7mFS2h4NA/p2CTxApcqGDXUp6GOR46zpw8YUbLrw2xxycMd0yvQQmgGbE856BuRqG5w==", + "requires": { + "adm-zip": "^0.4.11", + "semver": "^5.5.1", + "tmp": "0.0.31", + "typed-rest-client": "^1.0.9", + "vsts-task-lib": "^2.6.0", + "vsts-task-tool-lib": "^0.10.0" + } + }, "vsts-task-lib": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.6.0.tgz", "integrity": "sha512-ja2qX4BIUvswcNbGtIoGo1SM5mRVc3Yaf7oM4oY64bNHs04chKfvH6f3cDDG0pd44OrZIGQE9LgECzeau6z2wA==", "requires": { "minimatch": "3.0.4", - "mockery": "1.7.0", - "q": "1.5.1", - "semver": "5.5.1", - "shelljs": "0.3.0", - "uuid": "3.3.2" + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + }, + "vsts-task-tool-lib": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/vsts-task-tool-lib/-/vsts-task-tool-lib-0.10.0.tgz", + "integrity": "sha512-0u7EOJiCSXAneH13EnRbxj52Dj5cbG1h1tVudqlXSO+hIc68ezcPPoFP+YNDA2+VS2BH//rAiqvDinkO4IjupQ==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.0.1", + "semver": "^5.3.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "1.0.7", + "uuid": "^3.0.1", + "vsts-task-lib": "2.4.0" + }, + "dependencies": { + "typed-rest-client": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.7.tgz", + "integrity": "sha512-0u+4yiprNuCoXzWllWuDB81i5Riyg0nwrMFs9RczRjU0ZzIWG4lodtXNxoBL19Jb9I8qVN/VTBG7x+mR2kvq+A==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "vsts-task-lib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.4.0.tgz", + "integrity": "sha512-AqKNrYw6ebzlaV6o09TTWE9LxcywQPanPeocss8BUJXJFEMLRYr3ZyzzjM+lvvsgcYth74VXoHtkBonBpx//Tg==", + "requires": { + "minimatch": "3.0.4", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + } } } } diff --git a/PaketCredentialCleanup.dev/package.json b/PaketCredentialCleanup.dev/package.json index f089fa1..1be08a5 100644 --- a/PaketCredentialCleanup.dev/package.json +++ b/PaketCredentialCleanup.dev/package.json @@ -5,6 +5,7 @@ "dependencies": { "adm-zip": "^0.4.11", "tmp": "0.0.31", + "vsts-fsharp-task-common": "file:../_build/vsts-fsharp-task-common-0.1.0.tgz", "vsts-task-lib": "^2.6.0" }, "devDependencies": { diff --git a/PaketRestore/Paket.bat b/PaketRestore.dev/Paket.bat similarity index 100% rename from PaketRestore/Paket.bat rename to PaketRestore.dev/Paket.bat diff --git a/PaketRestore/icon.png b/PaketRestore.dev/icon.png similarity index 100% rename from PaketRestore/icon.png rename to PaketRestore.dev/icon.png diff --git a/PaketRestore.dev/package-lock.json b/PaketRestore.dev/package-lock.json new file mode 100644 index 0000000..42204d5 --- /dev/null +++ b/PaketRestore.dev/package-lock.json @@ -0,0 +1,207 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@types/node": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.27.tgz", + "integrity": "sha512-2QMiuVOEye2yKmMwE1V96C9HSShmT0WSm6dv2WjacvePEjQNNJGAerTO5hdYhj5lpdK5MW+FVxmyzDhr4omIdw==" + }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" + }, + "@types/uuid": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.3.tgz", + "integrity": "sha512-5fRLCYhLtDb3hMWqQyH10qtF+Ud2JnNCXTCZ+9ktNdCcgslcuXkDTkFcJNk++MT29yDntDnlF1+jD+uVGumsbw==", + "requires": { + "@types/node": "*" + } + }, + "adm-zip": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==" + }, + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + }, + "brace-expansion": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "requires": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mockery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", + "integrity": "sha1-9O3g2HUMHJcnwnLqLGBiniyaHE8=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "q": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=" + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "tunnel": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", + "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + }, + "typed-rest-client": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.9.tgz", + "integrity": "sha512-iOdwgmnP/tF6Qs+oY4iEtCf/3fnCDl7Gy9LGPJ4E3M4Wj3uaSko15FVwbsaBmnBqTJORnXBWVY5306D4HH8oiA==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=" + }, + "vsts-fsharp-task-common": { + "version": "file:../_build/vsts-fsharp-task-common-0.1.0.tgz", + "integrity": "sha512-zSvAre/buvNmEE/ovrC7mFS2h4NA/p2CTxApcqGDXUp6GOR46zpw8YUbLrw2xxycMd0yvQQmgGbE856BuRqG5w==", + "requires": { + "adm-zip": "^0.4.11", + "semver": "^5.5.1", + "tmp": "0.0.31", + "typed-rest-client": "^1.0.9", + "vsts-task-lib": "^2.6.0", + "vsts-task-tool-lib": "^0.10.0" + }, + "dependencies": { + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + }, + "vsts-task-lib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.6.0.tgz", + "integrity": "sha512-ja2qX4BIUvswcNbGtIoGo1SM5mRVc3Yaf7oM4oY64bNHs04chKfvH6f3cDDG0pd44OrZIGQE9LgECzeau6z2wA==", + "requires": { + "minimatch": "3.0.4", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + } + } + }, + "vsts-task-lib": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.0.5.tgz", + "integrity": "sha1-y9WrIy6rtxDJaXkFMYcmlZHA1RA=", + "requires": { + "minimatch": "^3.0.0", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + }, + "vsts-task-tool-lib": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/vsts-task-tool-lib/-/vsts-task-tool-lib-0.10.0.tgz", + "integrity": "sha512-0u7EOJiCSXAneH13EnRbxj52Dj5cbG1h1tVudqlXSO+hIc68ezcPPoFP+YNDA2+VS2BH//rAiqvDinkO4IjupQ==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.0.1", + "semver": "^5.3.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "1.0.7", + "uuid": "^3.0.1", + "vsts-task-lib": "2.4.0" + }, + "dependencies": { + "typed-rest-client": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.7.tgz", + "integrity": "sha512-0u+4yiprNuCoXzWllWuDB81i5Riyg0nwrMFs9RczRjU0ZzIWG4lodtXNxoBL19Jb9I8qVN/VTBG7x+mR2kvq+A==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "vsts-task-lib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.4.0.tgz", + "integrity": "sha512-AqKNrYw6ebzlaV6o09TTWE9LxcywQPanPeocss8BUJXJFEMLRYr3ZyzzjM+lvvsgcYth74VXoHtkBonBpx//Tg==", + "requires": { + "minimatch": "3.0.4", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + } + } + } + } +} diff --git a/PaketRestore.dev/package.json b/PaketRestore.dev/package.json new file mode 100644 index 0000000..405a538 --- /dev/null +++ b/PaketRestore.dev/package.json @@ -0,0 +1,15 @@ +{ + "scripts": { + "tsc": "tsc" + }, + "dependencies": { + "adm-zip": "^0.4.11", + "tmp": "0.0.31", + "vsts-fsharp-task-common": "file:../_build/vsts-fsharp-task-common-0.1.0.tgz", + "vsts-task-lib": "^2.0.2-preview" + }, + "devDependencies": { + "@types/node": "^7.0.12", + "typescript": "^2.9.2" + } +} diff --git a/PaketRestore.dev/runPaket.ts b/PaketRestore.dev/runPaket.ts new file mode 100644 index 0000000..e07751d --- /dev/null +++ b/PaketRestore.dev/runPaket.ts @@ -0,0 +1,29 @@ +"use strict"; + +import * as tl from "vsts-task-lib/task"; +import * as fs from "fs"; +import * as os from "os"; +import * as tmp from "tmp"; +import * as path from "path"; +import * as common from "vsts-fsharp-task-common"; +import { IExecOptions } from "vsts-task-lib/toolrunner"; + +function exitWithError(message, exitCode) { + tl.error(message); + tl.setResult(tl.TaskResult.Failed, message); + process.exit(exitCode); +} + +async function doMain() { + try { + common.setupPaketCredentialManager(); + + //fs.exists() + + common.cleanupPaketCredentialManager(); + } catch (e) { + exitWithError(e.message, 1); + } +} + +doMain() \ No newline at end of file diff --git a/PaketRestore/task.json b/PaketRestore.dev/task.json similarity index 100% rename from PaketRestore/task.json rename to PaketRestore.dev/task.json diff --git a/PaketRestore.dev/tsconfig.json b/PaketRestore.dev/tsconfig.json new file mode 100644 index 0000000..79a868c --- /dev/null +++ b/PaketRestore.dev/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/README.md b/README.md index e3a677e..20eb798 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,11 @@ Use the **Paket Restore** task to download the full Paket executable via the Pak that you have committed into source control, and automatically run ```paket restore```. You can override the location of the bootstrapper, but this defaults to the ```.paket``` folder. +### FAKE 5 Runner +Use the **FAKE 5 Runner** task to execute any FAKE 5 script in the repository. This task downloads +and caches the given FAKE 5 version. In addition to the path of the FAKE script, you can supply +an optional target as well as any other arbitrary arguments that are required. + ### FAKE Runner Use the **FAKE Runner** task to execute any FAKE script in the repository. This task assumes that the FAKE executable is located at ```packages\Fake\tools\Fake.exe```. In addition to the path of diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index da3e33a..45ea6c2 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,8 @@ +# 1.3.0 + +* Added a native FAKE 5 runner tasks +* Added a task for using the FAKE 5 vault. + # 1.2.0 * Credential Provider only returns token for TFS/VSTS Links (not everyone) diff --git a/SetPaketCredentialProvider.dev/package-lock.json b/SetPaketCredentialProvider.dev/package-lock.json index f1e053e..8cf54e8 100644 --- a/SetPaketCredentialProvider.dev/package-lock.json +++ b/SetPaketCredentialProvider.dev/package-lock.json @@ -5,25 +5,37 @@ "@types/node": { "version": "7.0.27", "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.27.tgz", - "integrity": "sha512-2QMiuVOEye2yKmMwE1V96C9HSShmT0WSm6dv2WjacvePEjQNNJGAerTO5hdYhj5lpdK5MW+FVxmyzDhr4omIdw==", - "dev": true + "integrity": "sha512-2QMiuVOEye2yKmMwE1V96C9HSShmT0WSm6dv2WjacvePEjQNNJGAerTO5hdYhj5lpdK5MW+FVxmyzDhr4omIdw==" + }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" + }, + "@types/uuid": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.3.tgz", + "integrity": "sha512-5fRLCYhLtDb3hMWqQyH10qtF+Ud2JnNCXTCZ+9ktNdCcgslcuXkDTkFcJNk++MT29yDntDnlF1+jD+uVGumsbw==", + "requires": { + "@types/node": "*" + } }, "adm-zip": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", - "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=" + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==" }, "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "0.4.2", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -37,7 +49,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "^1.1.7" } }, "mockery": { @@ -51,14 +63,19 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "q": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", - "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" }, "shelljs": { "version": "0.3.0", @@ -70,31 +87,100 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" + } + }, + "tunnel": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", + "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + }, + "typed-rest-client": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.9.tgz", + "integrity": "sha512-iOdwgmnP/tF6Qs+oY4iEtCf/3fnCDl7Gy9LGPJ4E3M4Wj3uaSko15FVwbsaBmnBqTJORnXBWVY5306D4HH8oiA==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" } }, "typescript": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz", - "integrity": "sha1-PTgyGCgjHkNPKHUUlZw3qCtin0I=", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "vsts-fsharp-task-common": { + "version": "file:../_build/vsts-fsharp-task-common-0.1.0.tgz", + "integrity": "sha512-zSvAre/buvNmEE/ovrC7mFS2h4NA/p2CTxApcqGDXUp6GOR46zpw8YUbLrw2xxycMd0yvQQmgGbE856BuRqG5w==", + "requires": { + "adm-zip": "^0.4.11", + "semver": "^5.5.1", + "tmp": "0.0.31", + "typed-rest-client": "^1.0.9", + "vsts-task-lib": "^2.6.0", + "vsts-task-tool-lib": "^0.10.0" + } }, "vsts-task-lib": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.0.5.tgz", - "integrity": "sha1-y9WrIy6rtxDJaXkFMYcmlZHA1RA=", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.6.0.tgz", + "integrity": "sha512-ja2qX4BIUvswcNbGtIoGo1SM5mRVc3Yaf7oM4oY64bNHs04chKfvH6f3cDDG0pd44OrZIGQE9LgECzeau6z2wA==", "requires": { "minimatch": "3.0.4", - "mockery": "1.7.0", - "q": "1.5.0", - "semver": "5.3.0", - "shelljs": "0.3.0", - "uuid": "3.0.1" + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + }, + "vsts-task-tool-lib": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/vsts-task-tool-lib/-/vsts-task-tool-lib-0.10.0.tgz", + "integrity": "sha512-0u7EOJiCSXAneH13EnRbxj52Dj5cbG1h1tVudqlXSO+hIc68ezcPPoFP+YNDA2+VS2BH//rAiqvDinkO4IjupQ==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.0.1", + "semver": "^5.3.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "1.0.7", + "uuid": "^3.0.1", + "vsts-task-lib": "2.4.0" + }, + "dependencies": { + "typed-rest-client": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.7.tgz", + "integrity": "sha512-0u+4yiprNuCoXzWllWuDB81i5Riyg0nwrMFs9RczRjU0ZzIWG4lodtXNxoBL19Jb9I8qVN/VTBG7x+mR2kvq+A==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "vsts-task-lib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vsts-task-lib/-/vsts-task-lib-2.4.0.tgz", + "integrity": "sha512-AqKNrYw6ebzlaV6o09TTWE9LxcywQPanPeocss8BUJXJFEMLRYr3ZyzzjM+lvvsgcYth74VXoHtkBonBpx//Tg==", + "requires": { + "minimatch": "3.0.4", + "mockery": "^1.7.0", + "q": "^1.1.2", + "semver": "^5.1.0", + "shelljs": "^0.3.0", + "uuid": "^3.0.1" + } + } } } } diff --git a/SetPaketCredentialProvider.dev/package.json b/SetPaketCredentialProvider.dev/package.json index a1e4896..405a538 100644 --- a/SetPaketCredentialProvider.dev/package.json +++ b/SetPaketCredentialProvider.dev/package.json @@ -3,12 +3,13 @@ "tsc": "tsc" }, "dependencies": { - "adm-zip": "^0.4.7", + "adm-zip": "^0.4.11", "tmp": "0.0.31", + "vsts-fsharp-task-common": "file:../_build/vsts-fsharp-task-common-0.1.0.tgz", "vsts-task-lib": "^2.0.2-preview" }, "devDependencies": { "@types/node": "^7.0.12", - "typescript": "^2.3.2" + "typescript": "^2.9.2" } } diff --git a/SetPaketCredentialProvider.dev/setCredentialManager.js b/SetPaketCredentialProvider.dev/setCredentialManager.js index dff8725..facec3d 100644 --- a/SetPaketCredentialProvider.dev/setCredentialManager.js +++ b/SetPaketCredentialProvider.dev/setCredentialManager.js @@ -9,8 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", { value: true }); const tl = require("vsts-task-lib/task"); -const tmp = require("tmp"); -const path = require("path"); +const common = require("vsts-fsharp-task-common"); function exitWithError(message, exitCode) { tl.error(message); tl.setResult(tl.TaskResult.Failed, message); @@ -19,28 +18,7 @@ function exitWithError(message, exitCode) { function doMain() { return __awaiter(this, void 0, void 0, function* () { try { - tmp.setGracefulCleanup(); - let credentialProviderPath = path.join(__dirname, "CredentialProvider"); - var tmpDir = tmp.dirSync(); - var cwd = process.cwd(); - var isDebug = process.env.DEBUG == "true"; - var requireWhenRelease = true; - if (isDebug) { - requireWhenRelease = false; - } - var orig = process.env["NUGET_CREDENTIALPROVIDERS_PATH"]; - var newCredPath = credentialProviderPath; - if (orig) { - newCredPath = newCredPath + ";" + orig; - } - tl.setVariable("NUGET_CREDENTIALPROVIDERS_PATH", newCredPath); - let auth = tl.getEndpointAuthorization("SYSTEMVSSCONNECTION", false); - if (auth.scheme === "OAuth") { - tl.setVariable("PAKET_VSS_NUGET_ACCESSTOKEN", auth.parameters["AccessToken"]); - } - else { - tl.warning("Could not determine credentials to use for NuGet"); - } + yield common.setupPaketCredentialManager(); } catch (e) { exitWithError(e.message, 1); diff --git a/SetPaketCredentialProvider.dev/setCredentialManager.ts b/SetPaketCredentialProvider.dev/setCredentialManager.ts index ddcc482..7ddc64e 100644 --- a/SetPaketCredentialProvider.dev/setCredentialManager.ts +++ b/SetPaketCredentialProvider.dev/setCredentialManager.ts @@ -2,11 +2,7 @@ "use strict"; import * as tl from "vsts-task-lib/task"; -import * as fs from "fs"; -import * as os from "os"; -import * as tmp from "tmp"; -import * as path from "path"; -import { IExecOptions } from "vsts-task-lib/toolrunner"; +import * as common from "vsts-fsharp-task-common"; function exitWithError(message, exitCode) { tl.error(message); @@ -16,31 +12,7 @@ function exitWithError(message, exitCode) { async function doMain() { try { - tmp.setGracefulCleanup(); - let credentialProviderPath = path.join(__dirname, "CredentialProvider"); - var tmpDir = tmp.dirSync(); - var cwd = process.cwd(); - - var isDebug = process.env.DEBUG == "true"; - var requireWhenRelease = true; - if (isDebug) { - requireWhenRelease = false; - } - - var orig = process.env["NUGET_CREDENTIALPROVIDERS_PATH"]; - var newCredPath = credentialProviderPath - if (orig){ - newCredPath = newCredPath + ";" + orig; - } - - tl.setVariable("NUGET_CREDENTIALPROVIDERS_PATH", newCredPath); - let auth = tl.getEndpointAuthorization("SYSTEMVSSCONNECTION", false); - if (auth.scheme === "OAuth") { - tl.setVariable("PAKET_VSS_NUGET_ACCESSTOKEN", auth.parameters["AccessToken"]); - } else { - tl.warning("Could not determine credentials to use for NuGet"); - } - + await common.setupPaketCredentialManager(); } catch (e) { exitWithError(e.message, 1); } diff --git a/build.fsx b/build.fsx index f547107..db50128 100644 --- a/build.fsx +++ b/build.fsx @@ -24,6 +24,8 @@ open System.IO open System.Collections.Generic open Fake.Core open Fake.IO +open Fake.IO.FileSystemOperators +open Fake.IO.Globbing.Operators open Fake.DotNet @@ -204,14 +206,16 @@ module Node = open Fake.Core open Fake.Core.TargetOperators -let dirs = ["PaketCredentialCleanup";"SetPaketCredentialProvider";"FSharpScript"; "FAKE4Runner"; "PaketRestore"] +let dirs = + [ "PaketCredentialCleanup";"SetPaketCredentialProvider"; + "FSharpScript"; "FAKE4Runner"; "PaketRestore"; "FAKE5"; "FAKE5Vault" ] let asDevel d = let devDir = d + ".dev" if Directory.Exists devDir then devDir else d -Target.create "Clean" (fun _ -> ()) - -open Fake.IO.FileSystemOperators +Target.create "Clean" (fun _ -> + Shell.CleanDir "_build" +) Target.create "NpmInstall" (fun _ -> Npm.install "." [] @@ -239,6 +243,21 @@ Target.create "CompileCredentialManager" (fun _ -> }) "CredentialProvider.PaketTeamBuild/CredentialProvider.PaketTeamBuild.fsproj" ) +Target.create "Common" (fun _ -> + + Npm.install "Common" [] + Npm.script "Common" "tsc" [] + Npm.command "Common" "pack" [] + + Directory.ensure "_build" + !! "Common/vsts-fsharp-task-common-*.tgz" + |> Seq.iter (fun file -> + let name = Path.GetFileName(file) + File.Copy(file, "_build" name, true) + File.Delete(file)) +) + + Target.create "Compile" (fun _ -> for dir in dirs |> Seq.map asDevel do if File.Exists (dir "package.json") then @@ -260,6 +279,7 @@ Target.create "Bundle" (fun _ -> Target.create "Default" (fun _ -> ()) "Clean" + ==> "Common" ==> "NpmInstall" //==> "PrepareBinaries" ==> "Compile" diff --git a/package-lock.json b/package-lock.json index 493bdec..46060ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,15 +26,15 @@ "integrity": "sha1-tDYLtYSvFDeZGUJxbyHXxSPR270=", "dev": true, "requires": { - "archiver-utils": "1.3.0", - "async": "2.6.1", - "buffer-crc32": "0.2.13", - "glob": "7.1.2", - "lodash": "4.17.10", - "readable-stream": "2.3.6", - "tar-stream": "1.6.1", - "walkdir": "0.0.11", - "zip-stream": "1.2.0" + "archiver-utils": "^1.3.0", + "async": "^2.0.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.0.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0", + "tar-stream": "^1.5.0", + "walkdir": "^0.0.11", + "zip-stream": "^1.2.0" }, "dependencies": { "async": { @@ -43,7 +43,7 @@ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "dev": true, "requires": { - "lodash": "4.17.10" + "lodash": "^4.17.10" } } } @@ -54,12 +54,12 @@ "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", "dev": true, "requires": { - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lazystream": "1.0.0", - "lodash": "4.17.10", - "normalize-path": "2.1.1", - "readable-stream": "2.3.6" + "glob": "^7.0.0", + "graceful-fs": "^4.1.0", + "lazystream": "^1.0.0", + "lodash": "^4.8.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" } }, "array-find-index": { @@ -98,8 +98,8 @@ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "brace-expansion": { @@ -108,7 +108,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -118,8 +118,8 @@ "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, "buffer-alloc": { @@ -128,8 +128,8 @@ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { - "buffer-alloc-unsafe": "1.1.0", - "buffer-fill": "1.0.0" + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, "buffer-alloc-unsafe": { @@ -168,9 +168,9 @@ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", "dev": true, "requires": { - "camelcase": "4.1.0", - "map-obj": "2.0.0", - "quick-lru": "1.1.0" + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" } }, "chalk": { @@ -179,11 +179,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cli-width": { @@ -193,9 +193,9 @@ "dev": true }, "colors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.1.tgz", - "integrity": "sha512-jg/vxRmv430jixZrC+La5kMbUWqIg32/JsYNZb94+JEmzceYbWKTsv1OuTp+7EaqiaWRR2tPcykibwCRgclIsw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", + "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", "dev": true }, "compress-commons": { @@ -204,10 +204,10 @@ "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", "dev": true, "requires": { - "buffer-crc32": "0.2.13", - "crc32-stream": "2.0.0", - "normalize-path": "2.1.1", - "readable-stream": "2.3.6" + "buffer-crc32": "^0.2.1", + "crc32-stream": "^2.0.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" } }, "concat-map": { @@ -222,10 +222,16 @@ "integrity": "sha1-p+bEocKP3t8rCB5yuX3y75X0ce0=", "dev": true, "requires": { - "iconv-lite": "0.4.23", - "sync-exec": "0.6.2" + "iconv-lite": "^0.4.8", + "sync-exec": "~0.6.x" } }, + "core-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", + "dev": true + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -238,7 +244,7 @@ "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", "dev": true, "requires": { - "buffer": "5.2.0" + "buffer": "^5.1.0" } }, "crc32-stream": { @@ -247,8 +253,8 @@ "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", "dev": true, "requires": { - "crc": "3.8.0", - "readable-stream": "2.3.6" + "crc": "^3.4.4", + "readable-stream": "^2.0.0" } }, "currently-unhandled": { @@ -257,7 +263,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "cycle": { @@ -272,8 +278,8 @@ "integrity": "sha1-8ny+56ASu/uC6gUVYtOXf2CT27E=", "dev": true, "requires": { - "get-stdin": "6.0.0", - "meow": "5.0.0" + "get-stdin": "*", + "meow": "*" } }, "decamelize": { @@ -288,8 +294,8 @@ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "requires": { - "decamelize": "1.2.0", - "map-obj": "1.0.1" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "dependencies": { "map-obj": { @@ -306,13 +312,22 @@ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", "dev": true }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "error-ex": { @@ -321,9 +336,39 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, + "es6-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -342,8 +387,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "find-up": { @@ -352,7 +397,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "fs-constants": { @@ -367,6 +412,12 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "get-stdin": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", @@ -379,12 +430,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -393,13 +444,22 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -423,12 +483,12 @@ "dev": true }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { @@ -437,6 +497,12 @@ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, "indent-string": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", @@ -449,8 +515,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -465,14 +531,14 @@ "integrity": "sha1-29dAz2yjtzEpamPOb22WGFHzNt8=", "dev": true, "requires": { - "ansi-regex": "1.1.1", - "chalk": "1.1.3", - "cli-width": "1.1.1", - "figures": "1.7.0", - "lodash": "3.10.1", - "readline2": "0.1.1", - "rx": "2.5.3", - "through": "2.3.8" + "ansi-regex": "^1.1.1", + "chalk": "^1.0.0", + "cli-width": "^1.0.1", + "figures": "^1.3.5", + "lodash": "^3.3.1", + "readline2": "^0.1.1", + "rx": "^2.4.3", + "through": "^2.3.6" }, "dependencies": { "lodash": { @@ -495,15 +561,42 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -538,12 +631,44 @@ "dev": true }, "jszip": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.5.0.tgz", - "integrity": "sha1-dET9hVHd8+XacZj+oMkbyDCMwnQ=", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", + "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", "dev": true, "requires": { - "pako": "0.2.9" + "core-js": "~2.3.0", + "es6-promise": "~3.0.2", + "lie": "~3.1.0", + "pako": "~1.0.2", + "readable-stream": "~2.0.6" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } } }, "lazystream": { @@ -552,7 +677,16 @@ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.0.5" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "dev": true, + "requires": { + "immediate": "~3.0.5" } }, "load-json-file": { @@ -561,10 +695,10 @@ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { @@ -573,8 +707,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -589,8 +723,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "map-obj": { @@ -605,15 +739,15 @@ "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", "dev": true, "requires": { - "camelcase-keys": "4.2.0", - "decamelize-keys": "1.1.0", - "loud-rejection": "1.6.0", - "minimist-options": "3.0.2", - "normalize-package-data": "2.4.0", - "read-pkg-up": "3.0.0", - "redent": "2.0.0", - "trim-newlines": "2.0.0", - "yargs-parser": "10.1.0" + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" } }, "minimatch": { @@ -622,7 +756,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -637,8 +771,8 @@ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", "dev": true, "requires": { - "arrify": "1.0.1", - "is-plain-obj": "1.1.0" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" } }, "mkdirp": { @@ -676,10 +810,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.7.1", - "is-builtin-module": "1.0.0", - "semver": "5.5.1", - "validate-npm-package-license": "3.0.4" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -688,7 +822,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "object-assign": { @@ -697,13 +831,29 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onecolor": { @@ -730,7 +880,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -739,7 +889,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -749,9 +899,9 @@ "dev": true }, "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, "parse-json": { @@ -760,8 +910,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "path-exists": { @@ -782,7 +932,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pify": { @@ -809,11 +959,11 @@ "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", "dev": true, "requires": { - "pkginfo": "0.4.1", - "read": "1.0.7", - "revalidator": "0.1.8", - "utile": "0.2.1", - "winston": "0.8.3" + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.2.x", + "winston": "0.8.x" } }, "q": { @@ -834,7 +984,7 @@ "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "dev": true, "requires": { - "mute-stream": "0.0.4" + "mute-stream": "~0.0.4" } }, "read-pkg": { @@ -843,9 +993,9 @@ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { @@ -854,8 +1004,8 @@ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "3.0.0" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" } }, "readable-stream": { @@ -864,13 +1014,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readline2": { @@ -880,7 +1030,7 @@ "dev": true, "requires": { "mute-stream": "0.0.4", - "strip-ansi": "2.0.1" + "strip-ansi": "^2.0.1" }, "dependencies": { "strip-ansi": { @@ -889,7 +1039,7 @@ "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=", "dev": true, "requires": { - "ansi-regex": "1.1.1" + "ansi-regex": "^1.0.0" } } } @@ -900,8 +1050,8 @@ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", "dev": true, "requires": { - "indent-string": "3.2.0", - "strip-indent": "2.0.0" + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" } }, "remove-trailing-separator": { @@ -922,7 +1072,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "rx": { @@ -973,8 +1123,8 @@ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -989,8 +1139,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -1011,7 +1161,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -1020,7 +1170,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -1062,46 +1212,46 @@ "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", "dev": true, "requires": { - "bl": "1.2.2", - "buffer-alloc": "1.2.0", - "end-of-stream": "1.4.1", - "fs-constants": "1.0.0", - "readable-stream": "2.3.6", - "to-buffer": "1.1.1", - "xtend": "4.0.1" + "bl": "^1.0.0", + "buffer-alloc": "^1.1.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.0", + "xtend": "^4.0.0" } }, "tfx-cli": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/tfx-cli/-/tfx-cli-0.4.16.tgz", - "integrity": "sha512-0aXoyyPduRWjkDDV/NCgo39uLNO5vsJgQ2hxrqqQk5zOc9HWMjT3LSiMR1Qit7WmEgCwJkekykZh0dP99PenyQ==", + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/tfx-cli/-/tfx-cli-0.5.14.tgz", + "integrity": "sha512-r9O0+ZTdww2gGUWQb5AXHkh06/u7hP/aJUJyLUnT7xPI37A/sZa09hNkG8Lrcf8lyKgqZWd9wGWQ+/Yd6DqXXg==", "dev": true, "requires": { "app-root-path": "1.0.0", "archiver": "2.0.3", - "async": "1.5.2", - "colors": "1.3.1", - "copy-paste": "1.3.0", + "async": "^1.4.0", + "colors": "~1.3.0", + "copy-paste": "^1.3.0", "glob": "7.1.2", "inquirer": "0.8.5", - "json-in-place": "1.0.1", - "jszip": "2.5.0", - "lodash": "4.17.10", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "onecolor": "2.5.0", - "os-homedir": "1.0.2", - "prompt": "0.2.14", - "q": "1.5.1", - "read": "1.0.7", - "shelljs": "0.5.3", + "json-in-place": "^1.0.1", + "jszip": "~3.1.5", + "lodash": "~4.17.0", + "minimist": "^1.1.2", + "mkdirp": "^0.5.1", + "onecolor": "^2.5.0", + "os-homedir": "^1.0.1", + "prompt": "^0.2.14", + "read": "^1.0.6", + "shelljs": "^0.5.1", "tmp": "0.0.26", "tracer": "0.7.4", - "uuid": "3.3.2", - "validator": "3.43.0", - "vso-node-api": "5.1.2", + "util.promisify": "^1.0.0", + "uuid": "^3.0.1", + "validator": "^3.43.0", + "vso-node-api": "^5.0.0", "winreg": "0.0.12", - "xml2js": "0.4.19" + "xml2js": "^0.4.16" } }, "through": { @@ -1122,7 +1272,7 @@ "integrity": "sha1-nvqCDOKhD4H4l5VVus4/FVJs4fI=", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.0" } }, "to-buffer": { @@ -1174,18 +1324,28 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, "utile": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", "dev": true, "requires": { - "async": "0.2.10", - "deep-equal": "1.0.1", - "i": "0.3.6", - "mkdirp": "0.5.1", - "ncp": "0.4.2", - "rimraf": "2.6.2" + "async": "~0.2.9", + "deep-equal": "*", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "0.4.x", + "rimraf": "2.x.x" }, "dependencies": { "async": { @@ -1208,8 +1368,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "validator": { @@ -1224,9 +1384,9 @@ "integrity": "sha1-gXtm/+1uEcvXH5O5FvSxicljQls=", "dev": true, "requires": { - "q": "1.5.1", + "q": "^1.0.1", "tunnel": "0.0.4", - "underscore": "1.9.1" + "underscore": "^1.8.3" } }, "walkdir": { @@ -1247,13 +1407,13 @@ "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", "dev": true, "requires": { - "async": "0.2.10", - "colors": "0.6.2", - "cycle": "1.0.3", - "eyes": "0.1.8", - "isstream": "0.1.2", - "pkginfo": "0.3.1", - "stack-trace": "0.0.10" + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" }, "dependencies": { "async": { @@ -1288,8 +1448,8 @@ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, "requires": { - "sax": "1.2.4", - "xmlbuilder": "9.0.7" + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" } }, "xmlbuilder": { @@ -1310,7 +1470,7 @@ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } }, "zip-stream": { @@ -1319,10 +1479,10 @@ "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", "dev": true, "requires": { - "archiver-utils": "1.3.0", - "compress-commons": "1.2.2", - "lodash": "4.17.10", - "readable-stream": "2.3.6" + "archiver-utils": "^1.3.0", + "compress-commons": "^1.2.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0" } } } diff --git a/package.json b/package.json index e58f217..30d626f 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,6 @@ "tfx": "tfx" }, "devDependencies": { - "tfx-cli": "^0.4.16" + "tfx-cli": "^0.5.14" } } diff --git a/vss-extension.json b/vss-extension.json index 09cf187..28ffc06 100644 --- a/vss-extension.json +++ b/vss-extension.json @@ -1,7 +1,7 @@ { "manifestVersion": 1, "id": "fsharp-helpers-extension", - "version": "1.2.0", + "version": "1.3.0", "name": "F# Helpers for VSTS", "publisher": "IsaacAbraham", "targets": [ { "id": "Microsoft.VisualStudio.Services" } ], @@ -23,6 +23,8 @@ "theme": "dark" }, "files": [ + { "path": "FAKE5" }, + { "path": "FAKE5Vault" }, { "path": "FAKE4Runner" }, { "path": "PaketRestore" }, { "path": "FSharpScript" }, @@ -30,6 +32,16 @@ { "path": "PaketCredentialCleanup" } ], "contributions": [ + { "id": "26d2a628-d5fe-4d5a-943d-33c78b2d76f3", + "type": "ms.vss-distributed-task.task", + "targets": [ "ms.vss-distributed-task.tasks" ], + "properties": { "name": "FAKE5Vault" } + }, + { "id": "a2dadf20-1a83-4220-a4ee-b52f6c77f3cf", + "type": "ms.vss-distributed-task.task", + "targets": [ "ms.vss-distributed-task.tasks" ], + "properties": { "name": "FAKE5" } + }, { "id": "1ba72b0a-f476-4a91-90a0-b8e7a0cc4339", "type": "ms.vss-distributed-task.task", "targets": [ "ms.vss-distributed-task.tasks" ], @@ -54,6 +66,6 @@ "type": "ms.vss-distributed-task.task", "targets": [ "ms.vss-distributed-task.tasks" ], "properties": { "name": "PaketCredentialCleanup" } - } + } ] } \ No newline at end of file