Skip to content

node20 (and other version) binary used for running actions should be fully statically linked (including libc) #922

Closed
@alex

Description

@alex

Description

Currently the node binary that's used to run external actions dynamically links against libc. This has the effect that when used with containers, actions break because of libc symbols not being available:

In order to insulate the node binary from containers it's running in, it should be fully statically linked.

This can be accomplished with --fully-static argument to configure when building node (https://github.com/nodejs/node/blob/main/configure.py#L155-L160)

Platforms affected

  • Azure DevOps
  • GitHub Actions - Standard Runners
  • GitHub Actions - Larger Runners

Runner images affected

  • Ubuntu 20.04
  • Ubuntu 22.04
  • macOS 11
  • macOS 12
  • macOS 13
  • Windows Server 2019
  • Windows Server 2022

Image version and build link

Current runner version: '2.311.0'

Is it regression?

No

Expected behavior

node binary can be invoked inside of alpine containers or other environments with different libc

Actual behavior

Crashes with various dynamic linking errors

Repro steps

  1. Set up a self-hosted arm64 runner
  2. Run an image such as alpine or pyca/cryptography-manylinux2014 that has a different libc (musl and old, respectively)
  3. Attempt to use any node20 action, such as actions/checkout@v4
  4. See it fail

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions