mirror of
https://github.com/kforney/pentest-distro-builder.git
synced 2024-10-06 20:48:51 -06:00
104 lines
4.7 KiB
JavaScript
104 lines
4.7 KiB
JavaScript
|
"use strict";
|
||
|
/*---------------------------------------------------------------------------------------------
|
||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
* Licensed under the MIT License. See LICENSE.md in the project root for license information.
|
||
|
*--------------------------------------------------------------------------------------------*/
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
const path = require("path");
|
||
|
const vscode = require("vscode");
|
||
|
const vscode_azureextensionui_1 = require("vscode-azureextensionui");
|
||
|
const dockerExtension_1 = require("../dockerExtension");
|
||
|
const extensionVariables_1 = require("../extensionVariables");
|
||
|
const telemetry_1 = require("../telemetry/telemetry");
|
||
|
const teleCmdId = 'vscode-docker.compose.'; // we append up or down when reporting telemetry
|
||
|
async function getDockerComposeFileUris(folder) {
|
||
|
return await vscode.workspace.findFiles(new vscode.RelativePattern(folder, dockerExtension_1.COMPOSE_FILE_GLOB_PATTERN), null, 9999, undefined);
|
||
|
}
|
||
|
function createItem(folder, uri) {
|
||
|
const filePath = folder ? path.join('.', uri.fsPath.substr(folder.uri.fsPath.length)) : uri.fsPath;
|
||
|
return {
|
||
|
description: undefined,
|
||
|
file: filePath,
|
||
|
label: filePath,
|
||
|
path: path.dirname(filePath)
|
||
|
};
|
||
|
}
|
||
|
function computeItems(folder, uris) {
|
||
|
const items = [];
|
||
|
// tslint:disable-next-line:prefer-for-of // Grandfathered in
|
||
|
for (let i = 0; i < uris.length; i++) {
|
||
|
items.push(createItem(folder, uris[i]));
|
||
|
}
|
||
|
return items;
|
||
|
}
|
||
|
async function compose(commands, message, dockerComposeFileUri, selectedComposeFileUris) {
|
||
|
let folder;
|
||
|
if (!vscode.workspace.workspaceFolders) {
|
||
|
vscode.window.showErrorMessage('Docker compose can only run if VS Code is opened on a folder.');
|
||
|
return;
|
||
|
}
|
||
|
if (vscode.workspace.workspaceFolders.length === 1) {
|
||
|
folder = vscode.workspace.workspaceFolders[0];
|
||
|
}
|
||
|
else {
|
||
|
folder = await vscode.window.showWorkspaceFolderPick();
|
||
|
}
|
||
|
if (!folder) {
|
||
|
throw new vscode_azureextensionui_1.UserCancelledError();
|
||
|
}
|
||
|
let commandParameterFileUris;
|
||
|
if (selectedComposeFileUris && selectedComposeFileUris.length) {
|
||
|
commandParameterFileUris = selectedComposeFileUris;
|
||
|
}
|
||
|
else if (dockerComposeFileUri) {
|
||
|
commandParameterFileUris = [dockerComposeFileUri];
|
||
|
}
|
||
|
else {
|
||
|
commandParameterFileUris = [];
|
||
|
}
|
||
|
let selectedItems = commandParameterFileUris.map(uri => createItem(folder, uri));
|
||
|
if (!selectedItems.length) {
|
||
|
// prompt for compose file
|
||
|
const uris = await getDockerComposeFileUris(folder);
|
||
|
if (!uris || uris.length === 0) {
|
||
|
vscode.window.showInformationMessage('Couldn\'t find any docker-compose files in your workspace.');
|
||
|
return;
|
||
|
}
|
||
|
const items = computeItems(folder, uris);
|
||
|
selectedItems = [await extensionVariables_1.ext.ui.showQuickPick(items, { placeHolder: `Choose Docker Compose file ${message}` })];
|
||
|
}
|
||
|
const terminal = extensionVariables_1.ext.terminalProvider.createTerminal('Docker Compose');
|
||
|
const configOptions = vscode.workspace.getConfiguration('docker');
|
||
|
const build = configOptions.get('dockerComposeBuild', true) ? '--build' : '';
|
||
|
const detached = configOptions.get('dockerComposeDetached', true) ? '-d' : '';
|
||
|
terminal.sendText(`cd "${folder.uri.fsPath}"`);
|
||
|
for (let command of commands) {
|
||
|
selectedItems.forEach((item) => {
|
||
|
terminal.sendText(command.toLowerCase() === 'up' ? `docker-compose -f "${item.file}" ${command} ${detached} ${build}` : `docker-compose -f "${item.file}" ${command}`);
|
||
|
});
|
||
|
terminal.show();
|
||
|
if (telemetry_1.reporter) {
|
||
|
/* __GDPR__
|
||
|
"command" : {
|
||
|
"command" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
|
||
|
}
|
||
|
*/
|
||
|
telemetry_1.reporter.sendTelemetryEvent('command', {
|
||
|
command: teleCmdId + command
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
async function composeUp(dockerComposeFileUri, selectedComposeFileUris) {
|
||
|
return await compose(['up'], 'to bring up', dockerComposeFileUri, selectedComposeFileUris);
|
||
|
}
|
||
|
exports.composeUp = composeUp;
|
||
|
async function composeDown(dockerComposeFileUri, selectedComposeFileUris) {
|
||
|
return await compose(['down'], 'to take down', dockerComposeFileUri, selectedComposeFileUris);
|
||
|
}
|
||
|
exports.composeDown = composeDown;
|
||
|
async function composeRestart(dockerComposeFileUri, selectedComposeFileUris) {
|
||
|
return await compose(['down', 'up'], 'to restart', dockerComposeFileUri, selectedComposeFileUris);
|
||
|
}
|
||
|
exports.composeRestart = composeRestart;
|
||
|
//# sourceMappingURL=docker-compose.js.map
|