Зависимости между рабочими процессами от действий Github

У меня есть монорепозиторий с двумя рабочими процессами:

.github/workflows/test.yml

name: test

on: [push, pull_request]

jobs:
  test-packages:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: test packages
        run: |
          yarn install
          yarn test
...

.github/workflows/deploy.yml

name: deploy

on:
  push:
    tags:
      - "*"

jobs:
  deploy-packages:
    runs-on: ubuntu-latest
    needs: test-packages
    steps:
      - uses: actions/checkout@v1
      - name: deploy packages
        run: |
          yarn deploy
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
...

Это не работает, я не могу ссылаться на вакансию в другом рабочем процессе:

### ERRORED 19:13:07Z

- Your workflow file was invalid: The pipeline is not valid. The pipeline must contain at least one job with no dependencies.

Есть ли способ создать зависимость между рабочими процессами?

Я хочу запускать test.yml, затем deploy.yml для тегов и test.yml только для запросов push и pull. Я не хочу дублировать задания между рабочими процессами.


person Guillaume Vincent    schedule 18.10.2019    source источник


Ответы (3)


Теперь можно иметь зависимости между рабочими процессами в Github Actions, используя workflow_run.

Используя эту конфигурацию, рабочий процесс Release будет работать, когда рабочий процесс Run Tests будет завершен.

name: Release
on:
  workflow_run:
    workflows: ["Run Tests"]
    branches: [main]
    types: 
      - completed
person Ahmed AbouZaid    schedule 08.11.2020
comment
Важно знать, что рабочий процесс Release в вашем примере будет запускаться всякий раз, когда рабочий процесс Run Tests завершится, независимо от того, успешно он или нет. Вам необходимо проверить github.event.workflow_run.conclusion, важен ли результат рабочего процесса (что обычно так и есть). Подробнее здесь: github.community/t/ - person John Blackbourn; 08.12.2020

Обновление: теперь можно создавать зависимости для рабочих процессов с помощью _ 1_. См. этот ответ.

Есть ли способ создать зависимость между рабочими процессами?

Я не думаю, что на данный момент это возможно. Возможно, они добавят эту функцию в будущем. Лично я думаю, что более вероятно, что такая функция, как сферы CircleCI, будет добавлена ​​для совместного использования общих разделов рабочих процессов.

В качестве альтернативного решения работает ли для вас объединение всего этого в один рабочий процесс, подобный приведенному ниже? Задание deploy-packages будет выполняться только в том случае, если помещается тег, начинающийся с v.

name: my workflow
on: [push, pull_request]
jobs:
  test-packages:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: test packages
        run: echo "Running tests"
  deploy-packages:
    if: startsWith(github.ref, 'refs/tags/v')
    runs-on: ubuntu-latest
    needs: test-packages
    steps:
      - uses: actions/checkout@v1
      - name: deploy packages
        run: echo "Deploying packages"
person peterevans    schedule 19.10.2019
comment
Стоит взглянуть на ответ @Ahmed, так как похоже, что теперь это выполнимо. - person nfroidure; 08.12.2020
comment
Ключ needs был для меня решением! Спасибо. - person KargWare; 06.01.2021

Кажется, что действие «Подождите и проверьте» является в настоящее время это оптимальный обходной путь для этой отсутствующей функции, как он объявляет в README:

???? Это позволяет обойти ограничение GitHub Actions на независимые рабочие процессы (мы можем зависеть только от заданий внутри одного рабочего процесса).

ОБНОВЛЕНИЕ: см. также мой другой ответ для частичного решения с использованием workflow_run.

person Greg Dubicki    schedule 24.01.2021
comment
Кажется, что это действие просто ждет как тайм-аут, а на самом деле не ждет завершения рабочего процесса, прежде чем запускать сжатые задания. - person Maxie Berkmann; 10.04.2021