coder / code-server

VS Code in the browser
https://coder.com
MIT License
67.58k stars 5.54k forks source link

[Bug]: Not apparently possible to install multiple extensions from config file #6149

Open tomqwpl opened 1 year ago

tomqwpl commented 1 year ago

Is there an existing issue for this?

OS/Web Information

Steps to Reproduce

Attempting to run code-server with a config file such as:

install-extension:
  - extension.number1
  - extension.number2

This fails with (e.g):

Installing extensions...
Extension 'ms-python.python,ms-vscode.makefile-tools' not found.
Make sure you use the full extension ID, including the publisher, e.g.: ms-dotnettools.csharp
Failed Installing Extensions: ms-python.python,ms-vscode.makefile-tools

The problem seems to be in the conversion of the config file into command line arguments:

  const configFileArgv = Object.entries(config).map(([optName, opt]) => {
    if (opt === true) {
      return `--${optName}`
    }
    return `--${optName}=${opt}`
  })

My guess is that there "opt" is a []string, so it ends up constructing "--install-extension=extension.number1,extension.number2"

Expected

Both extensions should be installed in the same way as if multiple install-extension command line arguments were passed

Actual

code-server errors on startup.

Logs

No response

Screenshot/Video

No response

Does this issue happen in VS Code or GitHub Codespaces?

Are you accessing code-server over HTTPS?

Notes

No response

code-asher commented 1 year ago

Oh right the parser expects the flag to repeat --install-extension <id> --install-extension <id> but duplicated keys are not possible in yaml. We should support splitting on commas for sure.

code-asher commented 1 year ago

Although maybe just handling arrays in configFileArgv would be better. Comma split would be nice since then we could use it on the command line as well since the repeating flag syntax is a bit unwieldy.