Почему происходит сбой второго рабочего процесса действий Github (вызываемого через «workflow_call»)?

У меня есть файл main.yml, который вызывает другие рабочие процессы через workflow_call. Имена вызываемых рабочих процессов называются workflow1 и workflow2.

Если workflow2 вызывается после workflow1, то workflow2 не выполняется. Если я их переключу, то workflow1 не получится.

Оба рабочих процесса работают нормально при вызове через workflow_dispatch.

Оба рабочих процесса отправляются в репозиторий.

Код, который я использую для этого, идентичен в обоих рабочих процессах:

- name: Commit and push the changes
  run: |
    echo "Initial status:"
    git status

    git config --local user.email "[email protected]"
    git config --local user.name "GitHub Action"

    git add -A

    echo "Status after git add:"
    git status

    git diff --cached --exit-code && exit 0  # Exit if no changes in the staging area

    echo "Committing changes:"
    git commit -m "chore: fetch content from various external sources"

    echo "Pushing changes:"
    git push

    echo "Final status:"
    git status

Второй рабочий процесс завершается сбоем:

Run echo "Initial status:"
Initial status:
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   xxx.md
    modified:   yyy.md
    modified:   zzz.md

no changes added to commit (use "git add" and/or "git commit -a")
Status after git add:
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    modified:   xxx.md
    modified:   yyy.md
    modified:   zzz.md

diff --git a/xxx.md b/xxx.md etc etc

Насколько я понимаю, если у меня есть основной рабочий процесс, который вызывает два других рабочих процесса, все они выполняются на отдельном «бегуне», поэтому после того, как workflow1 выполняется и workflow2 получает свой собственный бегун, проверка репо должна работать?

Я попробовал различные предложения AI:

1: Запустите это в начале части git (не понимаю, почему это поможет, но я попробовал):

git fetch origin main
git reset --hard origin/main

2. Запустите это в начале части git (не понимаю, почему это поможет, но я попробовал):

git pull origin main

Я также пробовал поспать на несколько секунд между workflow1 и workflow2, но это не помогло.

Что мне не хватает? Я потратил на это несколько часов и не продвинулся дальше.

===

Дополнение: под yml-скриптом вызывающего абонента и скриптом(ами) вызываемого абонента, отредактированным для простоты, где вы видите «***», эти звездочки являются заменой того, что я решил скрыть, то же самое для «xxx»:

основной.yml:

name: Import all and Deploy to GitHub Pages

on:
  workflow_dispatch:

jobs:
  workflow1:
    uses: ./.github/workflows/workflow1.yml
    secrets:
      SECRET1: ${{ secrets.*** }}
      SECRET2: ${{ secrets.*** }}
      SECRET3: ${{ secrets.*** }}

  workflow2:
    needs: workflow1
    uses: ./.github/workflows/workflow2.yml
    secrets:
      SECRET1: ${{ secrets.*** }}
      SECRET2: ${{ secrets.*** }}
      SECRET3: ${{ secrets.*** }}

рабочий процесс 1 (и рабочий процесс 2, они по сути одинаковы):

# Summary: This GitHub Actions workflow fetches content from various external sources, updates a glossary, and deploys changes to GitHub Pages.

name: workflow1
on:
  workflow_dispatch:

  workflow_call:
    secrets:
      SECRET1:
        required: true
      SECRET2:
        required: true
      SECRET3:
        required: true    

jobs:
  deploy:
    name: Import external glossaries
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 19
          cache: npm

      - name: Install dependencies
        run: npm ci
      


      ##############################
      - name: Import external glossaries
        env:
          SECRET1: ${{ secrets.*** }}
          SECRET2: ${{ secrets.*** }}
          SECRET3: ${{ secrets.*** }}
        run: sh xxx/xxx/xxx/main.sh
      ##############################



      ##############################
      - name: Commit and push the changes
        run: |
          echo "Initial status:"
          git status

          git config --local user.email "[email protected]"
          git config --local user.name "GitHub Action"

          git add -A

          echo "Status after git add:"
          git status

          git diff --cached --exit-code && exit 0  # Exit if no changes in the staging area

          echo "Committing changes:"
          git commit -m "chore: fetch content from various external sources"

          echo "Pushing changes:"
          git push

          echo "Final status:"
          git status
      ##############################

Используете ли вы actions/checkout где-нибудь в своих рабочих процессах? Если да, то с какой настройкой?

GuiFalourd 20.08.2024 17:01

Покажите, пожалуйста, как вы вызываете рабочий процесс1 и рабочий процесс2.

Delta George 20.08.2024 18:30

@GuiFalourd Я добавил запрошенную информацию в конце сообщения после «===». Надеюсь, это поможет.

Kor 20.08.2024 18:56

@DeltaGeorge Я добавил запрошенную информацию в конце сообщения после «===». Надеюсь, это поможет.

Kor 20.08.2024 18:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Мне удалось воспроизвести это неинтуитивное поведение и обнаружить две проблемы:

  1. Родительский рабочий процесс не имеет разрешения на отправку данных в репозиторий, поэтому вызванные рабочие процессы получают то же разрешение только для чтения, что и родительский рабочий процесс. Разрешение на запись должно быть дано явно.

  2. рабочий процесс2 не может отправить, так как глава базовой ветки продвинулся вперед благодаря отправке рабочего процесса1. Несмотря на то, что рабочий процесс2 проверяет репозиторий после завершения рабочего процесса1, он все равно получает ту же позицию начала ветки, что и рабочий процесс1. Таким образом, рабочий процесс2 должен извлечь ветку, прежде чем вносить какие-либо изменения.

Следующие сокращенные рабочие процессы работают должным образом:

Родительский рабочий процесс:

name: workflow_main

on:
  workflow_dispatch:

permissions:
  contents: write

jobs:
  workflow1:
    uses: ./.github/workflows/workflow1.yaml

  workflow2:
    needs: workflow1
    uses: ./.github/workflows/workflow2.yaml

Рабочий процесс2 (тот же, что и рабочий процесс1) — см. git pull:

name: workflow2
on:
  workflow_dispatch:

  workflow_call:

jobs:
  deploy:
    name: Import external glossaries
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Import external glossaries
        run: |
          git pull
          echo $RANDOM > workflow2.txt

      - name: Commit and push the changes
        run: |
          git config --local user.email "[email protected]"
          git config --local user.name "GitHub Action"

          git add .
          git commit -m "chore: fetch content from various external sources"
          git push
          git status

Тестирование. Это может занять некоторое время.

Kor 21.08.2024 14:30

Спасибо, Дельта Джордж!

Kor 21.08.2024 16:27

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