Commit 29659f6f authored by Ivan Mazhukin's avatar Ivan Mazhukin

add latest toggle to extension actions

parent cc0458f0
...@@ -38,6 +38,7 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix ...@@ -38,6 +38,7 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix
- `Run app on systems`: спрашивает приложение и целевые системы. - `Run app on systems`: спрашивает приложение и целевые системы.
- `Run app on systems parallel`: спрашивает приложение, затем даёт выбрать пресет или вручную ввести системы, и передаёт `--parallel`. - `Run app on systems parallel`: спрашивает приложение, затем даёт выбрать пресет или вручную ввести системы, и передаёт `--parallel`.
- `Run app preset`: спрашивает приложение и пресет `main`, `russian` или `all`. - `Run app preset`: спрашивает приложение и пресет `main`, `russian` или `all`.
- `--latest for app tests`: checkbox в дереве действий, который добавляет `--latest` к app-тестам.
- `Run exec command`: спрашивает shell-команду и целевые системы или пресет. - `Run exec command`: спрашивает shell-команду и целевые системы или пресет.
- `./bin/epm play <app>`: запускает локальный `epm play` вне Docker. - `./bin/epm play <app>`: запускает локальный `epm play` вне Docker.
- `./bin/epm play --latest <app>`: запускает локальный `epm play --latest` вне Docker. - `./bin/epm play --latest <app>`: запускает локальный `epm play --latest` вне Docker.
...@@ -56,7 +57,8 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix ...@@ -56,7 +57,8 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix
{ {
"label": "ayugram main", "label": "ayugram main",
"app": "ayugram", "app": "ayugram",
"preset": "main" "preset": "main",
"latest": true
}, },
{ {
"label": "os-release fedora", "label": "os-release fedora",
...@@ -76,7 +78,6 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix ...@@ -76,7 +78,6 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix
- `epmDockerTest.defaultSystems`: системы по умолчанию для запусков app/exec. - `epmDockerTest.defaultSystems`: системы по умолчанию для запусков app/exec.
- `epmDockerTest.defaultPreset`: пресет по умолчанию для запусков по пресету. - `epmDockerTest.defaultPreset`: пресет по умолчанию для запусков по пресету.
- `epmDockerTest.defaultMode`: `auto`, `local` или `remote`. - `epmDockerTest.defaultMode`: `auto`, `local` или `remote`.
- `epmDockerTest.latest`: передавать `--latest`.
- `epmDockerTest.parallelJobs`: передавать `-j N`, если значение больше `1`. - `epmDockerTest.parallelJobs`: передавать `-j N`, если значение больше `1`.
- `epmDockerTest.localEpmRoot`: локальное дерево eepm для команд `./bin/epm play` вне контейнера. - `epmDockerTest.localEpmRoot`: локальное дерево eepm для команд `./bin/epm play` вне контейнера.
- `epmDockerTest.eepmDir`, `epmDockerTest.eepmSource`, `epmDockerTest.remoteHost`, `epmDockerTest.remoteUser`, `epmDockerTest.builderUser`, `epmDockerTest.builderPath`, `epmDockerTest.logRoot`: соответствуют одноимённым опциям скрипта. - `epmDockerTest.eepmDir`, `epmDockerTest.eepmSource`, `epmDockerTest.remoteHost`, `epmDockerTest.remoteUser`, `epmDockerTest.builderUser`, `epmDockerTest.builderPath`, `epmDockerTest.logRoot`: соответствуют одноимённым опциям скрипта.
......
...@@ -9,11 +9,22 @@ const TERMINAL_NAME = 'EPM Docker Test'; ...@@ -9,11 +9,22 @@ const TERMINAL_NAME = 'EPM Docker Test';
let lastRun = undefined; let lastRun = undefined;
let terminal = undefined; let terminal = undefined;
let extensionContext = undefined; let extensionContext = undefined;
let actionsProvider = undefined;
function activate(context) { function activate(context) {
extensionContext = context; extensionContext = context;
const provider = new ActionsProvider(); const provider = new ActionsProvider();
vscode.window.registerTreeDataProvider('epmDockerTest.actions', provider); actionsProvider = provider;
const treeView = vscode.window.createTreeView('epmDockerTest.actions', {
treeDataProvider: provider
});
const checkboxSubscription = treeView.onDidChangeCheckboxState((event) => {
for (const [item, state] of event.items) {
if (item.contextValue === 'epmDockerTest.latestToggle') {
provider.setLatest(state === vscode.TreeItemCheckboxState.Checked);
}
}
});
const status = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100); const status = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100);
status.name = 'EPM Docker Test'; status.name = 'EPM Docker Test';
...@@ -23,6 +34,8 @@ function activate(context) { ...@@ -23,6 +34,8 @@ function activate(context) {
status.show(); status.show();
context.subscriptions.push( context.subscriptions.push(
treeView,
checkboxSubscription,
status, status,
vscode.commands.registerCommand('epmDockerTest.runQuick', runQuick), vscode.commands.registerCommand('epmDockerTest.runQuick', runQuick),
vscode.commands.registerCommand('epmDockerTest.runApp', () => runApp(false)), vscode.commands.registerCommand('epmDockerTest.runApp', () => runApp(false)),
...@@ -52,12 +65,19 @@ class ActionsProvider { ...@@ -52,12 +65,19 @@ class ActionsProvider {
constructor() { constructor() {
this.emitter = new vscode.EventEmitter(); this.emitter = new vscode.EventEmitter();
this.onDidChangeTreeData = this.emitter.event; this.onDidChangeTreeData = this.emitter.event;
this.latest = Boolean(getWorkspaceState('latestEnabled', false));
} }
refresh() { refresh() {
this.emitter.fire(); this.emitter.fire();
} }
setLatest(latest) {
this.latest = latest;
setWorkspaceState('latestEnabled', latest);
this.refresh();
}
getTreeItem(item) { getTreeItem(item) {
return item; return item;
} }
...@@ -78,6 +98,7 @@ class ActionsProvider { ...@@ -78,6 +98,7 @@ class ActionsProvider {
)); ));
const builtIns = [ const builtIns = [
checkboxItem('--latest for app tests', this.latest),
commandItem('Run app on systems', 'epmDockerTest.runApp', undefined, new vscode.ThemeIcon('run')), commandItem('Run app on systems', 'epmDockerTest.runApp', undefined, new vscode.ThemeIcon('run')),
commandItem('Run app on systems parallel', 'epmDockerTest.runAppParallel', undefined, new vscode.ThemeIcon('run-all')), commandItem('Run app on systems parallel', 'epmDockerTest.runAppParallel', undefined, new vscode.ThemeIcon('run-all')),
commandItem('Run app preset', 'epmDockerTest.runPreset', undefined, new vscode.ThemeIcon('list-selection')), commandItem('Run app preset', 'epmDockerTest.runPreset', undefined, new vscode.ThemeIcon('list-selection')),
...@@ -112,6 +133,17 @@ function separatorItem(label) { ...@@ -112,6 +133,17 @@ function separatorItem(label) {
return item; return item;
} }
function checkboxItem(label, checked) {
const item = new vscode.TreeItem(label, vscode.TreeItemCollapsibleState.None);
item.contextValue = 'epmDockerTest.latestToggle';
item.checkboxState = checked
? vscode.TreeItemCheckboxState.Checked
: vscode.TreeItemCheckboxState.Unchecked;
item.tooltip = 'Pass --latest to app test commands';
item.iconPath = new vscode.ThemeIcon('cloud-download');
return item;
}
async function runQuick() { async function runQuick() {
const choice = await vscode.window.showQuickPick([ const choice = await vscode.window.showQuickPick([
{ label: '$(run) Run app on systems', command: 'epmDockerTest.runApp' }, { label: '$(run) Run app on systems', command: 'epmDockerTest.runApp' },
...@@ -149,12 +181,12 @@ async function runApp(parallel) { ...@@ -149,12 +181,12 @@ async function runApp(parallel) {
await setWorkspaceState('lastApp', app); await setWorkspaceState('lastApp', app);
if (target.preset) { if (target.preset) {
await executeTest({ app, preset: target.preset, parallel }); await executeTest({ app, preset: target.preset, parallel, latest: latestEnabled() });
return; return;
} }
await setWorkspaceState('lastSystems', target.systems); await setWorkspaceState('lastSystems', target.systems);
await executeTest({ app, systems: splitArgs(target.systems), parallel }); await executeTest({ app, systems: splitArgs(target.systems), parallel, latest: latestEnabled() });
return; return;
} }
...@@ -169,7 +201,7 @@ async function runApp(parallel) { ...@@ -169,7 +201,7 @@ async function runApp(parallel) {
await setWorkspaceState('lastApp', app); await setWorkspaceState('lastApp', app);
await setWorkspaceState('lastSystems', systems); await setWorkspaceState('lastSystems', systems);
await executeTest({ app, systems: splitArgs(systems), parallel }); await executeTest({ app, systems: splitArgs(systems), parallel, latest: latestEnabled() });
} }
async function pickParallelTarget() { async function pickParallelTarget() {
...@@ -232,7 +264,7 @@ async function runPreset() { ...@@ -232,7 +264,7 @@ async function runPreset() {
} }
await setWorkspaceState('lastApp', app); await setWorkspaceState('lastApp', app);
await executeTest({ app, preset }); await executeTest({ app, preset, latest: latestEnabled() });
} }
async function runExec() { async function runExec() {
...@@ -466,6 +498,7 @@ async function runFavorite(favorite) { ...@@ -466,6 +498,7 @@ async function runFavorite(favorite) {
systems: favorite.systems, systems: favorite.systems,
preset: favorite.preset, preset: favorite.preset,
exec: favorite.exec, exec: favorite.exec,
latest: favorite.latest,
favoriteArgs: favorite.args favoriteArgs: favorite.args
}); });
} }
...@@ -493,6 +526,9 @@ async function executeTest(request) { ...@@ -493,6 +526,9 @@ async function executeTest(request) {
if (request.parallel && !args.includes('--parallel') && !args.includes('-j')) { if (request.parallel && !args.includes('--parallel') && !args.includes('-j')) {
args.push('--parallel'); args.push('--parallel');
} }
if (!request.exec && request.latest) {
args.push('--latest');
}
if (request.exec) { if (request.exec) {
args.push('--exec', request.exec); args.push('--exec', request.exec);
...@@ -547,9 +583,6 @@ function buildCommonArgs() { ...@@ -547,9 +583,6 @@ function buildCommonArgs() {
addStringArg(args, '--builder-path', config.get('builderPath', '')); addStringArg(args, '--builder-path', config.get('builderPath', ''));
addStringArg(args, '--log-root', config.get('logRoot', '')); addStringArg(args, '--log-root', config.get('logRoot', ''));
if (config.get('latest', false)) {
args.push('--latest');
}
if (parallelJobs > 1) { if (parallelJobs > 1) {
args.push('-j', String(parallelJobs)); args.push('-j', String(parallelJobs));
} }
...@@ -882,6 +915,10 @@ async function setWorkspaceState(key, value) { ...@@ -882,6 +915,10 @@ async function setWorkspaceState(key, value) {
await extensionContext?.workspaceState.update(key, value); await extensionContext?.workspaceState.update(key, value);
} }
function latestEnabled() {
return Boolean(actionsProvider?.latest);
}
module.exports = { module.exports = {
activate, activate,
deactivate deactivate
......
...@@ -108,11 +108,6 @@ ...@@ -108,11 +108,6 @@
"default": "auto", "default": "auto",
"description": "Default runner mode." "description": "Default runner mode."
}, },
"epmDockerTest.latest": {
"type": "boolean",
"default": false,
"description": "Pass --latest to epm play."
},
"epmDockerTest.parallelJobs": { "epmDockerTest.parallelJobs": {
"type": "number", "type": "number",
"default": 0, "default": 0,
...@@ -201,6 +196,10 @@ ...@@ -201,6 +196,10 @@
"exec": { "exec": {
"type": "string" "type": "string"
}, },
"latest": {
"type": "boolean",
"description": "Pass --latest for this favorite app test."
},
"args": { "args": {
"type": "array", "type": "array",
"items": { "items": {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment