Merged
Conversation
The changesets/action fails when executable files are present because GitHub API only supports non-executable files. npm/yarn handles executable permissions automatically during package installation.
carletex
approved these changes
Jan 29, 2026
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description:
The reason we switched to using github api was #381
Why We Made This Change
The Problem
The GitHub Actions workflow using
changesets/action@v1.5.3was failing with this error:Root Cause
The file
bin/create-dapp-se2.jshad executable permissions (100755or-rwxr-xr-x). This is the Unix file mode that allows a file to be run directly like./create-dapp-se2.js.When the changesets action tries to create a Pull Request, it uses the GitHub API to commit files. However, the GitHub API has a limitation: it cannot create or update files with the executable bit set.
The Fix
We changed the file mode from
100755(executable) to100644(non-executable):Why This Doesn't Break Anything
You might wonder: "If it's a CLI binary, doesn't it need to be executable?"
The answer is no, for two reasons:
npm handles permissions automatically - When someone installs your package via
npm install -g create-ethor runsnpx create-eth, npm reads the"bin"field inpackage.jsonand automatically sets the executable permission on the target system.Node runs it anyway - When you run
node bin/create-dapp-se2.jsoryarn cli, Node.js interprets the file directly. The executable bit is only needed if you want to run it as./bin/create-dapp-se2.jswithout thenodeprefix.Summary
100755(executable)100644(non-executable)Merging this and trying once