* Refactoring gulp

* Pipeline changes
This commit is contained in:
Brandon Waterloo [MSFT] 2020-03-17 09:49:39 -04:00 коммит произвёл GitHub
Родитель e4672b1ca1
Коммит deb46a51ea
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
13 изменённых файлов: 311 добавлений и 123 удалений

Просмотреть файл

@ -1,14 +1,12 @@
steps:
- task: NodeTool@0
displayName: 'Use Node 10.x'
inputs:
versionSpec: 10.x
- task: Npm@1
displayName: 'npm install'
- task: Npm@1
displayName: 'Build'
displayName: 'Build and Test'
inputs:
command: custom
customCommand: run build
customCommand: run ci-build
env:
SERVICE_PRINCIPAL_CLIENT_ID: $(SERVICE_PRINCIPAL_CLIENT_ID)
SERVICE_PRINCIPAL_SECRET: $(SERVICE_PRINCIPAL_SECRET)
SERVICE_PRINCIPAL_DOMAIN: $(SERVICE_PRINCIPAL_DOMAIN)
DISPLAY: :10 # Only necessary for linux tests
DOCKER_UNAVAILABLE: ${{ parameters.dockerUnavailable }}

Просмотреть файл

@ -1,10 +1,4 @@
steps:
- task: Npm@1
displayName: 'Lint'
inputs:
command: custom
customCommand: run lint
- task: ComponentGovernanceComponentDetection@0
displayName: 'Component Detection'
condition: ne(variables['System.PullRequest.IsFork'], 'True')

Просмотреть файл

@ -1,9 +1,15 @@
steps:
- task: Npm@1
displayName: 'Package'
displayName: 'Build, Test, and Package'
inputs:
command: custom
customCommand: run package
customCommand: run ci-package
env:
SERVICE_PRINCIPAL_CLIENT_ID: $(SERVICE_PRINCIPAL_CLIENT_ID)
SERVICE_PRINCIPAL_SECRET: $(SERVICE_PRINCIPAL_SECRET)
SERVICE_PRINCIPAL_DOMAIN: $(SERVICE_PRINCIPAL_DOMAIN)
DISPLAY: :10 # Only necessary for linux tests
DOCKER_UNAVAILABLE: ${{ parameters.dockerUnavailable }}
- task: CopyFiles@2
displayName: 'Copy vsix to staging directory'

Просмотреть файл

@ -0,0 +1,16 @@
steps:
- task: NodeTool@0
displayName: 'Use Node 12.x'
inputs:
versionSpec: 12.x
- task: Npm@1
displayName: 'Install Dependencies'
- script: |
sudo cp .azure-pipelines/linux/xvfb.init /etc/init.d/xvfb
sudo chmod +x /etc/init.d/xvfb
sudo update-rc.d xvfb defaults
sudo service xvfb start
displayName: 'Start X Virtual Frame Buffer'
condition: eq(variables['Agent.OS'], 'Linux')

Просмотреть файл

@ -1,27 +0,0 @@
steps:
- script: |
sudo cp .azure-pipelines/linux/xvfb.init /etc/init.d/xvfb
sudo chmod +x /etc/init.d/xvfb
sudo update-rc.d xvfb defaults
sudo service xvfb start
displayName: 'Start X Virtual Frame Buffer'
condition: eq(variables['Agent.OS'], 'Linux')
- task: Npm@1
displayName: 'Test'
inputs:
command: custom
customCommand: test
env:
SERVICE_PRINCIPAL_CLIENT_ID: $(SERVICE_PRINCIPAL_CLIENT_ID)
SERVICE_PRINCIPAL_SECRET: $(SERVICE_PRINCIPAL_SECRET)
SERVICE_PRINCIPAL_DOMAIN: $(SERVICE_PRINCIPAL_DOMAIN)
DISPLAY: :10 # Only necessary for linux tests
DOCKER_UNAVAILABLE: ${{ parameters.dockerUnavailable }}
- task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFiles: '*-results.xml'
testRunTitle: '$(Agent.OS)'
condition: succeededOrFailed()

Просмотреть файл

@ -1,6 +0,0 @@
steps:
- task: Npm@1
displayName: 'Webpack (production)'
inputs:
command: custom
customCommand: run webpack-prod

Просмотреть файл

