Skip to content

Commit 7b3f122

Browse files
Merge pull request #9561 from microsoft/endgame-202410
Merge endgame to develop
2 parents 6ef26b4 + 52c39a4 commit 7b3f122

File tree

8 files changed

+40
-21
lines changed
  • PluginsAndFeatures/azure-toolkit-for-intellij
    • azure-intellij-plugin-appservice-java/src/main/java/com/microsoft/azure/toolkit/intellij/appservice/task
    • azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/intellij/legacy/appservice/action
    • azure-intellij-plugin-cloud-shell/src/main/kotlin/com/microsoft/azure/toolkit/intellij/cloudshell/actions
    • azure-intellij-plugin-lib-java/src/main/resources
    • azure-intellij-plugin-lib/src/main/java/com/microsoft/azure/toolkit/intellij/common/fileexplorer
    • azure-intellij-plugin-service-explorer/src/main/java/com/microsoft/azure/toolkit/intellij/explorer
    • src/main/resources/META-INF

8 files changed

+40
-21
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
All notable changes to "Azure Toolkit for IntelliJ IDEA" will be documented in this file.
44

55
- [Change Log](#change-log)
6+
- [3.93.0](#3930)
67
- [3.92.0](#3920)
78
- [3.91.0](#3910)
89
- [3.90.0](#3900)
@@ -114,6 +115,10 @@ All notable changes to "Azure Toolkit for IntelliJ IDEA" will be documented in t
114115
- [3.0.7](#307)
115116
- [3.0.6](#306)
116117

118+
## 3.93.0
119+
- Support IntelliJ 2024.3 Beta
120+
- Support Azure Cloud Shell (Thanks for @rafaelldi)
121+
117122
## 3.92.0
118123
- Added Managed identity support for Azure Functions.
119124
- Fixed [#8473](https://github.com/microsoft/azure-tools-for-java/issues/8473): Class initialization must not depend on services. Consider using instance of the service on-demand instead.

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice-java/src/main/java/com/microsoft/azure/toolkit/intellij/appservice/task/CreateWebAppTask.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ public void execute() throws Exception {
5252
webAppConfig.subscriptionId(subscription.getId());
5353
webAppConfig.runtime(RuntimeConfig.fromRuntime(WebAppRuntime.getDefaultJavaseRuntime()));
5454

55-
final String rgName = Utils.generateRandomResourceName(String.format("rg-%s", name), 90);
56-
webAppConfig.resourceGroup(rgName);
5755
final WebAppBase<?, ?, ?> webApp = WebAppService.getInstance().createWebApp(webAppConfig);
5856
context.applyResult(WEBAPP_ID, webApp.getId());
5957
context.applyResult(RESOURCE_GROUP, webApp.getResourceGroupName());

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/intellij/legacy/appservice/action/SSHIntoWebAppAction.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.microsoft.azure.toolkit.ide.common.action.ResourceCommonActionsContributor;
1212
import com.microsoft.azure.toolkit.intellij.common.TerminalUtils;
1313
import com.microsoft.azure.toolkit.lib.appservice.model.OperatingSystem;
14+
import com.microsoft.azure.toolkit.lib.appservice.model.Runtime;
1415
import com.microsoft.azure.toolkit.lib.appservice.webapp.WebApp;
1516
import com.microsoft.azure.toolkit.lib.common.action.Action;
1617
import com.microsoft.azure.toolkit.lib.common.action.AzureActionManager;
@@ -30,6 +31,7 @@
3031
import java.io.IOException;
3132
import java.nio.charset.StandardCharsets;
3233
import java.util.AbstractList;
34+
import java.util.Optional;
3335

3436
import static com.microsoft.azure.toolkit.intellij.common.AzureBundle.message;
3537
import static com.microsoft.azure.toolkit.lib.common.operation.OperationBundle.description;
@@ -47,7 +49,7 @@ public class SSHIntoWebAppAction {
4749
private static final String WEB_APP_DOCKER_PREFIX = "DOCKER|";
4850
private static final String CMD_SSH_TO_LOCAL_PROXY =
4951
"ssh -o StrictHostKeyChecking=no -o \"UserKnownHostsFile /dev/null\" -o \"LogLevel ERROR\" %[email protected] -p %d";
50-
52+
private static final Integer TERMINAL_MAX_SIZE = 1024 * 8;
5153
private static final String WEBAPP_TERMINAL_TABLE_NAME = "SSH - %s";
5254
private static final String RESOURCE_GROUP_PATH_PREFIX = "resourceGroups/";
5355
private static final String RESOURCE_ELEMENT_PATTERN = "[^/]+";
@@ -70,7 +72,7 @@ public void execute() {
7072
final AzureString title = description("user/webapp.connect_ssh.app", webAppName);
7173
AzureTaskManager.getInstance().runInBackground(new AzureTask<>(project, title, false,
7274
() -> {
73-
if (webApp.getRuntime().getOperatingSystem() == OperatingSystem.WINDOWS) {
75+
if (Optional.ofNullable(webApp.getRuntime()).map(Runtime::getOperatingSystem).orElse(null) == OperatingSystem.WINDOWS) {
7476
AzureMessager.getMessager().warning(message("webapp.ssh.windowsNotSupport"));
7577
return;
7678
}
@@ -131,12 +133,14 @@ private static boolean waitForInputPassword(TtyConnector connector) throws Illeg
131133
final int interval = 500;
132134
final int times = 30000 / interval;
133135
while (count++ < times) {
134-
final AbstractList<Byte> outputCache = (AbstractList<Byte>) FieldUtils.readField(connector, "outputCache", true);
135-
Byte[] bytes = new Byte[outputCache.size()];
136-
bytes = outputCache.toArray(bytes);
137-
final byte[] myBuf = ArrayUtils.toPrimitive(bytes);
138-
if (myBuf != null && new String(myBuf, StandardCharsets.UTF_8).contains("password:")) {
139-
return true;
136+
try {
137+
final char[] result = new char[TERMINAL_MAX_SIZE];
138+
connector.read(result, 0, TERMINAL_MAX_SIZE -1 );
139+
if (new String(result).contains("password:")) {
140+
return true;
141+
}
142+
} catch (final IOException ignore) {
143+
continue;
140144
}
141145
Thread.sleep(interval);
142146
}

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-cloud-shell/src/main/kotlin/com/microsoft/azure/toolkit/intellij/cloudshell/actions/UploadToCloudShellAction.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptor
1515
import com.intellij.openapi.progress.currentThreadCoroutineScope
1616
import com.intellij.openapi.vfs.VirtualFile
1717
import com.microsoft.azure.toolkit.intellij.cloudshell.CloudShellService
18+
import com.microsoft.azure.toolkit.lib.common.messager.AzureMessager
1819
import kotlinx.coroutines.Dispatchers
1920
import kotlinx.coroutines.launch
2021

@@ -35,7 +36,7 @@ class UploadToCloudShellAction : AnAction() {
3536
val activeConnector = CloudShellService.getInstance(project).activeConnector() ?: return
3637

3738
currentThreadCoroutineScope().launch(Dispatchers.EDT) {
38-
val descriptor = FileChooserDescriptor(true, false, false, true, false, true).apply {
39+
val descriptor = FileChooserDescriptor(true, false, true, true, false, true).apply {
3940
title = "Select File(s) To Upload To Azure Cloud Shell"
4041
}
4142
FileChooser.chooseFiles(descriptor, project, null, null, object : FileChooser.FileChooserConsumer {

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-lib-java/src/main/resources/whatsnew.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
<!-- Version: 3.88.0 -->
22
# What's new in Azure Toolkit for IntelliJ
3+
4+
## 3.93.0
5+
- Support IntelliJ 2024.3 Beta
6+
- Support Azure Cloud Shell (Thanks for @rafaelldi)
7+
38
## 3.92.0
49
- Added Managed identity support for Azure Functions.
510
- Fixed [#8473](https://github.com/microsoft/azure-tools-for-java/issues/8473): Class initialization must not depend on services. Consider using instance of the service on-demand instead.

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-lib/src/main/java/com/microsoft/azure/toolkit/intellij/common/fileexplorer/VirtualFileActions.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,14 @@ public void beforeFileClosed(FileEditorManager source, VirtualFile file) {
131131

132132
public static VirtualFile getVirtualFile(String fileId, FileEditorManager manager) {
133133
return Arrays.stream(manager.getOpenFiles())
134-
.filter(f -> StringUtils.equals(f.getUserData(FILE_ID), fileId))
135-
.findAny().orElse(null);
134+
.filter(f -> StringUtils.equals(f.getUserData(FILE_ID), fileId))
135+
.findAny().orElse(null);
136136
}
137137

138138
public static VirtualFile createVirtualFile(String fileId, String fileName, File file, FileEditorManager manager) {
139139
return Arrays.stream(manager.getOpenFiles())
140-
.filter(f -> StringUtils.equals(f.getUserData(FILE_ID), fileId))
141-
.findAny().orElse(createTempVirtualFile(fileId, fileName, file, manager));
140+
.filter(f -> StringUtils.equals(f.getUserData(FILE_ID), fileId))
141+
.findAny().orElse(createTempVirtualFile(fileId, fileName, file, manager));
142142
}
143143

144144
@SneakyThrows
@@ -147,7 +147,13 @@ private static VirtualFile createTempVirtualFile(final String fileId, final Stri
147147
final VirtualFile virtualFile = new RemoteVirtualFile(origin, fileName);
148148
virtualFile.setCharset(StandardCharsets.UTF_8);
149149
virtualFile.putUserData(FILE_ID, fileId);
150-
virtualFile.setWritable(true);
150+
AzureTaskManager.getInstance().runLater(() -> {
151+
try {
152+
WriteAction.run(() -> virtualFile.setWritable(true));
153+
} catch (IOException e) {
154+
throw new RuntimeException(e);
155+
}
156+
});
151157
return virtualFile;
152158
}
153159

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-service-explorer/src/main/java/com/microsoft/azure/toolkit/intellij/explorer/AzureExplorer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,9 +202,10 @@ public ActionUpdateThread getActionUpdateThread() {
202202
};
203203
final AnAction feedbackAction = ActionManager.getInstance().getAction("Actions.ProvideFeedback");
204204
final AnAction getStartAction = ActionManager.getInstance().getAction("Actions.GettingStart");
205+
final AnAction startCloudShellAction = ActionManager.getInstance().getAction("AzureToolkit.CloudShell.Start");
205206
final AnAction signInAction = ActionManager.getInstance().getAction("AzureToolkit.AzureSignIn");
206207
final AnAction selectSubscriptionsAction = ActionManager.getInstance().getAction("AzureToolkit.SelectSubscriptions");
207-
toolWindow.setTitleActions(Arrays.asList(getStartAction, refreshAction, selectSubscriptionsAction, signInAction, Separator.create(), feedbackAction));
208+
toolWindow.setTitleActions(Arrays.asList(getStartAction, refreshAction, selectSubscriptionsAction, startCloudShellAction, signInAction, Separator.create(), feedbackAction));
208209
if (toolWindow instanceof ToolWindowEx) {
209210
final AnAction devBlogsAction = ActionManager.getInstance().getAction("AzureToolkit.ViewDevBlogs");
210211
final AnAction documentAction = ActionManager.getInstance().getAction("AzureToolkit.ViewToolingDocument");

PluginsAndFeatures/azure-toolkit-for-intellij/src/main/resources/META-INF/plugin.xml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,10 @@
2727
<change-notes>
2828
<![CDATA[
2929
<html>
30-
<h2 id="3-92-0">3.92.0</h2>
30+
<h2 id="3-93-0">3.93.0</h2>
3131
<ul>
32-
<li>Added Managed identity support for Azure Functions.</li>
33-
<li>Fixed <a href="https://github.com/microsoft/azure-tools-for-java/issues/8473">#8473</a>: Class initialization must not depend on services. Consider using instance of the service on-demand instead.</li>
34-
<li>Fixed <a href="https://github.com/microsoft/azure-tools-for-java/issues/8497">#8497</a>: fix support for swap.</li>
32+
<li>Support IntelliJ 2024.3 Beta</li>
33+
<li>Support Azure Cloud Shell (Thanks for @rafaelldi)</li>
3534
</ul>
3635
<p>You may get the full change log <a href="https://github.com/Microsoft/azure-tools-for-java/blob/develop/CHANGELOG.md">here</a></p>
3736
</html>

0 commit comments

Comments
 (0)