renovatebot/renovate

Copier manager doesn't set `isExecutable` on added/modified files

Open

#42239 opened on Mar 30, 2026

View on GitHub
 (0 comments) (0 reactions) (0 assignees)TypeScript (14,066 stars) (1,916 forks)batch import
help wantedmanager:copierpriority-3-medium

Description

As noted in https://github.com/renovatebot/renovate/discussions/41438, when we're not making sure that the isExecutable flag in https://github.com/renovatebot/renovate/blob/42ee883ab854a5be7f86309858014e55fc5ee62b/lib/util/git/types.ts#L63 is set.

For instance, using the minimal repro:

% copier --version
copier 9.14.0
% copier update --skip-answered --defaults --answers-file .copier-answers.yml --vcs-ref v1.1.0
Updating to template version 1.1.0
jamietanna@caerbannog .venv tmp 41438 (git)-[main]* % gst
## main...origin/main
 M .copier-answers.yml
?? bin/
jamietanna@caerbannog .venv tmp 41438 (git)-[main]* % ls bin
deploy.sh
jamietanna@caerbannog .venv tmp 41438 (git)-[main]* % ls -al bin
total 4
drwxr-xr-x 3 jamietanna staff  96 Mar 30 09:45 .
drwxr-xr-x 8 jamietanna staff 256 Mar 30 09:45 ..
-rwxr-xr-x 1 jamietanna staff  48 Mar 30 09:45 deploy.sh

This does correctly copy an executable file, but when Renovate commits it does not set the isExecutable flag.

We need to correctly identify this, and then set it.

Contributor guide