У меня есть 2 репозитория. У одного есть код API, а у другого — инфраструктурный код. В инфраструктурном коде также есть некоторые действия GH, которые я хочу использовать повторно. Я создал личный токен, который использую для доступа к репо. Я также предоставил доступ.
Это из «Настройки» > «Действия» > «Основные».
Allow all actions and reusable workflows
Accessible from repositories owned by the user 'org'
Вот рабочий процесс в API
name: Deploy to AWS ECS
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Checkout Infra Repository
uses: actions/checkout@v4
with:
repository: myapp/myapp-infra
token: ${{ secrets.GH_TOKEN }}
path: myapp-infra
ref: main
- name: List Infra Actions1
run: ls -la myapp-infra/.github/actions/ #This lists all actions
- name: Show Current Directory
run: pwd # /home/runner/work/myapp-api/myapp-api
- name: Setup Node.js
uses: ./myapp-infra/.github/actions/setup-node #runs fine
- name: Show Current Directory
run: pwd # /home/runner/work/myapp-api/myapp-api
- name: List Infra Actions2
run: ls -la myapp-infra/.github/actions/ # fails
- name: Install NPM Dependencies
uses: ./myapp-infra/.github/actions/npm-install #fails
Действие setup-node
выполняется нормально, а npm-install
завершается сбоем.
Error: Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/work/myapp-api/myapp-api/myapp-infra/.github/actions/npm-install'. Did you forget to run actions/checkout before running your local action?
Файловая структура инфраструктурного репозитория.
Любая помощь приветствуется. При необходимости могу предоставить дополнительную информацию.
В результате моего первоначального расследования я обнаружил, что myapp-infra
, созданный при оформлении заказа, удаляется после выполнения любого действия из этого репо. Сначала я думал, что виновато конкретное действие, но исключил это, поскольку после выполнения любого действия папка репо отсутствует. Однако каталог до и после выполнения остается прежним.
Итак, вопросы на миллион долларов:
Вот некоторые журналы действий GH.
Download action repository 'actions/setup-node@v4' (SHA:60edb5dd545a775178f52524783378180af0d1f8)
Run ./myapp-infra/.github/actions/setup-node
Run actions/checkout@v4
Syncing repository: myapp/myapp-api
Getting Git version info
Temporarily overriding HOME='/home/runner/work/_temp/3790bc2a-42db-4f29-81ac-acaafa9303b0' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
/usr/bin/git config --global --add safe.directory /home/runner/work/myapp-api/myapp-api
/usr/bin/git config --local --get remote.origin.url
https://github.com/myapp/myapp-api
Removing previously created refs, to avoid conflicts
/usr/bin/git submodule status
Cleaning the repository
Disabling automatic garbage collection
Setting up auth
Fetching the repository
Determining the checkout info
/usr/bin/git sparse-checkout disable
/usr/bin/git config --local --unset-all extensions.worktreeConfig
Checking out the ref
/usr/bin/git log -1 --format='%H'
'e95d322d898d11920cdeb2e384cb323f567deac7'
Run NODE_VERSION=$(cat .nvmrc)
Run actions/setup-node@v4
Found in cache @ /opt/hostedtoolcache/node/20.12.2/x64
Environment details
node: v20.12.2
npm: 10.5.0
yarn: 1.22.22
Error: Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/work/myapp-api/myapp-api/myapp-infra/.github/actions/npm-install'. Did you forget to run actions/checkout before running your local action?
К сожалению, я не могу, так как это частное репо. Однако я предоставил скриншот структуры каталогов.
Хорошо, не могли бы вы попробовать настроить рабочий каталог на этапе возврата ошибок?
Не помогло. Основная причина, которую я понял из этого, заключается в том, что ни с одним шагом проблем не возникает, поскольку я изменил порядок, и все работает нормально. После завершения любого шага из инфраструктурного репозитория инфраструктурный репозиторий удаляется. ls -la myapp-infra/.github/actions/
работает до действия и не работает после действия. Значит, мне нужно каждый раз оформлять заказ?
Нет необходимости вызывать действие checkout
много раз. Вы исследовали, что приводит к удалению репозитория infra
после выполнения действия?
Спасибо за это. Я не смог найти никаких шагов/действий/журналов, в которых говорилось бы, что это было удалено. Я добавил еще несколько журналов в вопрос выше.
Кажется, что ваше локальное действие ./myapp-infra/.github/actions/setup-node
использует внутренне actions/checkout
(ссылка: Run actions/checkout@v4
и Syncing repository: myapp/myapp-api
). Вероятно, это перезаписывает папку myapp/myapp-infra
, которую вы ранее установили в своем рабочем процессе. Не могли бы вы проверить настройку действия узла настройки, которую вы используете?
Большое спасибо, приятель. В этом была проблема. Теперь это решено. Чемпион.
Отлично, тогда добавлю официальный ответ :D
Как указано в журналах рабочего процесса, которые вы добавили к вопросу, ваше локальное действие ./myapp-infra/.github/actions/setup-node
использует actions/checkout
внутренне.
Запустите действия/checkout@v4
Синхронизация репозитория: myapp/myapp-api.
Это действие перезапишет папку myapp/myapp-infra
, ранее установленную в рабочем процессе с помощью actions/checkout@v4
.
В этом случае вам придется адаптировать свой рабочий процесс или локальные действия в соответствии с ожидаемым поведением.
Я предлагаю вам удалить это использование actions/checkout
из вашего setup-node
локального действия, поскольку оно, похоже, вам не нужно в вашем контексте.
Ошибка кажется довольно очевидной. Не могли бы вы поделиться репозиториями git, чтобы мы могли проверить структуру их папок/файлов и помочь вам устранить неполадки?