Skip to content

IEP-1554: Launch and Download EIM #1251

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 15 commits into
base: release/v4.0.0
Choose a base branch
from
Open

IEP-1554: Launch and Download EIM #1251

wants to merge 15 commits into from

Conversation

alirana01
Copy link
Collaborator

Description

Downloads if EIM is not present or will simply launch the EIM with added button

Fixes # (IEP-1554)

Type of change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

How has this been tested?

Try to remove the EIM and all the relevant files specially eim_idf.json and then try to launch the IDE.
The IDE will prompt to download the EIM and then launch it

Also test if you are able to download and launch via ESP-IDF Manager

Test Configuration:

  • ESP-IDF Version: any
  • OS (Windows,Linux and macOS): all

Dependent components impacted by this PR:

  • EIM

Checklist

  • PR Self Reviewed
  • Applied Code formatting
  • Verified on all platforms - Windows,Linux and macOS

@alirana01 alirana01 self-assigned this Jun 17, 2025
Copy link

coderabbitai bot commented Jun 17, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Collaborator Author

@alirana01 alirana01 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Self Review

alirana01 and others added 4 commits June 17, 2025 14:03
* Initial integration

Initial integration for the eim starting from the start to handle the empty workspace. Tools activation is still to be done along with code cleanup. Just the basic display is working which will also be enhanced.

* Initial first flow with successful installation and loading of env in IDE with EIM

* constants moved to single place and added refresh function

* minor cleanup and logging for user

* IEP-1334: code cleanup (Active Review) (#1125)

* cleanup of unused classes and code

* String internalization

* update to ci file

* ci error fixed

* ci error fix

* ci fix

* fixing ci error

* ci error fix

* ci error fix

* ci syntax fix

* ci syntax indentation fix

* ci syntax fix

* ci syntax fix

* ci fixed

* ci fixed2

* ci trigger

* workflow trigger fix

* cleanup

* ci deps isntalled

* eim fix

* using eim action to install

* using Petr's fork

* switched back to official action repo

* Revert "switched back to official action repo"

This reverts commit f8cd7a7.

* trying to fix action for eim

* trying with petrs fork again

* ci fix

* back to espressif

* name fixed

* updated url for eim

* old config export handling

* fixing tests env setup

* logging to verify skip tests

* fixing POSIX path resolution

* activation script properly sourced

* added test run variable in test pom directly

* adding cache option for the maven

* file name updated

* increasing timeout for tests

* test fixes and removing redundant and outdated tests

* cleanup and update for user messages

* updated to handle activation of single esp-idf from eim

* removing unwanted test for fixing failures

* increased timeout for tests

* ci updated for the release branch trigger as well

* ci error fix

* fix for sdkconfig server

* cleaning up the idf_tools_path configuration in the IDE

* added the option to include homebrew paths on macos

* changes for guide link

* Guidance link added to NLS

* fix: Launch ESP-IDF Manager view even there is no eim_idf.json file found

* fix: Don't launch multiple ESP-IDF Manager editors

* fix: Update the msg and convert it to MessageDialog

* fix: notify IDF not found while opening Manager view

* fix: java.lang.UnsupportedOperationException

* fix: File Not found issue and others

* updated code for eim watcher added

Next commits will do some refactoring and then implement the logic to handle these changes

* refactored startup classes

* initial base level logic for file watcher

So this is very basic first level of file watcher service that watches the file and then also takes care that the file is wasnt changes since last startup. Initial changes only take that the file last modified is verified and just any change in file simply will give you a message box telling that something changed. More advanced and robust checks in upcoming commits

* missing copyright added

---------

Co-authored-by: Kondal Kolipaka <[email protected]>
@kolipakakondal
Copy link
Collaborator

Scenario:

I launched my development environment with the existing workspace, and it prompted a dialog with the message ‘…do you want to convert?’. I clicked ‘Yes’ and saw the following error.

java.lang.NullPointerException: Cannot invoke "com.espressif.idf.core.tools.ToolInitializer.exportOldConfig()" because "this.toolInitializer" is null
	at com.espressif.idf.ui.tools.EspressifToolStartup.handleOldConfigExport(EspressifToolStartup.java:119)
	at com.espressif.idf.ui.tools.EspressifToolStartup.earlyStartup(EspressifToolStartup.java:79)
	at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:79)
	at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:55)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.ui.internal.Workbench$39.run(Workbench.java:2775)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

