Skip to content
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

javascript action not usable for Python C extensions #334

Closed
bek0s opened this issue Jan 24, 2020 · 9 comments
Closed

javascript action not usable for Python C extensions #334

bek0s opened this issue Jan 24, 2020 · 9 comments

Comments

@bek0s
Copy link

bek0s commented Jan 24, 2020

checkout@v2 fails when using Docker image:

quay.io/pypa/manylinux2010_x86_64

with the following error

Running JavaScript Action with default external tool: node12
/__e/node12/bin/node: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.14' not found (required by /__e/node12/bin/node)
/__e/node12/bin/node: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.18' not found (required by /__e/node12/bin/node
/__e/node12/bin/node: /usr/lib64/libstdc++.so.6: version 'CXXABI_1.3.5' not found (required by /__e/node12/bin/node)
/__e/node12/bin/node: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found (required by /__e/node12/bin/node)
/__e/node12/bin/node: /lib64/libc.so.6: version 'GLIBC_2.16' not found (required by /__e/node12/bin/node)
/__e/node12/bin/node: /lib64/libc.so.6: version 'GLIBC_2.17' not found (required by /__e/node12/bin/node)
/__e/node12/bin/node: /lib64/libc.so.6: version 'GLIBC_2.14' not found (required by /__e/node12/bin/node)
##[error]Node run failed with exit code 1

The above image is the official Docker image for building and distributing Python extensions. The newer version (quay.io/pypa/manylinux2014_x86_64) does not have this problem, but the majority still uses the manylinux1 and manylinux2010 images.

checkout@v1 does not have this problem. Maybe it is using an older version of node that has lower requirements in terms of GLIBC version?

Sadly, some other actions on GitHub are also using node (?!) and fail with the manylinux2010 image (e.g., the setup-python action).

Thank you.

@dakale
Copy link
Contributor

dakale commented Jan 29, 2020

Unfortunately this is a limitation of the system right now. We use node as the runtime to execute javascript-based actions so at a minimum the container needs to be able to run node. I understand that manylinux2010 is "old" on purpose but that is why this is happening. The @v1 version of checkout was container based so it did not require executing node+javascript.

We can't use a statically linked version of node because it has to be able to load compiled addons to be generally useful, so the only other option I really see for you is either installing the required libraries as a step before running javascript-based actions, or build your own container based on manylinux2010 with those libraries installed, so that you do not need to install them just-in-time each run.

Leaving open for now because there may be some extra discussion or work needed for the checkout action, whether it be docs or continuing to support the v1 container-based action. @ericsciple

@dakale dakale removed their assignment Jan 29, 2020
@ericsciple
Copy link
Collaborator

Minor clarification, actions/checkout@v1 deferred to a runner plugin and ran in the host with the runner.

@ericsciple
Copy link
Collaborator

@bryanmacfarlane @dakale is there a document somewhere describing the job-container limitation that we can point customers to? Individual actions cannot fix.

@bryanmacfarlane
Copy link
Member

The problem is also not scoped to checkout right? It would be any action, correct? If that's correct, we should transfer the issue to the runner.

@ericsciple ericsciple transferred this issue from actions/checkout Feb 13, 2020
@ericsciple ericsciple changed the title @v2 not usable for Python C extensions javascript action not usable for Python C extensions Feb 13, 2020
@bryanmacfarlane
Copy link
Member

bryanmacfarlane commented Feb 13, 2020

Maybe it is using an older version of node that has lower requirements in terms of GLIBC version?

I think it may be the opposite - older images (manylinux2010) and newer node. We use node 12 (latest LTS) to run actions written to run node12.

I think there isn't a solution to that except to use the manylinux2014 image. I think that is the solution here.

@haata
Copy link

haata commented Mar 2, 2020

Unfortunately manylinux2014 targets a newer version of glibc (the whole point of manylinux is to compile the python module for as old of a glibc as possible). In this particular case, it might be possible to ship another sysroot with the node plugins (and set things like LD_LIBRARY_PATH or modify the RPATH of all the libraries).

@nikola-jokic
Copy link
Contributor

Hi @bek0s, can you tell me if this issue is still valid?

@thboop
Copy link
Collaborator

thboop commented Feb 22, 2022

Going to close this out as the workaround has been identified, thank you for the report.

@thboop thboop closed this as completed Feb 22, 2022
@sighingnow
Copy link

Hi @thboop We're still blocked by this issue that the default external tool "node12" cannot run within the manylinux2010 environment.

Is it possible to specifiy a customized node executable to run the javascript action in the yaml configuration?

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

No branches or pull requests

9 participants