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

win,msi: install tools for native modules #22645

Closed
wants to merge 3 commits into
base: master
from

Conversation

Projects
None yet
@joaocgreis
Member

joaocgreis commented Sep 1, 2018

Add a dialog during installation with information about native modules that can optionally run a Boxstarter script at the end of the installation. This script can also be run from Start menu.

Adding semver-minor since this is adding a new feature. Not semver-major since this should not break anything (I tested upgrading).

Fixes: #22311

cc @nodejs/platform-windows

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • commit message follows commit guidelines
win,msi: install tools for native modules
Add a dialog during installation with information about native
modules that can optionally run a Boxstarter script at the end of the
installation. This script can also be run from Start menu.

Fixes: #22311
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="Intro" Type="Text" X="20" Y="65" Width="330" Height="30" NoPrefix="yes" Text="!(loc.NativeToolsDlgIntro)" />
<Control Id="InstallCheckbox" Type="CheckBox" X="20" Y="105" Width="330" Height="30" Property="NATIVETOOLSCHECKBOX" CheckBoxValue="1" Text="!(loc.NativeToolsDlgInstallCheckbox)" />

This comment has been minimized.

@refack

refack Sep 2, 2018

Member

Does CheckBoxValue="1" mean this is enabled by default?

@refack

refack Sep 2, 2018

Member

Does CheckBoxValue="1" mean this is enabled by default?

This comment has been minimized.

@joaocgreis

joaocgreis Sep 2, 2018

Member