@alirana01
Copy link
Collaborator Author

@AndriiFilippov fixed the issue that @kolipakakondal reported please test it

@AndriiFilippov
Copy link
Collaborator

AndriiFilippov commented Jun 20, 2025

@alirana01 hi !

Tested under:
OS - Windows 11

At first, I thought the problem was with the path C:\\Users\\usr\\AppData\\Local\\Temp\\ from which we're running eim.exe.
However, I tried launching and installing the tools outside the IDE from this same path, and everything worked fine.

But when I run eim.exe from within the IDE, the installation completes, yet something prevents the program from progressing past step 7.
everything is installed (under the logs) but program does not proceed

I believe that the way we launch the .exe file from IDE affects the final result.

Screenshot 2025-06-20 at 11 46 11

log.txt

@AndriiFilippov
Copy link
Collaborator

AndriiFilippov commented Jun 20, 2025

there is no validation if eim.exe already exists in the system
there is no validation if eim.exe already exists in under C:\Users\andri\AppData\Local\ path.

@AndriiFilippov
Copy link
Collaborator

AndriiFilippov commented Jun 20, 2025

Once tools are installed - the button "Download Launch EIM" changes to "Launch EIM", and it based on the validation of eim_idf.json file, not on validation of eim.exe itself, which could lead to scenario when, after installation user decides to delete eim.exe file, but the system won't be able to detect it since it validate only presents of eim_idf.json file, and pressing the button "Launch EIM" won't work, yes there is the error log about "EIM path not found: C:\Users\andri\AppData\Local\Temp\eim_gui\eim-gui-windows-x64.exe" but still could be something better 🥲

@AndriiFilippov
Copy link
Collaborator

You will need to manually select the installed version using the radio button in the installer to proceed with the tools setup. (the automatic radio button selection appears only if the esp-idf version was installed before opening IDE)
Screenshot 2025-06-20 at 9 55 45

@AndriiFilippov
Copy link
Collaborator

The text should be separated from the button in order to make button more visible.
Screenshot 2025-06-20 at 11 51 28

