Skip to content
This repository has been archived by the owner on Jan 3, 2024. It is now read-only.

CI: use Docker to build binaries for linux-arm64 #191

Merged
merged 1 commit into from
May 27, 2021
Merged

Conversation

jesec
Copy link
Contributor

@jesec jesec commented May 27, 2021

Recently it comes to my attention that Github Actions image installs
experimental C++ standard library from an unsupported PPA, which
effectively breaks assumptions of binary compatibility for the OS
(in this case, Ubuntu 18.04+).

Unfortunately, as a result, the Github Actions environment can no
longer be trusted to compile proper binaries.

This change adds a Dockerfile that composes a proper Ubuntu 18.04
environment from official "ubuntu:bionic" image, and builds Node
binaries in it.

Refs: actions/runner-images#3376, actions/runner-images#3432, actions/runner-images#3459

Recently it comes to my attention that Github Actions image installs
experimental C++ standard library from an unsupported PPA, which
effectively breaks assumptions of binary compatibility for the OS
(in this case, Ubuntu 18.04+).

Unfortunately, as a result, the Github Actions environment can no
longer be trusted to compile proper binaries.

This change adds a Dockerfile that composes a proper Ubuntu 18.04
environment from official "ubuntu:bionic" image, and builds Node
binaries in it.

Bug: actions/runner-images#3432
@jesec jesec requested review from robertsLando and leerob May 27, 2021 05:30
@jesec
Copy link
Contributor Author

jesec commented May 27, 2021

I am also thinking about using Red Hat's llvm-toolset-rhel7, which has cross compiling capabilities and allows us to extend the compatibility of arm64 binaries to EL 7+ and Ubuntu 14.04+. However, I have some concerns about the binary compatibility between LLVM-made Node binaries and GCC-made (prebuilt) Node bindings.

edit: compiler alone is not enough. The image does not include a full cross-capable toolchain (arm64 headers/libs of C++ STL, etc.) unfortunately.

It is also an option to use CentOS / Oracle Linux 7 arm64 toolchain (Red Hat does not provide one for arm64), in line with the upstream and our x64 binaries (already using RHEL7 toolset). However, there is no cross toolchain, and as I explained in #124, we can't use emulation to build such a large project. We have to get a native arm64 machine for CI if we want to choose this option.

@robertsLando
Copy link
Contributor

We have to get a native arm64 machine for CI if we want to choose this option.

I think that @leerob could ask to @vercel team if they could provide us an arm64 machine and setup a custom github runner.

Agree with all your ideas @jesec

Copy link
Contributor

@robertsLando robertsLando left a comment

Choose a reason for hiding this comment

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

LGTM. Hope the build time will not be too long now

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants