Использование действий Github из другого частного репозитория не удается на втором этапе

У меня есть 2 репозитория. У одного есть код API, а у другого — инфраструктурный код. В инфраструктурном коде также есть некоторые действия GH, которые я хочу использовать повторно. Я создал личный токен, который использую для доступа к репо. Я также предоставил доступ.

Это из «Настройки» > «Действия» > «Основные».

Allow all actions and reusable workflowsAccessible 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, созданный при оформлении заказа, удаляется после выполнения любого действия из этого репо. Сначала я думал, что виновато конкретное действие, но исключил это, поскольку после выполнения любого действия папка репо отсутствует. Однако каталог до и после выполнения остается прежним. Итак, вопросы на миллион долларов:

  1. Должны ли мы оформлять заказ после каждого действия?
  2. Можем ли мы оформить заказ по определенному пути, чтобы они не были удалены?
  3. Есть ли другой способ, кроме оформления заказа? (оба репозитория являются частными и принадлежат одной и той же организации.)

Вот некоторые журналы действий 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?

Ошибка кажется довольно очевидной. Не могли бы вы поделиться репозиториями git, чтобы мы могли проверить структуру их папок/файлов и помочь вам устранить неполадки?

GuiFalourd 26.04.2024 13:54

К сожалению, я не могу, так как это частное репо. Однако я предоставил скриншот структуры каталогов.

Rohith Poyyeri 26.04.2024 14:43

Хорошо, не могли бы вы попробовать настроить рабочий каталог на этапе возврата ошибок?

GuiFalourd 26.04.2024 15:10

Не помогло. Основная причина, которую я понял из этого, заключается в том, что ни с одним шагом проблем не возникает, поскольку я изменил порядок, и все работает нормально. После завершения любого шага из инфраструктурного репозитория инфраструктурный репозиторий удаляется. ls -la myapp-infra/.github/actions/ работает до действия и не работает после действия. Значит, мне нужно каждый раз оформлять заказ?

Rohith Poyyeri 27.04.2024 02:42

Нет необходимости вызывать действие checkout много раз. Вы исследовали, что приводит к удалению репозитория infra после выполнения действия?

GuiFalourd 29.04.2024 13:28

Спасибо за это. Я не смог найти никаких шагов/действий/журналов, в которых говорилось бы, что это было удалено. Я добавил еще несколько журналов в вопрос выше.

Rohith Poyyeri 06.05.2024 08:56

Кажется, что ваше локальное действие ./myapp-infra/.github/actions/setup-node использует внутренне actions/checkout (ссылка: Run actions/checkout@v4 и Syncing repository: myapp/myapp-api). Вероятно, это перезаписывает папку myapp/myapp-infra, которую вы ранее установили в своем рабочем процессе. Не могли бы вы проверить настройку действия узла настройки, которую вы используете?

GuiFalourd 06.05.2024 13:39

Большое спасибо, приятель. В этом была проблема. Теперь это решено. Чемпион.

Rohith Poyyeri 07.05.2024 08:42

Отлично, тогда добавлю официальный ответ :D

GuiFalourd 07.05.2024 15:21
Редкие достижения на Github ✨
Редкие достижения на Github ✨
Редкая коллекция доступна в профиле на GitHub ✨
1
9
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как указано в журналах рабочего процесса, которые вы добавили к вопросу, ваше локальное действие ./myapp-infra/.github/actions/setup-node использует actions/checkout внутренне.

Запустите действия/checkout@v4

Синхронизация репозитория: myapp/myapp-api.

Это действие перезапишет папку myapp/myapp-infra, ранее установленную в рабочем процессе с помощью actions/checkout@v4.

В этом случае вам придется адаптировать свой рабочий процесс или локальные действия в соответствии с ожидаемым поведением.

Я предлагаю вам удалить это использование actions/checkout из вашего setup-node локального действия, поскольку оно, похоже, вам не нужно в вашем контексте.

Другие вопросы по теме