@ -3,28 +3,24 @@ jobs:
pool:
vmImage: windows-latest
steps:
- template: common/setup.yml
- template: common/governance.yml # Force governance before test to avoid false-positives.
- template: common/build.yml
- template: common/webpack-prod.yml
- template: common/lint.yml
- template: common/test.yml
- job: Linux
pool:
vmImage: ubuntu-latest
steps:
- template: common/build.yml
- template: common/webpack-prod.yml # This will also run during vsce package, but vscep pack doesn't show STDOUT so we won't see full errors there
- template: common/setup.yml
- template: common/governance.yml # Force governance before test to avoid false-positives.
- template: common/publish-vsix.yml # Only publish vsix from linux build since we use this to release and want to stay consistent
- template: common/lint.yml
- template: common/test.yml
- job: macOS
pool:
vmImage: macOS-latest
steps:
- template: common/setup.yml
- template: common/governance.yml # Force governance before test to avoid false-positives.
- template: common/build.yml
- template: common/webpack-prod.yml
- template: common/lint.yml
- template: common/test.yml
parameters:
dockerUnavailable: 1 # Docker not available on MacOS agents (https://docs.microsoft.com/en-us/azure/devops/pipelines/languages/docker)

Просмотреть файл

@ -1 +1,2 @@
test/
gulpfile.ts

10
.vscode/launch.json поставляемый
Просмотреть файл

