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
- `Run app on systems`: спрашивает приложение и целевые системы.
- `Run app on systems parallel`: спрашивает приложение, затем даёт выбрать пресет или вручную ввести системы, и передаёт `--parallel`.
- `Run app preset`: спрашивает приложение и пресет `main`, `russian` или `all`.
- `--latest for app tests`: checkbox в дереве действий, который добавляет `--latest` к app-тестам.
- `Run exec command`: спрашивает shell-команду и целевые системы или пресет.
- `./bin/epm play <app>`: запускает локальный `epm play` вне 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
{
"label": "ayugram main",
"app": "ayugram",
"preset": "main"
"preset": "main",
"latest": true
},
{
"label": "os-release fedora",
......@@ -76,7 +78,6 @@ code --install-extension epm-docker-test-runner-0.1.0.vsix
- `epmDockerTest.defaultSystems`: системы по умолчанию для запусков app/exec.
- `epmDockerTest.defaultPreset`: пресет по умолчанию для запусков по пресету.
- `epmDockerTest.defaultMode`: `auto`, `local` или `remote`.
- `epmDockerTest.latest`: передавать `--latest`.
- `epmDockerTest.parallelJobs`: передавать `-j N`, если значение больше `1`.
- `epmDockerTest.localEpmRoot`: локальное дерево eepm для команд `./bin/epm play` вне контейнера.
- `epmDockerTest.eepmDir`, `epmDockerTest.eepmSource`, `epmDockerTest.remoteHost`, `epmDockerTest.remoteUser`, `epmDockerTest.builderUser`, `epmDockerTest.builderPath`, `epmDockerTest.logRoot`: соответствуют одноимённым опциям скрипта.
......
......@@ -9,11 +9,22 @@ const TERMINAL_NAME = 'EPM Docker Test';
let lastRun = undefined;
let terminal = undefined;
let extensionContext = undefined;
let actionsProvider = undefined;
function activate(context) {
extensionContext = context;
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);
status.name = 'EPM Docker Test';
......@@ -23,6 +34,8 @@ function activate(context) {
status.show();
context.subscriptions.push(
treeView,
checkboxSubscription,
status,
vscode.commands.registerCommand('epmDockerTest.runQuick', runQuick),
vscode.commands.registerCommand('epmDockerTest.runApp', () => runApp(false)),
......@@ -52,12 +65,19 @@ class ActionsProvider {
constructor() {
this.emitter = new vscode.EventEmitter();
this.onDidChangeTreeData = this.emitter.event;
this.latest = Boolean(getWorkspaceState('latestEnabled', false));
}
refresh() {
this.emitter.fire();
}
setLatest(latest) {
this.latest = latest;
setWorkspaceState('latestEnabled', latest);
this.refresh();
}
getTreeItem(item) {
return item;
}
......@@ -78,6 +98,7 @@ class ActionsProvider {
));
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 parallel', 'epmDockerTest.runAppParallel', undefined, new vscode.ThemeIcon('run-all')),
commandItem('Run app preset', 'epmDockerTest.runPreset', undefined, new vscode.ThemeIcon('list-selection')),
......@@ -112,6 +133,17 @@ function separatorItem(label) {
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() {
const choice = await vscode.window.showQuickPick([
{ label: '$(run) Run app on systems', command: 'epmDockerTest.runApp' },
......@@ -149,12 +181,12 @@ async function runApp(parallel) {
await setWorkspaceState('lastApp', app);
if (target.preset) {
await executeTest({ app, preset: target.preset, parallel });
await executeTest({ app, preset: target.preset, parallel, latest: latestEnabled() });
return;
}
await setWorkspaceState('lastSystems', target.systems);
await executeTest({ app, systems: splitArgs(target.systems), parallel });
await executeTest({ app, systems: splitArgs(target.systems), parallel, latest: latestEnabled() });
return;
}
......@@ -169,7 +201,7 @@ async function runApp(parallel) {
await setWorkspaceState('lastApp', app);
await setWorkspaceState('lastSystems', systems);
await executeTest({ app, systems: splitArgs(systems), parallel });
await executeTest({ app, systems: splitArgs(systems), parallel, latest: latestEnabled() });
}
async function pickParallelTarget() {
......@@ -232,7 +264,7 @@ async function runPreset() {
}
await setWorkspaceState('lastApp', app);
await executeTest({ app, preset });
await executeTest({ app, preset, latest: latestEnabled() });
}
async function runExec() {
......@@ -466,6 +498,7 @@ async function runFavorite(favorite) {
systems: favorite.systems,
preset: favorite.preset,
exec: favorite.exec,
latest: favorite.latest,
favoriteArgs: favorite.args
});
}
......@@ -493,6 +526,9 @@ async function executeTest(request) {
if (request.parallel && !args.includes('--parallel') && !args.includes('-j')) {
args.push('--parallel');
}
if (!request.exec && request.latest) {
args.push('--latest');
}
if (request.exec) {
args.push('--exec', request.exec);
......@@ -547,9 +583,6 @@ function buildCommonArgs() {
addStringArg(args, '--builder-path', config.get('builderPath', ''));
addStringArg(args, '--log-root', config.get('logRoot', ''));
if (config.get('latest', false)) {
args.push('--latest');
}
if (parallelJobs > 1) {
args.push('-j', String(parallelJobs));
}
......@@ -882,6 +915,10 @@ async function setWorkspaceState(key, value) {
await extensionContext?.workspaceState.update(key, value);
}
function latestEnabled() {
return Boolean(actionsProvider?.latest);
}
module.exports = {
activate,
deactivate
......
......@@ -108,11 +108,6 @@
"default": "auto",
"description": "Default runner mode."
},
"epmDockerTest.latest": {
"type": "boolean",
"default": false,
"description": "Pass --latest to epm play."
},
"epmDockerTest.parallelJobs": {
"type": "number",
"default": 0,
......@@ -201,6 +196,10 @@
"exec": {
"type": "string"
},
"latest": {
"type": "boolean",
"description": "Pass --latest for this favorite app test."
},
"args": {
"type": "array",
"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