chatgpt: clean up temporary files during uploadRepoFiles

We noticed our gerrit instance running out of disk space and found a
series of json files generated under `/tmp`. The structure looked like:
/tmp/<repository_name><hash>.json

We notice these temp files would get generated upon a CR change-merged
event:
"<timestamp & user> INFO  com.googlesource.gerrit.plugins.aicodereview
.listener.GerritListener : Processing event: com.google.gerrit.server
.events.ChangeMergedEvent@commit-hash"

The timestamp of this event would always match the timestamp of the
json file created under `tmp`. These files also only get created for
CRs merged in a repo where ai-code-review is created.

We pin-pointed the issue to createTempFileWithContent in this plugin.
There is a deleteOnExit() clause for this, but it does not seem to
delete the files in all situations.

Some of these files are quite large, as they contain the whole content
of a CR.

This change is a proposed fix for deleting a file in a finally clause
in case it has not been removed yet and still exists.

Change-Id: I1fb62f95c20b509cc756a0702d112e5eb44cc20a
diff --git a/src/main/java/com/googlesource/gerrit/plugins/aicodereview/mode/stateful/client/api/chatgpt/ChatGptAssistant.java b/src/main/java/com/googlesource/gerrit/plugins/aicodereview/mode/stateful/client/api/chatgpt/ChatGptAssistant.java
index 4954814..ed96945 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/aicodereview/mode/stateful/client/api/chatgpt/ChatGptAssistant.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/aicodereview/mode/stateful/client/api/chatgpt/ChatGptAssistant.java
@@ -38,8 +38,11 @@
 import com.googlesource.gerrit.plugins.aicodereview.mode.stateful.model.api.chatgpt.ChatGptResponse;
 import com.googlesource.gerrit.plugins.aicodereview.mode.stateful.model.api.chatgpt.ChatGptToolResources;
 import com.googlesource.gerrit.plugins.aicodereview.utils.HashUtils;
+
+import java.io.IOException;
 import java.net.URI;
 import java.nio.file.Path;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.List;
 import lombok.extern.slf4j.Slf4j;
@@ -112,12 +115,28 @@
 
   private String uploadRepoFiles() {
     String repoFiles = gitRepoFiles.getGitRepoFiles(config, change);
-    Path repoPath =
-        createTempFileWithContent(sanitizeFilename(change.getProjectName()), ".json", repoFiles);
-    ChatGptFiles chatGptFiles = new ChatGptFiles(config);
-    ChatGptFilesResponse chatGptFilesResponse = chatGptFiles.uploadFiles(repoPath);
-
-    return chatGptFilesResponse.getId();
+    Path repoPath = null;
+    try {
+      repoPath =
+        createTempFileWithContent(sanitizeFilename(
+          change.getProjectName()),
+          ".json",
+          repoFiles
+        );
+      ChatGptFiles chatGptFiles = new ChatGptFiles(config);
+      ChatGptFilesResponse chatGptFilesResponse = chatGptFiles.uploadFiles(repoPath);
+      return chatGptFilesResponse.getId();
+    }
+    finally {
+      if (repoPath != null) {
+        try {
+          Files.deleteIfExists(repoPath);
+        }
+        catch (IOException e) {
+          log.warn("Failed to delete temp file " + repoPath, e);
+        }
+      }
+    }
   }
 
   private String createAssistant(String vectorStoreId) {