{
private static final String URL_JSON = "https://dl.espressif.com/dl/eim/eim_unified_release.json"; //$NON-NLS-1$
private static final Path DOWNLOAD_DIR = Paths.get(System.getProperty("java.io.tmpdir"), "eim_gui"); //$NON-NLS-1$ //$NON-NLS-2$

Copy link
Collaborator

@AndriiFilippov AndriiFilippov Jun 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OS - MacOS ARM64

  1. no pop-up asking for EIM installation ⚠️

  2. if proceed with manual installation, clicking on Download Launch EIM button, then there is error during eim download

Download Failed: Cannot read field "paused" because "watchService" is null

I believe this folder path cause the creation of eim_gui folder under this weird PATH:
/var/folders/fx/w33gzqp575gg615jlr_9mshh0000gn/T/eim_gui

instead of /temp/eim_gui

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@alirana01
Copy link
Collaborator Author

there is no validation if eim.exe already exists in the system there is no validation if eim.exe already exists in under C:\Users\andri\AppData\Local\ path.

It is a bit complicated to do that because as we discussed that this temporary path can easily be cleaned up on POSIX and for windows its also not very friendly if we decide on a constant place to put this EIM executable I can do that for now I have added some validation to the required paths as much as it can be done.

@alirana01
Copy link
Collaborator Author

Once tools are installed - the button "Download Launch EIM" changes to "Launch EIM", and it based on the validation of eim_idf.json file, not on validation of eim.exe itself, which could lead to scenario when, after installation user decides to delete eim.exe file, but the system won't be able to detect it since it validate only presents of eim_idf.json file, and pressing the button "Launch EIM" won't work, yes there is the error log about "EIM path not found: C:\Users\andri\AppData\Local\Temp\eim_gui\eim-gui-windows-x64.exe" but still could be something better 🥲

This should also be resolved now with updated validation code but again we need to have a decisive point for eim executable placement on Linux and Windows for MacOS its already going to Applications as temporary path is only used to download the DMG

@alirana01
Copy link
Collaborator Author

You will need to manually select the installed version using the radio button in the installer to proceed with the tools setup. (the automatic radio button selection appears only if the esp-idf version was installed before opening IDE) Screenshot 2025-06-20 at 9 55 45

Done

@alirana01
Copy link
Collaborator Author

The text should be separated from the button in order to make button more visible. Screenshot 2025-06-20 at 11 51 28

Can you please create a separate ticket for this with this original linked to it as blocking on Jira.
This can be handled in a separate ticket as its not a blocker for now

Windows had weird issue with waiting for ui process causing it to get stuck so needed to find a workaround to handle this
@AndriiFilippov
Copy link
Collaborator

@alirana01

OS - Windows 11
ESP-IDF: master
%command.name.updateEspIdfMaster
image

@AndriiFilippov
Copy link
Collaborator

AndriiFilippov commented Jun 23, 2025

OS - Windows 11
ESP-IDF: any

and error during tools installation(does not affect build or any other functional):
The proxied handler for 'com.espressif.idf.ui.handlers.UpdateEspIdfHandler' could not be loaded

log8.txt

@AndriiFilippov
Copy link
Collaborator

OS - Windows 11

after latest changes, the IDE does not throws pop-up message and don't offer EIM Download / Launch
Just Welcome page opened.
log9.txt

@AndriiFilippov
Copy link
Collaborator

OS - Mac arm64
ESP-IDF: master

after EIM install tools - the IDE is not able to run activate.sh script
error:
/bin/zsh: can't open input file: /Users/andriifilippov/.espressif/tools/activate_idf_master.sh

because the actual master script name is activate_idf_v6.0.sh
Screenshot 2025-06-23 at 16 09 42

Copy link
Collaborator

@kolipakakondal kolipakakondal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @alirana01 Thanks for the PR. LGTM. Could you also contribute JUnit test cases for non-ui part - download mechansim, json reading from the eim, etc.

ToolsInitializationEimMissingMsgBoxTitle=ESP-IDF Not Found
ToolsInitializationEimMissingMsgBoxMessage=ESP-IDF is not found on your system. To use the IDE, install ESP-IDF using <a href="{0}">EIM - GUI Installer</a>. \n\nOnce installed, the IDE will automatically detect ESP-IDF. You can verify and activate it from the ESP-IDF Manager, accessible via the menu: Espressif > ESP-IDF Manager.\n\n
ToolsInitializationEimMissingMsgBoxTitle=ESP-IDF Installation Required
ToolsInitializationEimMissingMsgBoxMessage=ESP-IDF is not currently installed on your system. To proceed, you can download and launch the EIM - GUI Installer directly from this IDE.\n\nWould you like to download and start the EIM installer now?\n\nOnce installation is complete, the IDE will automatically detect ESP-IDF. You can also verify and activate it later from the ESP-IDF Manager (Espressif > ESP-IDF Manager).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It’s a bit lengthy and unclear. Please rephrase it - especially the line: "To proceed, you can download and launch the EIM-GUI Installer directly from this IDE."

Since the IDE itself downloads and launches the EIM-GUI Installer, not the user. But the current sentence suggests otherwise.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Comment on lines 9 to 13
String EIM_WIN_DIR = "C:\\Espressif\\tools\\"; //$NON-NLS-1$
String EIM_WIN_ESPRESSIF_DIR = "C:\\Espressif"; //$NON-NLS-1$

String EIM_WIN_DIR = EIM_WIN_ESPRESSIF_DIR + "\\tools\\"; //$NON-NLS-1$
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Try to use Paths or File.separator for portability.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

public class EimLoader
{
private static final String URL_JSON = "https://dl.espressif.com/dl/eim/eim_unified_release.json"; //$NON-NLS-1$
private static final Path DOWNLOAD_DIR = Paths.get(System.getProperty("java.io.tmpdir"), "eim_gui"); //$NON-NLS-1$ //$NON-NLS-2$
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When multiple versions are downloaded, make sure to clean them up

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

}
else if (os.equals(Platform.OS_LINUX))
{
command = List.of("bash", "-c", "\"" + eimPath.toString() + "\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eimPath is already a String, we can remove eimPath.toString()

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

}
else if (os.equals(Platform.OS_MACOSX))
{
command = List.of("open", "-W", "-a", eimPath.toString()); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eimPath is already a String, we can remove eimPath.toString()

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

{
String powershellCmd = String.format(
"Start-Process -FilePath \"%s\" -PassThru | Select-Object -ExpandProperty Id", //$NON-NLS-1$
eimPath.toString()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eimPath is already a String, we can remove eimPath.toString()

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

{
logMessage("Mounting DMG...\n"); //$NON-NLS-1$
ProcessBuilder mountBuilder = new ProcessBuilder("hdiutil", "attach", dmgPath.toString()); //$NON-NLS-1$ //$NON-NLS-2$
Process mountProcess = mountBuilder.start();
Copy link
Collaborator

@kolipakakondal kolipakakondal Jun 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

check if it succeeded before reading..sames goes for unmounting and others

int mountExitCode = mountProcess.waitFor();
if (mountExitCode != 0) {
throw new IOException..
}

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

connection.setReadTimeout(10000);

int contentLength = connection.getContentLength();
monitor.beginTask("Downloading " + targetPath.getFileName(), contentLength); //$NON-NLS-1$
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multiple monitor.beginTask() calls for single moinitor, it was called already in the parent method

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done (called in this one and removed from parent to have proper progress reporting with contentLength

}
else if (name.endsWith(".exe")) //$NON-NLS-1$
{
eimPath = Paths.get(eimPath.toString().concat("\\").concat(name)); //$NON-NLS-1$
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can use path resolve method to avoid converting to string and concatinating

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

listener.onCompleted(downloadPath.toAbsolutePath().toString());
}
}
catch (Exception e)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It’s common practice to catch more specific exceptions to make debugging easier.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

}
catch (InterruptedException e)
{
Logger.log(e);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't we need to propagate the interrupt here? Thread.currentThread().interrupt();

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

didn't get it, if there is an interrupted exception doesn't it mean the thread already interrupted why do we need to call interrupt again?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Catching an InterruptedException clears the thread’s interrupt status, preventing higher-level code from detecting or responding to the interrupt unless the flag is reset.

@AndriiFilippov
Copy link
Collaborator

AndriiFilippov commented Jun 24, 2025

@alirana01 hi !
Had chance to verify latest changes to "Filewatcher" PR here

OS - Windows 11

Using the external EIM.exe , after ESP-IDF installation, the IDE is able to detect modification to eim_idf.json file:
image

but after clicking "Yes" the ESP-IDF Manager table is not updating with actual modifications. Have to do it manually by closing and reopening ESP-IDF Manager shell.

Example: have 1 esp-idf in eim_idf.json file -> install one more using external eim_installer.exe -> after pop-up asking for "refreshing your installation" the ESP-IDF Manager window does not update values in table, you should close and re-open window to refresh table.

@sigmaaa
Copy link
Collaborator

sigmaaa commented Jun 24, 2025

Hi @alirana01,

The tools initialization in the IDE works fine for me, but the Launch EIM button doesn't open eim-gui-windows-x64 (1).exe.

OS: Windows 11

Steps to reproduce:
Download EIM and install tools before downloading Espressif-IDE -> Open the Espressif-IDE ->pop up appears to configure ESP-IDF -> click yes and wait -> click on Launch EIM -> nothing happens. In log I see:

!ENTRY com.espressif.idf.core 1 0 2025-06-24 12:37:35.581
!MESSAGE Launched EIM application: C:\Users\Denys\Downloads\eim-gui-windows-x64 (1).exe

!ENTRY com.espressif.idf.core 1 0 2025-06-24 12:37:35.582
!MESSAGE Listeners are paused

Also, what do you think about making it clearer to users that they need to open the EIM Manager to add a new ESP-IDF? I can imagine a situation where someone installed ESP-IDF using EIM a while ago, and later decides to add another version but forgets that EIM was used initially. In that case, bringing back the "Add" button we previously had — which opens the EIM Manager — could be helpful. What do you think?

@kolipakakondal
Copy link
Collaborator

We could improve this user experience - two pop-ups appeared one on top of the other.

Screenshot 2025-06-24 at 3 27 54 PM

@kolipakakondal
Copy link
Collaborator

Screenshot 2025-06-24 at 3 46 09 PM

Espressif-IDE now uses the EIM System

EIM is new to the users, it would be good if we can expand it. Espressif-IDE now uses the ESP-IDF Installation Manager (EIM) tool...

@kolipakakondal
Copy link
Collaborator

kolipakakondal commented Jun 24, 2025

An error occurred during the conversoin. It would be great if we can highlight the steps the user should take instead of only error message.

Screenshot 2025-06-24 at 3 46 53 PM

Here is the log - looks like an issue while launching from the AppTranslocation

!STACK 0
java.io.IOException: Cannot run program "/private/var/folders/0n/2cn3dl117t9g7_mbgtxzcdph0000gn/T/AppTranslocation/7B2D8827-D33F-450A-8BF3-710EC7F9B8CF/d/eim4.app/Contents/MacOS/eim" (in directory "/"): error=2, No such file or directory
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170)
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089)
	at com.espressif.idf.core.ProcessBuilderFactory.run(ProcessBuilderFactory.java:47)
	at com.espressif.idf.core.ProcessBuilderFactory.runInBackground(ProcessBuilderFactory.java:53)
	at com.espressif.idf.core.tools.ToolInitializer.exportOldConfig(ToolInitializer.java:89)
	at com.espressif.idf.ui.tools.EspressifToolStartup.handleOldConfigExport(EspressifToolStartup.java:124)
	at com.espressif.idf.ui.tools.EspressifToolStartup.lambda$0(EspressifToolStartup.java:91)
	at com.espressif.idf.core.tools.watcher.EimJsonWatchService.withPausedListeners(EimJsonWatchService.java:97)
	at com.espressif.idf.ui.tools.EspressifToolStartup.earlyStartup(EspressifToolStartup.java:91)
	at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:79)
	at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:55)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.ui.internal.Workbench$39.run(Workbench.java:2775)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
	at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:295)
	at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:225)
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126)
	... 13 more

