Skip to content

Conversation

roulpriya
Copy link
Contributor

@roulpriya roulpriya commented Aug 13, 2025

Feature Issue #1778

Description

  • Install a new toolchain when the user selects a toolchain version from the quickPick.
  • Linux-Specific Post-Install Handling:
    • Post-install file processing only occurs on Linux platforms
  • Allow-list based validation for Linux package manager commands
  • User Confirmation with Summary
  • Uses pkexec on Linux for privilege elevation

Issue: 1778

Tasks

  • Required tests have been written
  • Documentation has been updated
  • Added an entry to CHANGELOG.md if applicable

@roulpriya
Copy link
Contributor Author

image

@roulpriya roulpriya force-pushed the installing-swiftly-toolchain branch 3 times, most recently from 845d30a to 3b13b09 Compare August 15, 2025 06:43
@roulpriya roulpriya marked this pull request as ready for review August 15, 2025 06:44
Copy link
Member

@matthewbastien matthewbastien left a comment

Choose a reason for hiding this comment

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

Looking really good so far! Here are some things I noticed while testing this out locally:

  • The toolchain selection dialog is getting really big with this change. I think it makes more sense to make the Swiftly install a separate VS Code command and add it as an action to the toolchain selection dialog. Toolchain selection is more about switching between already installed toolchains anyway.
  • Toolchains should be ordered most recent first rather than earliest. E.g. 6.1.1 should be at the top.

@matthewbastien matthewbastien self-requested a review August 18, 2025 12:52
): Promise<void> {
logger?.info(`Executing post-install script for toolchain ${version}`);

const outputChannel = new SwiftOutputChannel(
Copy link
Contributor

Choose a reason for hiding this comment

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

question: was this a suggestion from someone? Not sure if we want to open a new output channel, but at very least wouldn't we want this to be in our log folder so it's archived?

Copy link
Contributor

Choose a reason for hiding this comment

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

ya still don't think we'd want to create an output channel for each install, they're meant to be longer term, not just quicker operations. We could have a single "Swiftly" output channel we share between installs though

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added a temporary vscode.window.createOutputChannel, we will not log it.

@roulpriya roulpriya force-pushed the installing-swiftly-toolchain branch from 5cd66b3 to 76f3df7 Compare August 21, 2025 03:15
Copy link
Contributor

@award999 award999 left a comment

Choose a reason for hiding this comment

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

Looking good, some smaller things

@@ -111,6 +115,8 @@ export enum Commands {
OPEN_MANIFEST = "swift.openManifest",
RESTART_LSP = "swift.restartLSPServer",
SELECT_TOOLCHAIN = "swift.selectToolchain",
INSTALL_SWIFTLY_TOOLCHAIN = "swift.installSwiftlyToolchain",
INSTALL_SWIFTLY_SNAPSHOT_TOOLCHAIN = "swift.installSwiftlySnapshotToolchain",
Copy link
Contributor

Choose a reason for hiding this comment

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

question: Seems like this command was not registered in the package.json above?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I missed adding, but it still shows up in the command palette, which I'm not sure how. I have added it.

const quickPickItems = sortedToolchains.map(toolchain => ({
label: `$(cloud-download) ${toolchain.version.name}`,
description: "snapshot",
detail: `Install snapshot version • Date: ${toolchain.version.type === "snapshot" ? toolchain.version.date || "Unknown" : "Unknown"} • Branch: ${toolchain.version.type === "snapshot" ? toolchain.version.branch || "Unknown" : "Unknown"}`,
Copy link
Contributor

Choose a reason for hiding this comment

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

question: If the VSCode window is smaller, does it start to truncate this?
suggestion: Since the command is "Install Snapshot Toolchain..." we can drop "Install snapshot version" and just have "Date: • Branch: "

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, this makes more sense.

): Promise<void> {
logger?.info(`Executing post-install script for toolchain ${version}`);

const outputChannel = new SwiftOutputChannel(
Copy link
Contributor

Choose a reason for hiding this comment

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

ya still don't think we'd want to create an output channel for each install, they're meant to be longer term, not just quicker operations. We could have a single "Swiftly" output channel we share between installs though

@roulpriya roulpriya force-pushed the installing-swiftly-toolchain branch 3 times, most recently from 80b67fe to a1515c6 Compare August 25, 2025 16:43
@roulpriya roulpriya force-pushed the installing-swiftly-toolchain branch from a1515c6 to 9ef0ecf Compare August 26, 2025 14:38
@award999 award999 self-requested a review August 26, 2025 14:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants