Skip to content

Commit 22a1cd8

Browse files
committed
Do not automatically detect JVMs on CI systems
Automatic detection on CI systems can cause a lot of trouble (e.g. memory consumption, time to read the jvms, old jvms lingering around) and is generally not useful as a CI has usually a dedicated and fixed setup to run with. This adds a check for the common 'CI' environment variable that is usually defined by all usual CI/CD pipelines to indicate a job is running on a CI server to skip the detection regardless of preferences configuration. If one absolutely want the feature even for CI, the system-property 'DetectVMInstallationsJob.disabled' can be set to false to restore previous behavior.
1 parent 5b7b412 commit 22a1cd8

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DetectVMInstallationsJob.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,20 @@
4646
*/
4747
public class DetectVMInstallationsJob extends Job {
4848

49+
/**
50+
* CI is a common variable defined in CI/CDI servers like Jenkins, Gitlab, Github, ... to indicate it is a CI environment
51+
*/
52+
private static final String ENV_CI = "CI"; //$NON-NLS-1$
53+
/**
54+
* Property that can be defined to control general behavior
55+
* <ul>
56+
* <li><code>DetectVMInstallationsJob.disabled = true</code> - automatic discovery is always disabled</li>
57+
* <li><code>DetectVMInstallationsJob.disabled = false</code> - check runs everywhere depending on preferences</li>
58+
* <li><code>DetectVMInstallationsJob.disabled</code> not specified - automatic discovery is disabled if environment variable <code>CI</code> has
59+
* value <code>true</code> otherwise runs depending on preferences</li>
60+
* </pre>
61+
*/
62+
private static final String PROPERTY_DETECT_VM_INSTALLATIONS_JOB_DISABLED = "DetectVMInstallationsJob.disabled"; //$NON-NLS-1$
4963
private static final Object FAMILY = DetectVMInstallationsJob.class;
5064

5165
public DetectVMInstallationsJob() {
@@ -222,11 +236,19 @@ public boolean belongsTo(Object family) {
222236
}
223237

224238
public static void initialize() {
225-
boolean forcedDisableVMDetection = Boolean.getBoolean("DetectVMInstallationsJob.disabled"); //$NON-NLS-1$
239+
if (Boolean.getBoolean(PROPERTY_DETECT_VM_INSTALLATIONS_JOB_DISABLED)) {
240+
// early exit no need to read preferences or check env variable!
241+
return;
242+
}
243+
if (System.getProperty(PROPERTY_DETECT_VM_INSTALLATIONS_JOB_DISABLED) == null && Boolean.parseBoolean(System.getenv(ENV_CI))) {
244+
// exit because no explicit value for the property was given and we are running in a CI environment
245+
return;
246+
}
247+
// finally look what is defined in the preferences
226248
IEclipsePreferences instanceNode = InstanceScope.INSTANCE.getNode(LaunchingPlugin.getDefault().getBundle().getSymbolicName());
227249
IEclipsePreferences defaultNode = DefaultScope.INSTANCE.getNode(LaunchingPlugin.getDefault().getBundle().getSymbolicName());
228250
boolean defaultValue = defaultNode.getBoolean(LaunchingPlugin.PREF_DETECT_VMS_AT_STARTUP, true);
229-
if (!forcedDisableVMDetection && instanceNode.getBoolean(LaunchingPlugin.PREF_DETECT_VMS_AT_STARTUP, defaultValue)) {
251+
if (instanceNode.getBoolean(LaunchingPlugin.PREF_DETECT_VMS_AT_STARTUP, defaultValue)) {
230252
new DetectVMInstallationsJob().schedule();
231253
}
232254
}

0 commit comments

Comments
 (0)