Skip to content

build: provide pre-built nodejs/node images or cache  #39672

@bnb

Description

@bnb

Is your feature request related to a problem? Please describe.
Presently, making a small contribution to node.js core is particularly challenging. There are a number of contributing factors, but a primary one is simply having to build Node.js from scratch. For someone unfamiliar/new to Node.js, this can be particularly challenging compared to basically anything else in the JavaScript ecosystem.

Describe the solution you'd like
It would be a nice contributor experience enhancement to provide a pre-built image (containerd or Docker?) or some kind of cache that would help alleviate the pain of needing to build completely from scratch every single time.

One theoretical manifestation of how this could work:

  • Nightly, build a Docker container.
  • This Docker container includes all necessary tools / nice-to-haves for building Node.js.
  • This Docker container builds Node.js.

Containers provide some nice benefits:

  • We'd potentially be able to enhance many contributors' workflows.
  • We'd enable a better experience through cloud-hosted developer environments like Codespaces that have the option to build from a container.
  • We could include node-core-utils and potentially enhance it further with something like a contributing checklist to ease first-time-contributor or early-contributor burden, effectively automating what's codified in the PR guidance.

Or, we could do something in the vein of a cloud cache (in the vein of goma). While these require immense work, they are extremely useful and don't require you to run Docker. If there's more interest in this, I'm happy to see what resources I can pull from Microsoft (including potentially open sourcing some things) to enable it.

Either way, this is a build feature that seems to go in a positive direction that helps both new and existing contributors. Would love thoughts, if there are any.

Describe alternatives you've considered

Doing nothing: I mean this works but also retains an unnecessary bad experience.

Metadata

Metadata

Assignees

No one assigned

    Labels

    buildIssues and PRs related to build files or the CI.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions