-
Notifications
You must be signed in to change notification settings - Fork 0
feat: ship self-contained single-file binaries (#16) #35
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
Open
t41372
wants to merge
10
commits into
fix/design-audit
Choose a base branch
from
feat/issue-16-single-binary
base: fix/design-audit
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 8 commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
f3b5a86
feat: ship self-contained single-file binaries (#16)
t41372 946ebc8
test: pin the binary build's collect contract
t41372 57bc1a7
test: pin the child-env scrub at every subprocess seam
t41372 99e34d0
fix: absurdity-review fixes that survived the design-audit merge
t41372 c99e94a
test: cover the absurdity-review fixes (gates green)
t41372 851fb15
i18n: re-land the surviving fixes' catalogs after the design-audit re…
t41372 bec3812
fix: close the seams the round-2 review found between the two fix waves
t41372 fcacd6b
test: strip ANSI escapes before matching params --help output
t41372 07aee37
fix: polish from the final review pass and the code-review finders
t41372 b44fcdc
fix: land the /code-review findings on the --set lane and its documen…
t41372 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🌐 Web query:
GitHub Actions container alpine musl node20 checkout "no such file or directory" workaround💡 Result:
The error "no such file or directory" when running GitHub Actions in an Alpine Linux container occurs because GitHub Actions attempts to use a pre-packaged Node.js binary (often in
/e/) that is dynamically linked against glibc [1][2]. Alpine Linux uses musl libc, which is incompatible with glibc-linked binaries, causing the OS to report that the file does not exist even though the path is correct [1][2]. There are several common workarounds depending on your requirements: 1. Install Node.js inside the container: You can install Node.js manually using your distribution's package manager (e.g.,apk add nodejs npm). To ensure GitHub Actions uses this version instead of the internal one, you can link it to the expected location:yaml - name: Fix Node path run: | mkdir -p /e/node20/bin ln -sf $(which node) /e/node20/bin/node ln -sf $(which npm) /e/node20/bin/npm ln -sf $(which npx) /e/node20/bin/npx[3] 2. Trick the Runner into Detecting Alpine: If your container is Alpine-based (or another musl-based system) but the runner fails to detect it correctly, you can temporarily modify/etc/os-releaseto identify the system as Alpine before the checkout step [1]:yaml - name: Force Alpine identification run: | sed '/^ID="/s/original-distro-name/alpine/' /etc/os-release > /tmp/os-release mv /tmp/os-release /etc/os-releaseReplaceoriginal-distro-namewith your current distribution's ID [1]. 3. Use a different base image: If possible, use a Debian-based container (e.g.,ubuntuordebian) instead of Alpine, as these distributions use glibc and are natively compatible with the Node.js binaries provided by GitHub Actions [4][2]. 4. Check your architecture: In some cases, this error also appears on 32-bit (i386) architectures because the standard Node.js binaries provided by GitHub Actions are often 64-bit only [3][5]. If you are running on non-x64_86 hardware, installing Node.js manually (as in step 1) is the recommended approach [3].Citations:
🏁 Script executed:
Repository: t41372/skit
Length of output: 217
🏁 Script executed:
Repository: t41372/skit
Length of output: 3109
🌐 Web query:
GitHub Actions container Node20 Alpine python:3.13-alpine no such file or directory💡 Result:
The error "exec /e/node20/bin/node: no such file or directory" in GitHub Actions when using a container (such as Alpine-based images) occurs because the GitHub Actions runner attempts to execute its own pre-packaged, dynamically linked Node.js binary inside your container [1][2][3]. This error typically arises for one of two reasons: 1. Dynamic Linker Mismatch (glibc vs. musl): The GitHub Actions runner often injects a Node.js binary compiled against glibc (the standard C library on most Linux distributions). Alpine Linux, however, uses musl libc [4][2][5]. Because the glibc-based binary cannot find the required dynamic linker (e.g., /lib64/ld-linux-x86-64.so.2) on an Alpine system, the operating system reports that the file does not exist, even though the binary is physically present [4][2]. 2. Environment/Volume Issues: GitHub Actions mounts the runner's tool directory (often located at /e) into the container [1][6]. If the container environment is misconfigured or lacks the expected directory structure, the shell will be unable to locate the injected binary [3]. To resolve this issue, consider these approaches: Workaround 1: Install Node.js natively in your Dockerfile Instead of relying on the runner to inject its own Node.js version, install Node.js directly in your container image [1][7]. - Add the following to your Dockerfile: RUN apk add --no-cache nodejs npm Workaround 2: Create a Symlink (Quick Fix) If you cannot modify the base image, you can try to create a symlink in a setup step to point the runner to the Node.js binary installed within the container [1]. - In your workflow, add a setup step: - name: Fix Node path run: | mkdir -p /e/node20/bin ln -sf$(which node) /e/node20/bin/node ln -sf $ (which npm) /e/node20/bin/npm Workaround 3: Adjust /etc/os-release In some cases, the runner detects Alpine incorrectly or experiences issues because of the distribution name. Some users have successfully "tricked" the runner by temporarily modifying /etc/os-release to match a different distribution ID, though this is fragile and generally discouraged [4]. It is recommended to avoid using custom container actions on Alpine-based images if they rely heavily on pre-injected Node.js tools, as this incompatibility is a known architectural limitation of how GitHub Actions runners currently interact with non-glibc container environments [2][8].
Citations:
Run the musl job with a glibc-compatible container or a Node-provisioned Alpine image.
.github/workflows/release.ymlusespython:3.13-alpineforbinary-musl, but theactions/checkoutandactions/upload-artifactsteps are Node.js actions that run using the GitHub runner’s glibc-linked Node binary; on this musl-only container, these steps typically fail withno such file or directorybefore/after the musl build. Use a base image that contains the Node binary GitHub Actions expects, run the PyInstaller build insidedocker run python:3.13-alpine …from a normal ubuntu job, or add gcompat/libstdc++ coverage earlier in jobs that can reach the first Node action.🤖 Prompt for AI Agents