@ -19,7 +19,7 @@
"outFiles": [
"${workspaceFolder}/out/**/*.js"
],
"preLaunchTask": "npm: compile"
"preLaunchTask": "${defaultBuildTask}"
},
{
"name": "Launch Extension (webpack)",
@ -37,7 +37,7 @@
"outFiles": [
"${workspaceFolder}/out/**/*.js"
],
"preLaunchTask": "npm: pretest"
"preLaunchTask": "npm: webpack"
},
{
"name": "Launch Tests",
@ -54,7 +54,7 @@
"outFiles": [
"${workspaceFolder}/out/**/*.js"
],
"preLaunchTask": "npm: compile",
"preLaunchTask": "${defaultBuildTask}",
"env": {
"AZCODE_DOCKER_IGNORE_BUNDLE": "1",
"MOCHA_grep": "", // RegExp of tests to run (empty means all)
@ -78,7 +78,7 @@
"outFiles": [
"${workspaceFolder}/out/**/*.js"
],
"preLaunchTask": "npm: compile",
"preLaunchTask": "${defaultBuildTask}",
"env": {
"AZCODE_DOCKER_IGNORE_BUNDLE": "1",
"MOCHA_grep": "\\(unit\\)", // RegExp of tests to run (empty means all)
@ -102,7 +102,7 @@
"outFiles": [
"${workspaceFolder}/dist/**/*.js"
],
"preLaunchTask": "npm: pretest",
"preLaunchTask": "npm: webpack",
"env": {
"MOCHA_grep": "", // RegExp of tests to run (empty means all)
"MOCHA_enableTimeouts": "0", // Disable time-outs

7
.vscode/tasks.json поставляемый
Просмотреть файл

@ -3,7 +3,7 @@
"tasks": [
{
"type": "npm",
"script": "compile",
"script": "watch",
"group": {
"kind": "build",
"isDefault": true
@ -13,11 +13,6 @@
"reveal": "never"
},
"problemMatcher": "$tsc-watch"
},
{
"type": "npm",
"script": "lint",
"problemMatcher": "$tslint5"
}
]
}

Просмотреть файл

@ -3,64 +3,83 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
// tslint:disable:no-implicit-dependencies
import * as cp from 'child_process';
import * as fse from 'fs-extra';
import * as gulp from 'gulp';
import * as eslint from 'gulp-eslint';
import * as sourcemaps from 'gulp-sourcemaps';
import * as ts from 'gulp-typescript';
import * as os from 'os';
import * as path from 'path';
import * as vsce from 'vsce';
import { gulp_installAzureAccount, gulp_webpack } from 'vscode-azureextensiondev';
const env = process.env;
const tsProject = ts.createProject('./tsconfig.json');
function test(mochaGrep: string = ''): cp.ChildProcess {
function compileTask() {
return tsProject.src()
.pipe(sourcemaps.init())
.pipe(tsProject()).js
.pipe(sourcemaps.write('.', { includeContent: false, sourceRoot: './' }))
.pipe(gulp.dest(tsProject.options.outDir));
}
function lintTask() {
return gulp.src(['src/**/*.ts'])
.pipe(eslint())
.pipe(eslint.format())
.pipe(eslint.failAfterError())
.pipe(eslint.results(
results => {
if (results.warningCount) {
throw new Error('ESLint generated warnings.');
}
}));
}
function testTaskFactory(unitTestsOnly: boolean) {
if (os.platform() === 'win32') {
// For some reason this is getting set to '--max-old-space-size=8192', which in turn for some reason causes the VSCode test process to instantly crash with error code 3 on Windows
// Which makes no sense because the default is 512 MB max
env.NODE_OPTIONS = '';
}
env.DEBUGTELEMETRY = '1';
env.CODE_TESTS_WORKSPACE = path.join(__dirname, 'test/test.code-workspace');
env.MOCHA_grep = mochaGrep;
env.MOCHA_grep = unitTestsOnly ? '\\(unit\\)' : '';
env.MOCHA_timeout = String(10 * 1000);
env.CODE_TESTS_PATH = path.join(__dirname, 'dist/test');
return spawn('node', ['./node_modules/vscode/bin/test'], { stdio: 'inherit', env });
return cp.spawn('node', ['./node_modules/vscode/bin/test'], { stdio: 'inherit', env });
}
function allTest(): cp.ChildProcess {
return test();
function allTestsTask() {
return testTaskFactory(false);
}
function unitTest(): cp.ChildProcess {
return test('\\(unit\\)');
function unitTestsTask() {
return testTaskFactory(true);
}
function spawn(command: string, args: string[], options: {}): cp.ChildProcess {
if (process.platform === 'win32') {
if (fse.pathExistsSync(command + '.exe')) {
command = command + '.exe';
} else if (fse.pathExistsSync(command + '.cmd')) {
command = command + '.cmd';
}
}
return cp.spawn(command, args, options);
function webpackDevTask() {
return gulp_webpack('development');
}
async function sortPackageJson(): Promise<void> {
const fsPath = path.join(__dirname, 'package.json');
console.log(fsPath);
// tslint:disable: no-any no-unsafe-any
const packageJson: any = await fse.readJSON(fsPath);
packageJson.activationEvents.sort();
packageJson.contributes.menus["view/item/context"].sort((a, b) => {
if (a.group === b.group) {
return a.command.localeCompare(b.command);
} else {
return a.group.localeCompare(b.group);
}
});
packageJson.contributes.commands.sort((a, b) => a.command.localeCompare(b.command));
await fse.writeFile(fsPath, JSON.stringify(packageJson, undefined, 4));
// tslint:enable: no-any no-unsafe-any
function webpackProdTask() {
return gulp_webpack('production');
}
exports.sortPackageJson = sortPackageJson;
exports['webpack-dev'] = () => gulp_webpack('development');
exports['webpack-prod'] = () => gulp_webpack('production');
exports.test = gulp.series(gulp_installAzureAccount, allTest);
exports['unit-test'] = gulp.series(gulp_installAzureAccount, unitTest);
function vscePackageTask() {
return vsce.createVSIX();
}
gulp.task('build', compileTask);
gulp.task('lint', lintTask);
gulp.task('package', gulp.series(compileTask, webpackProdTask, vscePackageTask));
gulp.task('test', gulp.series(gulp_installAzureAccount, compileTask, webpackProdTask, allTestsTask));
gulp.task('unit-test', gulp.series(gulp_installAzureAccount, compileTask, webpackProdTask, unitTestsTask));
gulp.task('webpack-dev', gulp.series(compileTask, webpackDevTask));
gulp.task('webpack-prod', gulp.series(compileTask, webpackProdTask));
gulp.task('ci-build', gulp.series(gulp_installAzureAccount, compileTask, webpackProdTask, allTestsTask));
gulp.task('ci-package', gulp.series('ci-build', vscePackageTask));
gulp.task('test-only', gulp.series(gulp_installAzureAccount, allTestsTask));

194
package-lock.json сгенерированный
Просмотреть файл

@ -24,6 +24,37 @@
"js-tokens": "^4.0.0"
}
},
"@gulp-sourcemaps/identity-map": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz",
"integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==",
"dev": true,
"requires": {
"acorn": "^5.0.3",
"css": "^2.2.1",
"normalize-path": "^2.1.1",
"source-map": "^0.6.0",
"through2": "^2.0.3"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"@gulp-sourcemaps/map-sources": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
"integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=",
"dev": true,
"requires": {
"normalize-path": "^2.0.1",
"through2": "^2.0.3"
}
},
"@types/adm-zip": {
"version": "0.4.32",
"resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.4.32.tgz",
@ -2606,6 +2637,26 @@
"randomfill": "^1.0.3"
}
},
"css": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
"integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
"dev": true,
"requires": {
"inherits": "^2.0.3",
"source-map": "^0.6.1",
"source-map-resolve": "^0.5.2",
"urix": "^0.1.0"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"css-loader": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.9.1.tgz",
@ -2717,6 +2768,17 @@
"ms": "^2.1.1"
}
},
"debug-fabulous": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz",
"integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==",
"dev": true,
"requires": {
"debug": "3.X",
"memoizee": "0.4.X",
"object-assign": "4.X"
}
},
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
@ -2955,6 +3017,12 @@
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
"dev": true
},
"detect-newline": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
"integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
"dev": true
},
"diagnostic-channel": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz",
@ -4055,6 +4123,16 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
"event-emitter": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
"integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
"dev": true,
"requires": {
"d": "1",
"es5-ext": "~0.10.14"
}
},
"event-stream": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz",
@ -5630,6 +5708,81 @@
"vinyl": "^2.1.0"
}
},
"gulp-eslint": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-6.0.0.tgz",
"integrity": "sha512-dCVPSh1sA+UVhn7JSQt7KEb4An2sQNbOdB3PA8UCfxsoPlAKjJHxYHGXdXC7eb+V1FAnilSFFqslPrq037l1ig==",
"dev": true,
"requires": {
"eslint": "^6.0.0",
"fancy-log": "^1.3.2",
"plugin-error": "^1.0.1"
}
},
"gulp-sourcemaps": {
"version": "2.6.5",
"resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz",
"integrity": "sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==",
"dev": true,
"requires": {
"@gulp-sourcemaps/identity-map": "1.X",
"@gulp-sourcemaps/map-sources": "1.X",
"acorn": "5.X",
"convert-source-map": "1.X",
"css": "2.X",
"debug-fabulous": "1.X",
"detect-newline": "2.X",
"graceful-fs": "4.X",
"source-map": "~0.6.0",
"strip-bom-string": "1.X",
"through2": "2.X"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"gulp-typescript": {
"version": "6.0.0-alpha.1",
"resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-6.0.0-alpha.1.tgz",
"integrity": "sha512-KoT0TTfjfT7w3JItHkgFH1T/zK4oXWC+a8xxKfniRfVcA0Fa1bKrIhztYelYmb+95RB80OLMBreknYkdwzdi2Q==",
"dev": true,
"requires": {
"ansi-colors": "^4.1.1",
"plugin-error": "^1.0.1",
"source-map": "^0.7.3",
"through2": "^3.0.1",
"vinyl": "^2.2.0",
"vinyl-fs": "^3.0.3"
},
"dependencies": {
"ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"dev": true
},
"source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"dev": true
},
"through2": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
"integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
"dev": true,
"requires": {
"readable-stream": "2 || 3"
}
}
}
},
"gulplog": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
@ -6737,6 +6890,15 @@
"yallist": "^3.0.2"
}
},
"lru-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
"integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
"dev": true,
"requires": {
"es5-ext": "~0.10.2"
}
},
"make-array": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/make-array/-/make-array-1.0.5.tgz",
@ -6893,6 +7055,22 @@
"p-is-promise": "^2.0.0"
}
},
"memoizee": {
"version": "0.4.14",
"resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz",
"integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==",
"dev": true,
"requires": {
"d": "1",
"es5-ext": "^0.10.45",
"es6-weak-map": "^2.0.2",
"event-emitter": "^0.3.5",
"is-promise": "^2.1",
"lru-queue": "0.1",
"next-tick": "1",
"timers-ext": "^0.1.5"
}
},
"memory-fs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
@ -9557,6 +9735,12 @@
"is-utf8": "^0.2.0"
}
},
"strip-bom-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
"integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
"dev": true
},
"strip-dirs": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
@ -9958,6 +10142,16 @@
"setimmediate": "^1.0.4"
}
},
"timers-ext": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
"integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
"dev": true,
"requires": {
"es5-ext": "~0.10.46",
"next-tick": "1"
}
},
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",