No (but it's certainly confusing!). It means that the property NATIVETOOLSCHECKBOX will be assigned the value 1 when the checkbox is checked.

@joaocgreis

joaocgreis Sep 2, 2018

Member

No (but it's certainly confusing!). It means that the property NATIVETOOLSCHECKBOX will be assigned the value 1 when the checkbox is checked.

@joaocgreis

This comment has been minimized.

Show comment
Hide comment
@joaocgreis

joaocgreis Sep 2, 2018

Member

@jdalton updated for https. This follows the instructions at https://boxstarter.org/Learn/WebLauncher. The script comes from https://github.com/chocolatey/boxstarter/blob/master/BuildScripts/bootstrapper.ps1, but since this is an external tool, shouldn't we be using their published and stable version?

Member

joaocgreis commented Sep 2, 2018

@jdalton updated for https. This follows the instructions at https://boxstarter.org/Learn/WebLauncher. The script comes from https://github.com/chocolatey/boxstarter/blob/master/BuildScripts/bootstrapper.ps1, but since this is an external tool, shouldn't we be using their published and stable version?

@jdalton

This comment has been minimized.

Show comment
Hide comment
@jdalton

jdalton Sep 2, 2018

Member

@joaocgreis

Ah nice! They have tagged stable versions too. Are those tags exposed via the web address?

Member

jdalton commented Sep 2, 2018

@joaocgreis

Ah nice! They have tagged stable versions too. Are those tags exposed via the web address?

@joaocgreis

This comment has been minimized.

Show comment
Hide comment
@joaocgreis

joaocgreis Sep 2, 2018

Member

@jdalton not that I know of... There is https://github.com/chocolatey/boxstarter/releases/latest, but I don't know of an easy way to access the files from there.

I'm not sure I understand your issue with using the Boxstarter site directly. We're trusting an external tool, Boxstarter (and Chocolatey), and it'll run a lot more scripts when installing the tools. It's a well established tool, so I believe this makes sense. If the issue is about their website getting hacked, isn't that also a concern with GitHub or the Chocolatey packages themselves?

Member

joaocgreis commented Sep 2, 2018

@jdalton not that I know of... There is https://github.com/chocolatey/boxstarter/releases/latest, but I don't know of an easy way to access the files from there.

I'm not sure I understand your issue with using the Boxstarter site directly. We're trusting an external tool, Boxstarter (and Chocolatey), and it'll run a lot more scripts when installing the tools. It's a well established tool, so I believe this makes sense. If the issue is about their website getting hacked, isn't that also a concern with GitHub or the Chocolatey packages themselves?

@jdalton

This comment has been minimized.

Show comment
Hide comment
@jdalton

jdalton Sep 2, 2018

Member

@joaocgreis

You're right that it's going to be pulling in plenty of other dependencies. I was just curious mostly. The switch to https is win though, so thanks!

\cc @ferventcoder as the creator/lead of Chocolatey and the publisher of Node releases on Chocolatey. This PR is introducing the use of chocolatey/boxstarter so also pinging @mwrock for visibility.

Member

jdalton commented Sep 2, 2018

@joaocgreis

You're right that it's going to be pulling in plenty of other dependencies. I was just curious mostly. The switch to https is win though, so thanks!

\cc @ferventcoder as the creator/lead of Chocolatey and the publisher of Node releases on Chocolatey. This PR is introducing the use of chocolatey/boxstarter so also pinging @mwrock for visibility.

@BridgeAR

This comment has been minimized.

Show comment
Hide comment
Member

BridgeAR commented Sep 5, 2018

Show outdated Hide outdated tools/msvs/msi/i18n/en-us.wxl Outdated
@richardlau

This comment has been minimized.

Show comment
Hide comment
@richardlau

richardlau Sep 5, 2018

Member

For reference, this is what the additional dialog looks like (with the installer from the test build link in #22645 (comment)):

image

Member

richardlau commented Sep 5, 2018

For reference, this is what the additional dialog looks like (with the installer from the test build link in #22645 (comment)):

image

@targos

This comment has been minimized.

Show comment
Hide comment
@targos

targos Sep 5, 2018

Member

What happens if Visual Studio is already installed and one checks the box?

Member

targos commented Sep 5, 2018

What happens if Visual Studio is already installed and one checks the box?

@joaocgreis

This comment has been minimized.

Show comment
Hide comment
@joaocgreis

joaocgreis Sep 5, 2018

Member

@richardlau updated, thanks!

@targos VS2017 supports installations of different VS editions side by side. So this should just install the VS Build Tools or update with the required components if already installed.

Member

joaocgreis commented Sep 5, 2018

@richardlau updated, thanks!

@targos VS2017 supports installations of different VS editions side by side. So this should just install the VS Build Tools or update with the required components if already installed.

@joaocgreis

This comment has been minimized.

Show comment
Hide comment
@joaocgreis

joaocgreis Sep 5, 2018

Member

Updated screenshots:

2018-09-05 17_40_09-node js setup

2018-09-05 17_46_38-c__windows_system32_cmd exe

Member

joaocgreis commented Sep 5, 2018

Updated screenshots:

2018-09-05 17_40_09-node js setup

2018-09-05 17_46_38-c__windows_system32_cmd exe

@richardlau

This comment has been minimized.

Show comment
Hide comment
@richardlau

richardlau Sep 5, 2018

Member

FWIW the installer isn't built by the regular PR CI's but João did a test build in #22645 (comment) and I have separately built the installer locally with the current changes for this PR with Visual Studio 2017 and WiX Toolset 3.11.1.

Tested the dialog pops up as expected, that the link to https://github.com/nodejs/node-gyp#on-windows works and the batch file starts at the end of the installation (if the checkbox is ticked) and from the Start menu link (both times I closed the Window to cancel as I didn't want to make changes to my development machine).

Member

richardlau commented Sep 5, 2018

FWIW the installer isn't built by the regular PR CI's but João did a test build in #22645 (comment) and I have separately built the installer locally with the current changes for this PR with Visual Studio 2017 and WiX Toolset 3.11.1.

Tested the dialog pops up as expected, that the link to https://github.com/nodejs/node-gyp#on-windows works and the batch file starts at the end of the installation (if the checkbox is ticked) and from the Start menu link (both times I closed the Window to cancel as I didn't want to make changes to my development machine).

joaocgreis added a commit that referenced this pull request Sep 12, 2018

win,msi: install tools for native modules
Add a dialog during installation with information about native
modules that can optionally run a Boxstarter script at the end of the
installation. This script can also be run from Start menu.

Fixes: #22311
PR-URL: #22645
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
@joaocgreis

This comment has been minimized.

Show comment
Hide comment
@joaocgreis

joaocgreis Sep 12, 2018

Member

Landed in 3993793

Thanks @richardlau!

Member

joaocgreis commented Sep 12, 2018

Landed in 3993793

Thanks @richardlau!

@joaocgreis

This comment has been minimized.

Show comment
Hide comment
@joaocgreis

joaocgreis Sep 26, 2018

Member

@targos I removed the don't land label. This goes together with #23003 , #22988 and #23044 .

Test build of the current master with all 4 PRs: https://nodejs.org/download/test/v11.0.0-test20180926d6a6df9ece/

Member

joaocgreis commented Sep 26, 2018

@targos I removed the don't land label. This goes together with #23003 , #22988 and #23044 .

Test build of the current master with all 4 PRs: https://nodejs.org/download/test/v11.0.0-test20180926d6a6df9ece/

@targos targos removed this from Don't land (for now) in v10.x Sep 27, 2018

targos added a commit that referenced this pull request Sep 27, 2018

win,msi: install tools for native modules
Add a dialog during installation with information about native
modules that can optionally run a Boxstarter script at the end of the
installation. This script can also be run from Start menu.

Fixes: #22311
PR-URL: #22645
Reviewed-By: Richard Lau <riclau@uk.ibm.com>

targos added a commit that referenced this pull request Sep 27, 2018

win,msi: highlight installation of 3rd-party tools
Currently, the installation wizard more or less silently installs
third-party software (Boxstarter + Chocolatey). This adds some text
to the MSI installation dialog and to the Boxstarter installation
script.

PR-URL: #23003
Refs: #22645
Refs: #22988
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: João Reis <reis@janeasystems.com>

targos added a commit that referenced this pull request Sep 27, 2018

win,msi: install Boxstarter from elevated shell
Boxstarter asks for elevation to install packages, but not to install
Boxstarter itself. Thus, run all the commands from an elevated
PowerShell.

Refs: #22645
PR-URL: #22988
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
@ferventcoder

This comment has been minimized.

Show comment
Hide comment
@ferventcoder

ferventcoder Oct 1, 2018

For Chocolatey community maintainer folks visibility - @gep13 / @pauby

ferventcoder commented Oct 1, 2018

For Chocolatey community maintainer folks visibility - @gep13 / @pauby

targos added a commit that referenced this pull request Oct 7, 2018

2018-10-XX, Version 10.12.0 (Current)
Notable changes:

* assert
  * The diff output is now a tiny bit improved by sorting object
    properties when inspecting the values that are compared with each
    other. #22788
* cli
  * The options parser now normalizes `_` to `-` in all multi-word
    command-line flags, e.g. `--no_warnings` has the same effect as
    `--no-warnings`. #23020
  * Added bash completion for the `node` binary. To generate a bash
    completion script, run `node --completion-bash`. The output can be
    saved to a file which can be sourced to enable completion.
    #20713
* crypto
  * Added support for PEM-level encryption.
    #23151
  * Added an API asymmetric key pair generation. The new methods
    `crypto.generateKeyPair` and `crypto.generateKeyPairSync` can be
    used to generate public and private key pairs. The API supports
    RSA, DSA and EC and a variety of key encodings (both PEM and DER).
    #22660
* fs
  * Added a `recursive` option to `fs.mkdir` and `fs.mkdirSync`. If
    this option is set to true, non-existing parent folders will be
    automatically created. #21875
* http2
  * Added a `'ping'` event to `Http2Session` that is emitted whenever a
    non-ack `PING` is received.
    #23009
  * Added support for the `ORIGIN` frame.
    #22956
* module
  * Added `module.createRequireFromPath(filename)`. This new method can
    be used to create a custom require function that will resolve
    modules relative to the filename path.
    #19360
* process
  * Added a `'multipleResolves'` process event that is emitted whenever
    a `Promise` is attempted to be resolved multiple times, e.g. if the
    `resolve` and `reject` functions are both called in a `Promise`
    executor. #22218
* **url**
  * Added `url.fileURLToPath(url)` and `url.pathToFileURL(path)`. These
    methods can be used to correctly convert between file: URLs and
    absolute paths. #22506
* **util**
  * Added the `sorted` option to `util.inspect()`. If set to `true`,
    all properties of an object and Set and Map entries will be sorted
    in the returned string. If set to a function, it is used as a
    compare function. #22788
  * The `util.instpect.custom` symbol is now defined in the global
    symbol registry as `Symbol.for('nodejs.util.inspect.custom')`.
    #20857
* **Windows**
  * The Windows msi installer now provides an option to automatically
    install the tools required to build native modules.
    #22645
* **Added new collaborators**:
  * digitalinfinity - Hitesh Kanwathirtha

@targos targos referenced this pull request Oct 7, 2018

Merged

Release proposal: v10.12.0 #23313

targos added a commit that referenced this pull request Oct 7, 2018

2018-10-XX, Version 10.12.0 (Current)
Notable changes:

* assert
  * The diff output is now a tiny bit improved by sorting object
    properties when inspecting the values that are compared with each
    other. #22788
* cli
  * The options parser now normalizes `_` to `-` in all multi-word
    command-line flags, e.g. `--no_warnings` has the same effect as
    `--no-warnings`. #23020
  * Added bash completion for the `node` binary. To generate a bash
    completion script, run `node --completion-bash`. The output can be
    saved to a file which can be sourced to enable completion.
    #20713
* crypto
  * Added support for PEM-level encryption.
    #23151
  * Added an API asymmetric key pair generation. The new methods
    `crypto.generateKeyPair` and `crypto.generateKeyPairSync` can be
    used to generate public and private key pairs. The API supports
    RSA, DSA and EC and a variety of key encodings (both PEM and DER).
    #22660
* fs
  * Added a `recursive` option to `fs.mkdir` and `fs.mkdirSync`. If
    this option is set to true, non-existing parent folders will be
    automatically created. #21875
* http2
  * Added a `'ping'` event to `Http2Session` that is emitted whenever a
    non-ack `PING` is received.
    #23009
  * Added support for the `ORIGIN` frame.
    #22956
* module
  * Added `module.createRequireFromPath(filename)`. This new method can
    be used to create a custom require function that will resolve
    modules relative to the filename path.
    #19360
* process
  * Added a `'multipleResolves'` process event that is emitted whenever
    a `Promise` is attempted to be resolved multiple times, e.g. if the
    `resolve` and `reject` functions are both called in a `Promise`
    executor. #22218
* **url**
  * Added `url.fileURLToPath(url)` and `url.pathToFileURL(path)`. These
    methods can be used to correctly convert between file: URLs and
    absolute paths. #22506
* **util**
  * Added the `sorted` option to `util.inspect()`. If set to `true`,
    all properties of an object and Set and Map entries will be sorted
    in the returned string. If set to a function, it is used as a
    compare function. #22788
  * The `util.instpect.custom` symbol is now defined in the global
    symbol registry as `Symbol.for('nodejs.util.inspect.custom')`.
    #20857
* **Windows**
  * The Windows msi installer now provides an option to automatically
    install the tools required to build native modules.
    #22645
* **Added new collaborators**:
  * digitalinfinity - Hitesh Kanwathirtha

PR-URL: #23313

targos added a commit that referenced this pull request Oct 10, 2018

2018-10-10, Version 10.12.0 (Current)
Notable changes:

* assert
  * The diff output is now a tiny bit improved by sorting object
    properties when inspecting the values that are compared with each
    other. #22788
* cli
  * The options parser now normalizes `_` to `-` in all multi-word
    command-line flags, e.g. `--no_warnings` has the same effect as
    `--no-warnings`. #23020
  * Added bash completion for the `node` binary. To generate a bash
    completion script, run `node --completion-bash`. The output can be
    saved to a file which can be sourced to enable completion.
    #20713
* crypto
  * Added support for PEM-level encryption.
    #23151
  * Added an API asymmetric key pair generation. The new methods
    `crypto.generateKeyPair` and `crypto.generateKeyPairSync` can be
    used to generate public and private key pairs. The API supports
    RSA, DSA and EC and a variety of key encodings (both PEM and DER).
    #22660
* fs
  * Added a `recursive` option to `fs.mkdir` and `fs.mkdirSync`. If
    this option is set to true, non-existing parent folders will be
    automatically created. #21875
* http2
  * Added a `'ping'` event to `Http2Session` that is emitted whenever a
    non-ack `PING` is received.
    #23009
  * Added support for the `ORIGIN` frame.
    #22956
  * Updated nghttp2 to 1.34.0. This adds RFC 8441 extended connect
    protocol support to allow use of WebSockets over HTTP/2.
    #23284
* module
  * Added `module.createRequireFromPath(filename)`. This new method can
    be used to create a custom require function that will resolve
    modules relative to the filename path.
    #19360
* process
  * Added a `'multipleResolves'` process event that is emitted whenever
    a `Promise` is attempted to be resolved multiple times, e.g. if the
    `resolve` and `reject` functions are both called in a `Promise`
    executor. #22218
* url
  * Added `url.fileURLToPath(url)` and `url.pathToFileURL(path)`. These
    methods can be used to correctly convert between file: URLs and
    absolute paths. #22506
* util
  * Added the `sorted` option to `util.inspect()`. If set to `true`,
    all properties of an object and Set and Map entries will be sorted
    in the returned string. If set to a function, it is used as a
    compare function. #22788
  * The `util.instpect.custom` symbol is now defined in the global
    symbol registry as `Symbol.for('nodejs.util.inspect.custom')`.
    #20857
  * Added support for `BigInt` numbers in `util.format()`.
    #22097
* V8 API
  * A number of V8 C++ APIs have been marked as deprecated since they
    have been removed in the upstream repository. Replacement APIs
    are added where necessary. #23159
* Windows
  * The Windows msi installer now provides an option to automatically
    install the tools required to build native modules.
    #22645
* Workers
  * Debugging support for Workers using the DevTools protocol has been
    implemented. #21364
  * The public `inspector` module is now enabled in Workers.
    #22769
* Added new collaborators:
  * digitalinfinity - Hitesh Kanwathirtha

PR-URL: #23313

targos added a commit that referenced this pull request Oct 10, 2018

2018-10-10, Version 10.12.0 (Current)
Notable changes:

* assert
  * The diff output is now a tiny bit improved by sorting object
    properties when inspecting the values that are compared with each
    other. #22788
* cli
  * The options parser now normalizes `_` to `-` in all multi-word
    command-line flags, e.g. `--no_warnings` has the same effect as
    `--no-warnings`. #23020
  * Added bash completion for the `node` binary. To generate a bash
    completion script, run `node --completion-bash`. The output can be
    saved to a file which can be sourced to enable completion.
    #20713
* crypto
  * Added support for PEM-level encryption.
    #23151
  * Added an API asymmetric key pair generation. The new methods
    `crypto.generateKeyPair` and `crypto.generateKeyPairSync` can be
    used to generate public and private key pairs. The API supports
    RSA, DSA and EC and a variety of key encodings (both PEM and DER).
    #22660
* fs
  * Added a `recursive` option to `fs.mkdir` and `fs.mkdirSync`. If
    this option is set to true, non-existing parent folders will be
    automatically created. #21875
* http2
  * Added a `'ping'` event to `Http2Session` that is emitted whenever a
    non-ack `PING` is received.
    #23009
  * Added support for the `ORIGIN` frame.
    #22956
  * Updated nghttp2 to 1.34.0. This adds RFC 8441 extended connect
    protocol support to allow use of WebSockets over HTTP/2.
    #23284
* module
  * Added `module.createRequireFromPath(filename)`. This new method can
    be used to create a custom require function that will resolve
    modules relative to the filename path.
    #19360
* process
  * Added a `'multipleResolves'` process event that is emitted whenever
    a `Promise` is attempted to be resolved multiple times, e.g. if the
    `resolve` and `reject` functions are both called in a `Promise`
    executor. #22218
* url
  * Added `url.fileURLToPath(url)` and `url.pathToFileURL(path)`. These
    methods can be used to correctly convert between file: URLs and
    absolute paths. #22506
* util
  * Added the `sorted` option to `util.inspect()`. If set to `true`,
    all properties of an object and Set and Map entries will be sorted
    in the returned string. If set to a function, it is used as a
    compare function. #22788
  * The `util.instpect.custom` symbol is now defined in the global
    symbol registry as `Symbol.for('nodejs.util.inspect.custom')`.
    #20857
  * Added support for `BigInt` numbers in `util.format()`.
    #22097
* V8 API
  * A number of V8 C++ APIs have been marked as deprecated since they
    have been removed in the upstream repository. Replacement APIs
    are added where necessary. #23159
* Windows
  * The Windows msi installer now provides an option to automatically
    install the tools required to build native modules.
    #22645
* Workers
  * Debugging support for Workers using the DevTools protocol has been
    implemented. #21364
  * The public `inspector` module is now enabled in Workers.
    #22769
* Added new collaborators:
  * digitalinfinity - Hitesh Kanwathirtha

PR-URL: #23313

targos added a commit that referenced this pull request Oct 10, 2018

2018-10-10, Version 10.12.0 (Current)
Notable changes:

* assert
  * The diff output is now a tiny bit improved by sorting object
    properties when inspecting the values that are compared with each
    other. #22788
* cli
  * The options parser now normalizes `_` to `-` in all multi-word
    command-line flags, e.g. `--no_warnings` has the same effect as
    `--no-warnings`. #23020
  * Added bash completion for the `node` binary. To generate a bash
    completion script, run `node --completion-bash`. The output can be
    saved to a file which can be sourced to enable completion.
    #20713
* crypto
  * Added support for PEM-level encryption.
    #23151
  * Added an API asymmetric key pair generation. The new methods
    `crypto.generateKeyPair` and `crypto.generateKeyPairSync` can be
    used to generate public and private key pairs. The API supports
    RSA, DSA and EC and a variety of key encodings (both PEM and DER).
    #22660
* fs
  * Added a `recursive` option to `fs.mkdir` and `fs.mkdirSync`. If
    this option is set to true, non-existing parent folders will be
    automatically created. #21875
* http2
  * Added a `'ping'` event to `Http2Session` that is emitted whenever a
    non-ack `PING` is received.
    #23009
  * Added support for the `ORIGIN` frame.
    #22956
  * Updated nghttp2 to 1.34.0. This adds RFC 8441 extended connect
    protocol support to allow use of WebSockets over HTTP/2.
    #23284
* module
  * Added `module.createRequireFromPath(filename)`. This new method can
    be used to create a custom require function that will resolve
    modules relative to the filename path.
    #19360
* process
  * Added a `'multipleResolves'` process event that is emitted whenever
    a `Promise` is attempted to be resolved multiple times, e.g. if the
    `resolve` and `reject` functions are both called in a `Promise`
    executor. #22218
* url
  * Added `url.fileURLToPath(url)` and `url.pathToFileURL(path)`. These
    methods can be used to correctly convert between file: URLs and
    absolute paths. #22506
* util
  * Added the `sorted` option to `util.inspect()`. If set to `true`,
    all properties of an object and Set and Map entries will be sorted
    in the returned string. If set to a function, it is used as a
    compare function. #22788
  * The `util.instpect.custom` symbol is now defined in the global
    symbol registry as `Symbol.for('nodejs.util.inspect.custom')`.
    #20857
  * Added support for `BigInt` numbers in `util.format()`.
    #22097
* V8 API
  * A number of V8 C++ APIs have been marked as deprecated since they
    have been removed in the upstream repository. Replacement APIs
    are added where necessary. #23159
* Windows
  * The Windows msi installer now provides an option to automatically
    install the tools required to build native modules.
    #22645
* Workers
  * Debugging support for Workers using the DevTools protocol has been
    implemented. #21364
  * The public `inspector` module is now enabled in Workers.
    #22769
* Added new collaborators:
  * digitalinfinity - Hitesh Kanwathirtha

PR-URL: #23313
@oliversalzburg

This comment has been minimized.

Show comment
Hide comment
@oliversalzburg

oliversalzburg Oct 11, 2018

Contributor

Why not npm install windows-build-tools? Seems like that would be a much more obvious choice than the choco approach taken here.

Contributor

oliversalzburg commented Oct 11, 2018

Why not npm install windows-build-tools? Seems like that would be a much more obvious choice than the choco approach taken here.

@joaocgreis

This comment has been minimized.

Show comment
Hide comment
@joaocgreis

joaocgreis Oct 11, 2018

Member

@oliversalzburg essentially for reliability. It would be great if installing things would be just start the installer and wait for it to complete, but there are many details that can make it fail. Boxstarter and Chocolatey are solutions dedicated to make automatic installations work well, and handle many points for us (installing Windows upgrades, reboots, and so on). windows-build-tools is a nice tool for anyone familiar with npm, but not as reliable as Boxstarter and Chocolatey. In fact, I believe that windows-build-tools would be better if it used something like the script here in the background. I'm not claiming the solution here will work perfectly in every situation, but it already works quite well and there's a community invested in improving it.

There are also other points to consider, that we could probably work around but don't have to with this. When new versions of Python or VS come out the current script should be able to upgrade without issues, while windows-build-tools would have to be updated and tested by us. Also, Node currently does not come with any module installed. We would have to consider where to install and how well it would work for other users in the machine.

So, the current solution should be as close as possible to "one click and it works". For anyone wanting more control, this includes links to instructions that should be quite simple to follow and one of the options there is windows-build-tools.

Member

joaocgreis commented Oct 11, 2018

@oliversalzburg essentially for reliability. It would be great if installing things would be just start the installer and wait for it to complete, but there are many details that can make it fail. Boxstarter and Chocolatey are solutions dedicated to make automatic installations work well, and handle many points for us (installing Windows upgrades, reboots, and so on). windows-build-tools is a nice tool for anyone familiar with npm, but not as reliable as Boxstarter and Chocolatey. In fact, I believe that windows-build-tools would be better if it used something like the script here in the background. I'm not claiming the solution here will work perfectly in every situation, but it already works quite well and there's a community invested in improving it.

There are also other points to consider, that we could probably work around but don't have to with this. When new versions of Python or VS come out the current script should be able to upgrade without issues, while windows-build-tools would have to be updated and tested by us. Also, Node currently does not come with any module installed. We would have to consider where to install and how well it would work for other users in the machine.

So, the current solution should be as close as possible to "one click and it works". For anyone wanting more control, this includes links to instructions that should be quite simple to follow and one of the options there is windows-build-tools.

@gep13

This comment has been minimized.

Show comment
Hide comment
@gep13

gep13 Oct 12, 2018

I wanted to make sure that @yodurr, @crutkas and @bitcrazed had seen this as well. The usage of BoxStarter and Chocolatey here is similar to what is being created here: https://github.com/Microsoft/windows-dev-box-setup-scripts for different developer setups.

gep13 commented Oct 12, 2018

I wanted to make sure that @yodurr, @crutkas and @bitcrazed had seen this as well. The usage of BoxStarter and Chocolatey here is similar to what is being created here: https://github.com/Microsoft/windows-dev-box-setup-scripts for different developer setups.

@crutkas

This comment has been minimized.

Show comment
Hide comment
@crutkas

crutkas Oct 12, 2018

would love to better understand the exact needs and what can be done. @yodurr without a doubt would too.

crutkas commented Oct 12, 2018

would love to better understand the exact needs and what can be done. @yodurr without a doubt would too.

jasnell added a commit that referenced this pull request Oct 17, 2018

2018-10-10, Version 10.12.0 (Current)
Notable changes:

* assert
  * The diff output is now a tiny bit improved by sorting object
    properties when inspecting the values that are compared with each
    other. #22788
* cli
  * The options parser now normalizes `_` to `-` in all multi-word
    command-line flags, e.g. `--no_warnings` has the same effect as
    `--no-warnings`. #23020
  * Added bash completion for the `node` binary. To generate a bash
    completion script, run `node --completion-bash`. The output can be
    saved to a file which can be sourced to enable completion.
    #20713
* crypto
  * Added support for PEM-level encryption.
    #23151
  * Added an API asymmetric key pair generation. The new methods
    `crypto.generateKeyPair` and `crypto.generateKeyPairSync` can be
    used to generate public and private key pairs. The API supports
    RSA, DSA and EC and a variety of key encodings (both PEM and DER).
    #22660
* fs
  * Added a `recursive` option to `fs.mkdir` and `fs.mkdirSync`. If
    this option is set to true, non-existing parent folders will be
    automatically created. #21875
* http2
  * Added a `'ping'` event to `Http2Session` that is emitted whenever a
    non-ack `PING` is received.
    #23009
  * Added support for the `ORIGIN` frame.
    #22956
  * Updated nghttp2 to 1.34.0. This adds RFC 8441 extended connect
    protocol support to allow use of WebSockets over HTTP/2.
    #23284
* module
  * Added `module.createRequireFromPath(filename)`. This new method can
    be used to create a custom require function that will resolve
    modules relative to the filename path.
    #19360
* process
  * Added a `'multipleResolves'` process event that is emitted whenever
    a `Promise` is attempted to be resolved multiple times, e.g. if the
    `resolve` and `reject` functions are both called in a `Promise`
    executor. #22218
* url
  * Added `url.fileURLToPath(url)` and `url.pathToFileURL(path)`. These
    methods can be used to correctly convert between file: URLs and
    absolute paths. #22506
* util
  * Added the `sorted` option to `util.inspect()`. If set to `true`,
    all properties of an object and Set and Map entries will be sorted
    in the returned string. If set to a function, it is used as a
    compare function. #22788
  * The `util.instpect.custom` symbol is now defined in the global
    symbol registry as `Symbol.for('nodejs.util.inspect.custom')`.
    #20857
  * Added support for `BigInt` numbers in `util.format()`.
    #22097
* V8 API
  * A number of V8 C++ APIs have been marked as deprecated since they
    have been removed in the upstream repository. Replacement APIs
    are added where necessary. #23159
* Windows
  * The Windows msi installer now provides an option to automatically
    install the tools required to build native modules.
    #22645
* Workers
  * Debugging support for Workers using the DevTools protocol has been
    implemented. #21364
  * The public `inspector` module is now enabled in Workers.
    #22769
* Added new collaborators:
  * digitalinfinity - Hitesh Kanwathirtha

PR-URL: #23313
@JieJiSS

This comment has been minimized.

Show comment
Hide comment
@JieJiSS

JieJiSS Oct 20, 2018

nodejs/Release#369

Could it be possible to change the prompt (of the Boxstarter Script) into a Yes/No question? Some users may proceed without reading the text before.

i.e. Have you saved all your files and closed all open programs? (y/N)

JieJiSS commented Oct 20, 2018

nodejs/Release#369

Could it be possible to change the prompt (of the Boxstarter Script) into a Yes/No question? Some users may proceed without reading the text before.

i.e. Have you saved all your files and closed all open programs? (y/N)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment