Из-за ограничений пропускной способности я пытаюсь проверить подпапку моего проекта в Github Actions и нашел это действие: https://github.com/marketplace/actions/checkout-files
Новый (сломанный) скрипт:
name: Create Build Target
run-name: ${{ github.actor }} is creating ${{ github.ref_name }}
on: create
jobs:
Create:
runs-on: ubuntu-latest
steps:
- name: Checkout to access bash script
uses: Bhacaz/checkout-files@v2
with:
files: CICD
- name: Create Buildtarget info on Unity Cloud Build
env:
api_key: ${{ secrets.api_key }}
org_id: ${{ secrets.org_id }}
project_id: ${{ secrets.project_id }}
branch_name: ${{ github.ref_name }}
credential_id: ${{ secrets.credential_id }}
run: CICD/CreateBuildTarget.sh
Я получаю сообщение об ошибке в терминале Github Actions при запуске вышеуказанного файла .yaml для извлечения подкаталога, а не всего проекта:
/home/runner/work/_temp/2ddc6165-7186-415a-8d87-bc4d746f659f.sh: line 1: CICD/CreateBuildTarget.sh: Permission denied
60
Error: Process completed with exit code 126.
У меня это работало раньше, и я убедился, что файлы имеют правильные разрешения:
myUserName@myUserNames-MacBook-Pro cicd % ls -l
total 16
-rwxr-xr-x@ 1 myUserName staff 2239 Feb 3 11:17 CreateBuildTarget.sh
-rwxr-xr-x@ 1 myUserName staff 449 Feb 3 11:18 DeleteBuildTarget.sh
Единственное, что я изменил, это действие при оформлении заказа.
До (рабочее):
- name: Checkout to access bash script
uses: actions/[email protected]
После (не работает):
- name: Checkout to access bash script
uses: Bhacaz/checkout-files@v2
with:
files: CICD
Возможно ли то, что я пытаюсь сделать? На данный момент я изменил сценарий, чтобы он запускался при открытии/повторном открытии запроса на вытягивание вместо создания, но я по-прежнему хочу извлекать только подкаталог, а не весь проект.
Хотя ваши файлы являются исполняемыми локально (на вашем компьютере), они могли не быть добавлены в ваш репозиторий Git с помощью +x
(исполняемый бит).
Это означает, что после того, как действие GitHub проверит ваш файл (даже ограничив себя одной подпапкой), указанные sh
файлы сценариев не будут выполняться.
Попробуйте локально сделать, используя git add --chmod=+x:
cd /path/to/repository
cd CICD
git add --chmod=+x *.sh
git commit -m "Add executable bit in CICD folder"
git push
Затем проверьте, есть ли у вашего действия GitHub такая же проблема.
Используемое вами действие не устанавливает биты выполнения в файлах .sh. Их относительно просто добавить вручную после восстановления файлов, но вы можете захотеть разветвить действие и заставить его работать правильно.
Вместо этого попробуйте использовать действие Sparse Checkout, оно будет полагаться на Git для восстановления файлов и имеет гораздо больше ожидаемых встроенных функций по умолчанию:
gogaille/sparse-checkout
Он показывает, что полная проверка работает, поэтому проблема не в том, что репозиторий git не знает, установлен ли бит выполнения. Но выбранная им задача использует GitHub API для извлечения содержимого файла, но просто записывает его в новый файл, вообще не просматривая атрибуты. Действие, о котором я упоминал выше, использует функции git checkout, таким образом, установив бит выполнения, но оно также обрезает набор файлов для загрузки только теми, которые вам нужны.
«таким образом установил бы бит выполнения»: интересно. Я никогда не знал, что git checkout
или git restore
сделают это. Для меня, если файл имеет версию без исполняемого бита на одном конце, он будет извлечен/восстановлен без исполняемого бита на другом конце, будь то ручная проверка или действие GitHub.
Я попробовал это, и это работает: проверяет только файлы в нужной подпапке и имеет правильные разрешения. Однако я не разветвлял действие.
Конечно, но если основной причиной, как я предположил, является отсутствие исполняемого бита в этом скрипте, вы можете использовать любое действие GitHub, которое хотите: эти файлы, однажды извлеченные тем или иным способом, не будут выполняться.