!ENTRY com.espressif.idf.core 1 0 2025-06-24 15:48:38.831
!MESSAGE Listeners are resumed

!ENTRY org.eclipse.ui.workbench 4 2 2025-06-24 15:48:38.833
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".
!STACK 0
java.lang.NullPointerException: Cannot invoke "com.espressif.idf.core.tools.vo.EimJson.getEimPath()" because "this.eimJson" is null
	at com.espressif.idf.ui.tools.EspressifToolStartup.earlyStartup(EspressifToolStartup.java:100)
	at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:79)
	at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:55)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.ui.internal.Workbench$39.run(Workbench.java:2775)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

!ENTRY org.eclipse.ui 4 0 2025-06-24 15:48:38.834
!MESSAGE Unable to execute early startup code for the org.eclipse.ui.IStartup extension contributed by the 'com.espressif.idf.ui' plug-in.
!STACK 0
java.lang.NullPointerException: Cannot invoke "com.espressif.idf.core.tools.vo.EimJson.getEimPath()" because "this.eimJson" is null
	at com.espressif.idf.ui.tools.EspressifToolStartup.earlyStartup(EspressifToolStartup.java:100)
	at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:79)
	at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:55)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.ui.internal.Workbench$39.run(Workbench.java:2775)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

@kolipakakondal
Copy link
Collaborator

I think it's Download and Launch EIM

Screenshot 2025-06-24 at 4 17 31 PM

@kolipakakondal
Copy link
Collaborator

As new variables have been added, it would be helpful to document them for reference.

Screenshot 2025-06-24 at 4 21 10 PM

@kolipakakondal
Copy link
Collaborator

Do we need a separate SYSTEM_PATH variable in the CDT build environment? If it’s alrady appended to the end of PATH, what’s the reason for keeping it separate?

@kolipakakondal
Copy link
Collaborator

If a newer version of EIM is available, what should the user do? Can we document that somewhere?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants