Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
cd94b7c
IEP-1334: EIM Integration (#1116)
alirana01 Apr 24, 2025
e378e21
fixes after merge
alirana01 May 7, 2025
49f8cdf
IEP-1516: Automatic update to IDE with filewatcher (#1210)
alirana01 Jun 10, 2025
328284f
IEP 1517: Handling case for conversion of existing json file to eim_i…
alirana01 Jun 10, 2025
5c17c1d
IEP-1529: Fix for system python executable (#1239)
alirana01 Jun 16, 2025
e290a8f
IEP-1555: Removed python dependencies installation (#1254)
alirana01 Jun 18, 2025
91253e3
IEP-1554: Launch and Download EIM (#1251)
alirana01 Jul 1, 2025
5a8b152
feat: made the Esp-idf setup msg more informative (#1258)
sigmaaa Jul 1, 2025
431ebf3
IEP-1577: Eim default directory added based on documentation (#1261)
alirana01 Jul 1, 2025
2f29cbf
IEP-1557: Documentation for the ESP-IDF Manager (#1257)
alirana01 Jul 2, 2025
6bf6a63
doc updated and image fixed
alirana01 Jul 2, 2025
e6a3baf
image fixed
alirana01 Jul 2, 2025
58df3a5
image fixed
alirana01 Jul 2, 2025
4f3fc64
possible syntax fix
alirana01 Jul 2, 2025
93168ea
another fix
alirana01 Jul 2, 2025
0067884
fixing imaage name
alirana01 Jul 2, 2025
fec22eb
added file to correct directory
alirana01 Jul 2, 2025
eff0686
doc update
alirana01 Jul 2, 2025
888e059
IEP-1585: Fixed eim old config import handling (#1263)
alirana01 Jul 4, 2025
17cf075
IEP-1584 Avoid Simultaneous Modals on Old Config Detection (#1264)
sigmaaa Jul 7, 2025
e3c4497
IEP-1583: Closing old editor window when old workspace is found (#1262)
alirana01 Jul 9, 2025
1c95f5e
fix: fixed exception and added loggin when eim.json is missing (#1270)
sigmaaa Jul 14, 2025
e3d51d3
IEP-1596 Handle Redundant File Watcher Events for eim_idf.json (#1267)
sigmaaa Jul 14, 2025
3da4539
fix: remove redundant closeWelcomePage (#1268)
sigmaaa Jul 14, 2025
ccf36ae
IEP-1602 Prevent Exception When EIM Closes Before eim.json Is Created…
sigmaaa Jul 15, 2025
b3c4e58
IEP-1590: autoimport of old configuration (#1275)
alirana01 Jul 24, 2025
de136ba
fix: bump version to v4.0.0 (#1282)
kolipakakondal Jul 29, 2025
b4275a3
fix: update the tags for beta versions
kolipakakondal Jul 29, 2025
58535d8
fix: code cleanup
kolipakakondal Jul 29, 2025
b852445
fix: update CI workflow regex patterns to support v4.0.0-beta.1 tags
kolipakakondal Jul 29, 2025
b997b13
fix: correct keystore file path in CI workflow
kolipakakondal Jul 29, 2025
5649380
Revert "fix: correct keystore file path in CI workflow"
kolipakakondal Jul 29, 2025
2d49c6e
fix: regex issue with the tags
kolipakakondal Jul 29, 2025
25d151d
merge issues fixed
alirana01 Sep 15, 2025
d29f0e1
ci esp-idf version updated
alirana01 Sep 15, 2025
3d42ea0
testing eim action
alirana01 Sep 17, 2025
7423971
updated name
alirana01 Sep 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 18 additions & 19 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,31 @@ name: Java CI with Maven

on:
push:
branches: [ master ]
branches:
- master
- release/**
pull_request:
branches: [ master ]
branches:
- master
- release/**

jobs:
build:
build_linux:

runs-on:
- self-hosted
- eclipse
- BrnoUBU0004
runs-on: [self-hosted, eclipse, BrnoUBU0004]

steps:
- uses: actions/checkout@v2

- name: Clone IDF Release From Github
uses: actions/checkout@v2
with:
repository: espressif/esp-idf
path: dependencies/idf-tools
submodules: 'true'
ref: release/v5.4
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.10'
python-version: '3.10'

- name: Install ESP-IDF via eim
uses: espressif/install-esp-idf-action@v1
with:
version: 'v5.4'

- name: Set up Maven
uses: stCarolas/setup-maven@v5
Expand All @@ -42,8 +40,9 @@ jobs:
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'

distribution: 'temurin'
cache: 'maven'

- name: Build with Maven
run: export NO_AT_BRIDGE=1 && mvn clean verify -Djarsigner.skip=true -DskipTests=false -DtestWorkspace=/opt/actions-runner/_work/workspace

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
- "v[0-9]+\\.[0-9]+\\.[0-9]+-beta"
- "v[0-9]+.[0-9]+.[0-9]+-beta.*"

env:
ARCHIVE_PREFIX: com.espressif.idf.update-
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/ci_windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@ name: Java CI with Maven on Windows

on:
push:
branches: [ master ]
branches:
- master
- release/**
pull_request:
branches: [ master ]
branches:
- master
- release/**

jobs:
build_windows:
Expand Down
44 changes: 44 additions & 0 deletions .github/workflows/eim_act_test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: EIM Action Test

on:
push:
branches:
- master
- release/**
pull_request:
branches:
- master
- release/**

jobs:
build_linux:

runs-on: macos-latest

steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.10'

- name: Install ESP-IDF via eim
uses: espressif/install-esp-idf-action@v1
with:
version: 'v5.4'

- name: Set up Maven
uses: stCarolas/setup-maven@v5
with:
maven-version: 3.9.6

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'maven'
2 changes: 1 addition & 1 deletion bundles/com.espressif.idf.branding/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: com.espressif.idf.branding;singleton:=true
Bundle-Version: 3.6.0.qualifier
Bundle-Version: 4.0.0.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: JavaSE-17
1 change: 1 addition & 0 deletions bundles/com.espressif.idf.core/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ Export-Package: com.espressif.idf.core,
com.espressif.idf.core.tools,
com.espressif.idf.core.tools.util,
com.espressif.idf.core.tools.vo,
com.espressif.idf.core.tools.watcher,
com.espressif.idf.core.util,
com.espressif.idf.core.variable,
org.json.simple,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,11 @@

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.eclipse.core.runtime.preferences.DefaultScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;

import com.espressif.idf.core.util.IDFUtil;

/**
* @author Kondal Kolipaka
*
Expand All @@ -32,16 +29,6 @@ public class IDFCorePreferenceConstants
public static final boolean CMAKE_CCACHE_DEFAULT_STATUS = true;
public static final boolean AUTOMATE_BUILD_HINTS_DEFAULT_STATUS = true;
public static final boolean HIDE_ERRORS_IDF_COMPONENTS_DEFAULT_STATUS = true;
public static final String IDF_GITHUB_ASSETS = "IDF_GITHUB_ASSETS"; //$NON-NLS-1$
public static final String IDF_GITHUB_ASSETS_DEFAULT_GLOBAL = "dl.espressif.com/github_assets"; //$NON-NLS-1$
public static final String IDF_GITHUB_ASSETS_DEFAULT_CHINA = "dl.espressif.cn/github_assets"; //$NON-NLS-1$
public static final String PIP_EXTRA_INDEX_URL = "PIP_EXTRA_INDEX_URL"; //$NON-NLS-1$
public static final String PIP_EXTRA_INDEX_URL_DEFAULT_GLOBAL = "https://dl.espressif.com/pypi"; //$NON-NLS-1$
public static final String PIP_EXTRA_INDEX_URL_DEFAULT_CHINA = "https://dl.espressif.cn/pypi"; //$NON-NLS-1$
public static final String IDF_TOOLS_PATH = "IDF_TOOLS_PATH"; //$NON-NLS-1$
public static final String IDF_TOOLS_PATH_DEFAULT = Platform.getOS().equals(Platform.OS_WIN32)
? IDFUtil.resolveEnvVariable("%USERPROFILE%\\.espressif") //$NON-NLS-1$
: IDFUtil.resolveEnvVariable("$HOME/.espressif"); //$NON-NLS-1$

/**
* Returns the node in the preference in the given context.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;

import com.espressif.idf.core.logging.Logger;
import com.espressif.idf.core.util.IDFUtil;
import com.espressif.idf.core.util.StringUtil;

/**
Expand Down Expand Up @@ -52,6 +51,12 @@ public class IDFEnvironmentVariables

public static final String IDF_CCACHE_ENABLE = "IDF_CCACHE_ENABLE"; //$NON-NLS-1$

public static final String ESP_IDF_EIM_ID = "ESP_IDF_EIM_ID"; //$NON-NLS-1$

public static final String EIM_PATH = "EIM_PATH"; //$NON-NLS-1$

public static final String SYSTEM_PATH = "SYSTEM_PATH"; //$NON-NLS-1$

/**
* @param variableName Environment variable Name
* @return IEnvironmentVariable
Expand Down Expand Up @@ -129,16 +134,12 @@ public Map<String, String> getSystemEnvMap()
IEnvironmentVariableManager buildEnvironmentManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IEnvironmentVariable[] variables = buildEnvironmentManager.getVariables((ICConfigurationDescription) null,
true);
Map<String, String> envMap = IDFUtil.getSystemEnv();
Map<String, String> envMap = new HashMap<String, String>(System.getenv());
if (variables != null)
{
for (IEnvironmentVariable iEnvironmentVariable : variables)
{
String key = iEnvironmentVariable.getName();
if (key.equals(IDFCorePreferenceConstants.IDF_TOOLS_PATH))
{
continue;
}
String value = iEnvironmentVariable.getValue();
envMap.put(key, value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -359,9 +359,6 @@ private void runCmakeBuildCommand(IConsole console, IProgressMonitor monitor, IP
}
}

envVars.add(new EnvironmentVariable(IDFCorePreferenceConstants.IDF_TOOLS_PATH,
IDFUtil.getIDFToolsPathFromPreferences()));

String buildCommand = getProperty(BUILD_COMMAND);
if (buildCommand.isBlank())
{
Expand Down Expand Up @@ -481,10 +478,8 @@ private void runCmakeCommand(IConsole console, IProgressMonitor monitor, IProjec
// Set PYTHONUNBUFFERED to 1/TRUE to dump the messages back immediately without
// buffering
IEnvironmentVariable bufferEnvVar = new EnvironmentVariable("PYTHONUNBUFFERED", "1"); //$NON-NLS-1$ //$NON-NLS-2$
IEnvironmentVariable idfToolsPathEnvVar = new EnvironmentVariable(IDFCorePreferenceConstants.IDF_TOOLS_PATH,
IDFUtil.getIDFToolsPathFromPreferences());

Process p = startBuildProcess(command, new IEnvironmentVariable[] { bufferEnvVar, idfToolsPathEnvVar },
Process p = startBuildProcess(command, new IEnvironmentVariable[] { bufferEnvVar },
workingDir, errConsole, monitor);
if (p == null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,26 @@ public class Messages extends NLS
public static String ToolsInitializationDifferentPathMessageBoxOptionYes;
public static String ToolsInitializationDifferentPathMessageBoxOptionNo;
public static String IDFToolChainsMissingErrorMsg;

public static String ToolsInitializationEimMissingMsgBoxTitle;
public static String ToolsInitializationEimMissingMsgBoxMessage;

public static String RefreshingProjects_JobName;

public static String NoActiveEspIdfInWorkspaceMsgTitle;
public static String NoActiveEspIdfInWorkspaceMsg;

public static String OldConfigFoundMsgBoxTitle;
public static String OldConfigFoundMsgBoxMsg;
public static String OldConfigExportDirectorSelectionDialogTitle;
public static String OldConfigExportDirectorSelectionDialogInfo;
public static String OldConfigExportCompleteSuccessMsgTitle;
public static String OldConfigExportCompleteSuccessMsg;
public static String OldConfigExportCompleteFailMsgTitle;
public static String OldConfigExportCompleteFailMsg;

public static String EIMNotInApplicationsTitle;
public static String EIMNotInApplicationsMessage;

static
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,26 @@ IDFBuildConfiguration_ParseCommand=Parse Compile Commands File
IncreasePartitionSizeTitle=Low Application Partition Size
IncreasePartitionSizeMessage=Less than 30% of application partition size is free({0} of {1} bytes), would you like to increase it? Please click <a href={2}>here</a> to check more details.
ToolsInitializationDifferentPathMessageBoxTitle=Different IDF path found in the config file
ToolsInitializationEimMissingMsgBoxTitle=ESP-IDF Installation Required
ToolsInitializationEimMissingMsgBoxMessage=ESP-IDF is not currently installed on your system.\n\nThe IDE can automatically download and launch the EIM - GUI Installer to help you install it.\n\nWould you like to proceed with the installation?\n\nOnce complete, ESP-IDF will be detected automatically. You can also manage installations later from the ESP-IDF Manager (Espressif > ESP-IDF Manager).
ToolsInitializationDifferentPathMessageBoxMessage=A different ESP-IDF path was found in the esp_idf.json.json configuration file. Do you want to install the tools in the new path or the old path? Please click on the appropriate button.\nNew Path: {0}\nOld Path: {1}
ToolsInitializationDifferentPathMessageBoxOptionYes=Use New Path
ToolsInitializationDifferentPathMessageBoxOptionNo=Use Old Path
ToolsInitializationDifferentPathMessageBoxOptionYes=Yes
ToolsInitializationDifferentPathMessageBoxOptionNo=No
RefreshingProjects_JobName=Refreshing Projects...
IDFBuildConfiguration_PreCheck_DifferentIdfPath=The project was built using the ESP-IDF located at the {0} path.\nThe currently active ESP-IDF path in the IDE is {1}.\nPlease clean the project using "ESP-IDF:Project Full Clean" menu option to use the active ESP-IDF configuration.
IDFToolChainsMissingErrorMsg=Toolchains are missing. Please use ESP-IDF Manager for configuring
IDFToolChainsMissingErrorMsg=Toolchains are missing. Please use ESP-IDF Manager for configuring

NoActiveEspIdfInWorkspaceMsgTitle=ESP-IDF Setup
NoActiveEspIdfInWorkspaceMsg=ESP-IDF tools installed via EIM have been detected, but this workspace is not configured yet. The IDE needs to complete setup to enable full functionality. Would you like to proceed now?

EIMNotInApplicationsTitle=EIM Not Located in Applications Folder
EIMNotInApplicationsMessage=Espressif Installation Manager (EIM) is not located in the Applications folder.\nRunning EIM from a temporary location (e.g., a mounted disk image) may cause issues during configuration import or tool setup.\nTo avoid problems, please move EIM to the /Applications directory and launch it from there.

OldConfigFoundMsgBoxTitle=Old Configuration Detected
OldConfigFoundMsgBoxMsg=Espressif IDE now uses the EIM system to manage ESP-IDF installations. A legacy configuration was found in your current workspace. Converting it to the EIM format will allow proper environment setup and ensure the IDE works seamlessly with your existing projects. Would you like to convert the configuration now?
OldConfigExportDirectorSelectionDialogTitle=Select Destination
OldConfigExportDirectorSelectionDialogInfo=Choose a directory to save the exported settings.
OldConfigExportCompleteSuccessMsgTitle=Import Successful
OldConfigExportCompleteSuccessMsg=The old configuration has been successfully imported.
OldConfigExportCompleteFailMsgTitle=Conversion Failed
OldConfigExportCompleteFailMsg=An error occurred while importing old configuration.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@
*/
public class Logger
{
public static void log(String message, Exception e)
{
log(IDFCorePlugin.getPlugin(), message, e);
}

public static void log(String message)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ public File findToolChain(List<String> paths, String filePattern)

private Path[] getDirectories(String path)
{
return Arrays.stream(path.split(File.pathSeparator)).map(String::trim).map(Paths::get).filter(Files::exists)
return Arrays.stream(path.split(File.pathSeparator)).map(String::trim).map(Paths::get).filter(Files::exists).filter(Files::isDirectory)
.toArray(Path[]::new);
}

Expand Down Expand Up @@ -316,7 +316,7 @@ protected String getIdfToolsExportPath()
Logger.log(commands.toString());

IStatus idfToolsExportStatus = new ProcessBuilderFactory().runInBackground(commands,
org.eclipse.core.runtime.Path.ROOT, IDFUtil.getSystemEnv());
org.eclipse.core.runtime.Path.ROOT, System.getenv());
if (idfToolsExportStatus != null && idfToolsExportStatus.isOK())
{
String message = idfToolsExportStatus.getMessage();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*******************************************************************************
* Copyright 2025 Espressif Systems (Shanghai) PTE LTD. All rights reserved.
* Use is subject to license terms.
*******************************************************************************/
package com.espressif.idf.core.tools;

/**
* Interface to use for the download listening this can be used in your own classes.
* Added specifically for {@link EimLoader}
* @author Ali Azam Rana <[email protected]>
*
*/
public interface DownloadListener
{
public void onProgress(int percent);
public void onCompleted(String filePath);
public void onError(String message, Exception e);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.espressif.idf.core.tools;

import java.io.File;
import java.nio.file.Paths;

public interface EimConstants
{
String EIM_JSON = "eim_idf.json"; //$NON-NLS-1$

String EIM_POSIX_DIR = System.getProperty("user.home").concat(File.separator + ".espressif" + File.separator + "tools" + File.separator); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$

String EIM_WIN_ESPRESSIF_DIR = "C:" + File.separator + "Espressif"; //$NON-NLS-1$ //$NON-NLS-2$

String EIM_WIN_DIR = EIM_WIN_ESPRESSIF_DIR + File.separator + "tools" + File.separator; //$NON-NLS-1$

String EIM_WIN_PATH = EIM_WIN_DIR + EIM_JSON;

String EIM_URL = "https://dl.espressif.com/dl/eim/"; //$NON-NLS-1$

String EIM_POSIX_PATH = EIM_POSIX_DIR + EIM_JSON;

String INSTALL_TOOLS_FLAG = "INSTALL_TOOLS_FLAG"; //$NON-NLS-1$

String TOOL_SET_CONFIG_LEGACY_CONFIG_FILE = "tool_set_config.json"; //$NON-NLS-1$

String OLD_CONFIG_EXPORTED_FLAG = "OLD_CONFIG_EXPORTED_FLAG"; //$NON-NLS-1$

String USER_EIM_DIR = Paths.get(System.getProperty("user.home"), ".espressif", "eim_gui").toString(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

}
Loading
Loading