Skip to content

Add detecting and tagging VSCode builds #384

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

Merged
merged 5 commits into from
May 9, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ out/
build/
target/
*.DS_Store
.vscode/
bin/
12 changes: 12 additions & 0 deletions src/main/java/com/gradle/CustomBuildScanEnhancements.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ final class CustomBuildScanEnhancements {
private static final String PROJECT_PROP_ANDROID_STUDIO_VERSION = "android.studio.version";
private static final String SYSTEM_PROP_ECLIPSE_BUILD_ID = "eclipse.buildId";
private static final String SYSTEM_PROP_IDEA_SYNC_ACTIVE = "idea.sync.active";
private static final String ENV_VAR_VSCODE_PID = "VSCODE_PID";

private final DevelocityAdapter develocity;
private final BuildScanAdapter buildScan;
Expand Down Expand Up @@ -98,6 +99,7 @@ private void captureIde() {
ideProperties.put(PROJECT_PROP_ANDROID_STUDIO_VERSION, firstOrElseSecond(providers, gradlePropertyProvider(PROJECT_PROP_ANDROID_STUDIO_VERSION, gradle, providers), gradlePropertyProvider(PROJECT_PROP_ANDROID_STUDIO_VERSION_LEGACY, gradle, providers)));
ideProperties.put(SYSTEM_PROP_ECLIPSE_BUILD_ID, systemPropertyProvider(SYSTEM_PROP_ECLIPSE_BUILD_ID, providers));
ideProperties.put(SYSTEM_PROP_IDEA_SYNC_ACTIVE, systemPropertyProvider(SYSTEM_PROP_IDEA_SYNC_ACTIVE, providers));
ideProperties.put(ENV_VAR_VSCODE_PID, environmentPropertyProvider(ENV_VAR_VSCODE_PID, providers));

// Process data at execution time to ensure property initialization
buildScan.buildFinished(new CaptureIdeMetadataAction(buildScan, ideProperties));
Expand Down Expand Up @@ -132,6 +134,8 @@ public void execute(BuildResultAdapter buildResult) {
tagIde("IntelliJ IDEA", props.get(SYSTEM_PROP_IDEA_VERSION).get());
} else if (props.get(SYSTEM_PROP_ECLIPSE_BUILD_ID).isPresent()) {
tagIde("Eclipse", props.get(SYSTEM_PROP_ECLIPSE_BUILD_ID).get());
} else if (props.get(ENV_VAR_VSCODE_PID).isPresent()) {
tagIde("VSCode", "");
Copy link
Member

Choose a reason for hiding this comment

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

Are we certain VSCode provides no version information that we can access?

Copy link
Member

@gabrielfeo gabrielfeo Apr 21, 2025

Choose a reason for hiding this comment

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

If Clay's suggestion is to register VS Code version information, I think the "Gradle for Java" extension version would also be relevant.

Copy link
Member Author

@ribafish ribafish Apr 22, 2025

Choose a reason for hiding this comment

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

That would all be great and all, but we don't have that info. Here is a scan with all the env vars, sys props, and proj props printed out (diff).. And no version information.

The VS Code I built this with is v 1.99.3, closest info I can find is VSCODE_IPC_HOOK, but I wouldn't base that info off a path, which can probably be changed in a future version / OS... plus, it doesn't even give us the full version.

As for the "Gradle for Java" extension, this was built with 3.16.4, which does appear in 4 places in the above scan, but it's always in a path, which can again probably be changed.

But if you can find either the VSCode version or the "Gradle for Java" extension version that's "stable", I'm all for it 😄 .

Copy link
Member

Choose a reason for hiding this comment

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

How about parsing code --version?

Copy link
Member

Choose a reason for hiding this comment

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

There's also code --list-extensions --show-versions for extensions.

Copy link
Member Author

Choose a reason for hiding this comment

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

@erichaagdev, are you sure that code is always set up for cli usage?

Copy link
Member

Choose a reason for hiding this comment

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

I wouldn't say "always", but I was under the impression it comes with the main app installation by default.

Copy link
Member

Choose a reason for hiding this comment

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

Visual Studio Code has a powerful command-line interface built-in that lets you control how you launch the editor. You can open files, install extensions, change the display language, and output diagnostics through command-line options (switches).

https://code.visualstudio.com/docs/configure/command-line

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes, however:

Note: Users on macOS must first run a command (Shell Command: Install 'code' command in PATH) to add VS Code executable to the PATH environment variable. Read the macOS setup guide for help.

Windows and Linux installations should add the VS Code binaries location to your system path. If this isn't the case, you can manually add the location to the Path environment variable ($PATH on Linux). For example, on Windows, the default VS Code binaries location is AppData\Local\Programs\Microsoft VS Code\bin. To review platform-specific setup instructions, see Setup.

Insiders: If you are using the VS Code Insiders preview, you launch your Insiders build with code-insiders.

Copy link
Member Author

Choose a reason for hiding this comment

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

I'm happy to add this and we can just do best effort here, if that's what we want to do. Perhaps best if we discuss it on our sync.

} else {
buildScan.tag("Cmd Line");
}
Expand Down Expand Up @@ -565,4 +569,12 @@ private static <T> Provider<T> firstOrElseSecond(ProviderFactory providers, Prov
}
}

private static Provider<String> environmentPropertyProvider(String name, ProviderFactory providers) {
if (isGradle61OrNewer()) {
return providers.environmentVariable(name);
} else {
return providers.provider(() -> System.getenv(name));
}
}

}