Просмотреть файл

@ -2412,19 +2412,18 @@
"vscode": "^1.41.0"
},
"scripts": {
"vscode:prepublish": "npm run webpack-prod",
"build": "tsc -p ./",
"compile": "tsc -watch -p ./",
"package": "vsce package",
"lint": "eslint \"src/**/*.ts\"",
"lint-fix": "eslint \"src/**/*.ts\" --fix",
"postinstall": "node ./node_modules/vscode/bin/install",
"pretest": "npm run build && npm run webpack",
"watch": "tsc -watch -p ./",
"build": "gulp build",
"ci-build": "gulp ci-build",
"package": "gulp package",
"ci-package": "gulp ci-package",
"lint": "gulp lint",
"test": "gulp test",
"all": "npm i && npm run lint && npm test",
"webpack": "gulp webpack-dev",
"webpack-prod": "gulp webpack-prod",
"webpack-profile": "webpack --profile --json --mode production > webpack-stats.json && echo Use http://webpack.github.io/analyse to analyze the stats"
"test-only": "gulp test-only",
"unit-test": "gulp unit-test",
"webpack-dev": "gulp webpack-dev",
"webpack-prod": "gulp webpack-prod"
},
"extensionDependencies": [
"vscode.docker",
@ -2453,6 +2452,9 @@
"eslint-plugin-import": "^2.20.1",
"eslint-plugin-unicorn": "^14.0.1",
"gulp": "^4.0.2",
"gulp-eslint": "^6.0.0",
"gulp-sourcemaps": "^2.6.5",
"gulp-typescript": "^6.0.0-alpha.1",
"mocha": "^5.2.0",
"mocha-junit-reporter": "^1.23.3",
"mocha-multi-reporters": "^1.1.7",