Skip to main content

Активация рабочего процесса

In this article

Автоматическая активация рабочих процессов GitHub Actions

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Сведения о триггерах рабочих процессов

Триггеры рабочего процесса — это события, которые приводят к запуску рабочего процесса. Эти события могут быть следующими:

  • События, происходящие в репозитории рабочего процесса
  • События, происходящие за пределами GitHub Enterprise Server и запускающие событие repository_dispatch в GitHub Enterprise Server
  • Запланированное время
  • Вручную

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

Триггеры рабочих процессов определяются с помощью ключа on. Дополнительные сведения см. в статье Синтаксис рабочего процесса для GitHub Actions.

Чтобы запустить рабочий процесс, выполните следующие действия:

  1. Событие происходит в репозитории. Событие имеет связанную фиксацию SHA и ссылку Git.

  2. GitHub Enterprise Server выполняет поиск в каталоге .github/workflows в репозитории файлов рабочих процессов, присутствующих в связанной фиксации SHA или ссылке Git события.

  3. Запуск рабочего процесса выполняется для всех рабочих процессов со значениями on:, соответствующими событию активации. Для некоторых событий также требуется, чтобы файл рабочего процесса присутствовал в ветви репозитория по умолчанию.

    Каждый запуск рабочего процесса будет использовать версию рабочего процесса, которая присутствует в связанной фиксации SHA или ссылке Git события. При запуске рабочего процесса GitHub Enterprise Server задает переменные среды GITHUB_SHA (фиксация SHA) и GITHUB_REF (ссылка Git) в среде средства выполнения. Дополнительные сведения см. в разделе Переменные.

Активация рабочего процесса из рабочего процесса

При использовании GITHUB_TOKEN репозитория для выполнения задач события, вызванные GITHUB_TOKEN, не создают новый рабочий процесс. Это предотвращает случайное создание рекурсивных запусков рабочих процессов. Например, если при запуске рабочего процесса выполняется передача кода с помощью GITHUB_TOKEN репозитория, новый рабочий процесс не будет запущен, даже если репозиторий содержит рабочий процесс, настроенный для запуска при наступлении события push. Дополнительные сведения см. в разделе Проверка подлинности с помощью GITHUB_TOKEN.

Если вы хотите активировать рабочий процесс во время выполнения рабочего процесса, можно использовать personal access token вместо активации GITHUB_TOKEN событий, для которых требуется маркер. Вам потребуется создать personal access token и сохранить его в виде секрета. Чтобы свести к минимуму затраты на использование GitHub Actions, убедитесь, что не создаются рекурсивные или непреднамеренные запуски рабочего процесса. Дополнительные сведения о создании personal access token см. в разделе Создание personal access token. Дополнительные сведения о хранении personal access token в качестве секрета см. в разделе Создание и хранение зашифрованных секретов.

Например, следующий рабочий процесс использует personal access token (хранящийся в виде секрета с именем MY_TOKEN) для добавления метки к проблеме через GitHub CLI. Все рабочие процессы, выполняемые при добавлении метки, будут выполняться после выполнения этого шага.

on:
  issues:
    types:
      - opened

jobs:
  label_issue:
    runs-on: ubuntu-latest
    steps:
      - env:
          GITHUB_TOKEN: ${{ secrets.MY_TOKEN }}
          ISSUE_URL: ${{ github.event.issue.html_url }}
        run: |
          gh issue edit $ISSUE_URL --add-label "triage"

И наоборот, следующий рабочий процесс использует GITHUB_TOKEN для добавления метки в проблему. При добавлении метки рабочие процессы не будут запускаться.

on:
  issues:
    types:
      - opened

jobs:
  label_issue:
    runs-on: ubuntu-latest
    steps:
      - env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          ISSUE_URL: ${{ github.event.issue.html_url }}
        run: |
          gh issue edit $ISSUE_URL --add-label "triage"

Использование событий для активации рабочих процессов

Используйте ключ on, чтобы указать, какие события активируют рабочий процесс. Дополнительные сведения о событиях см. в разделе События, активирующие рабочие процессы.

Использование одного события

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

on: push

Использование нескольких событий

Можно указать одно или несколько событий. Например, рабочий процесс со следующим значением on будет выполняться при осуществлении отправки в любую ветвь в репозитории, или когда кто-то создает вилку репозитория:

on: [push, fork]

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

Использование типов действий и фильтров с несколькими событиями

Для дальнейшего управления выполнением рабочего процесса можно использовать типы действий и фильтры. Дополнительные сведения см. в разделах Использование типов действий событий и Использование фильтров. Если вы указываете типы действий или фильтры для события и триггеры рабочего процесса для нескольких событий, необходимо настроить каждое событие отдельно. Необходимо добавить двоеточие (:) ко всем событиям, включая события без конфигурации.

Например, рабочий процесс со следующим значением on будет выполняться в следующих случаях:

  • создание метки;
  • отправка в ветвь main в репозитории;
  • отправка в ветвь с поддержкой GitHub Pages.
on:
  label:
    types:
      - created
  push:
    branches:
      - main
  page_build:

Использование типов действий событий

Некоторые события имеют типы действий, позволяющие лучше контролировать выполнение рабочего процесса. Используйте on.<event_name>.types для определения типа действия для события, которое активирует запуск рабочего процесса.

Например, событие issue_comment имеет типы действий created, edited и deleted. Если рабочий процесс активируется в событии label, он будет выполняться при создании, изменении или удалении метки. Если указать тип действия created для события label, рабочий процесс будет запускаться при создании метки, но не при изменении или удалении метки.

on:
  label:
    types:
      - created

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

on:
  issues:
    types:
      - opened
      - labeled

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

Использование фильтров

Некоторые события имеют фильтры, позволяющие лучше контролировать выполнение рабочего процесса.

Например, событие push имеет фильтр branches, из-за которого рабочий процесс выполняется только при отправке в ветвь, которая соответствует фильтру branches, а не при любой отправке.

on:
  push:
    branches:
      - main
      - 'releases/**'

Использование фильтров для назначения определенных ветвей для событий запроса на вытягивание

При использовании событий pull_request и pull_request_target можно настроить выполнение рабочего процесса только для запросов на вытягивание, предназначенных для конкретных ветвей.

Используйте фильтр branches, если требуется включить шаблоны имен ветвей или как включить, так и исключить их. Используйте фильтр branches-ignore, если требуется только исключить шаблоны имен ветвей. Для одного и того же события в рабочем процессе нельзя использовать фильтры branches и branches-ignore одновременно.

Если вы определили и branches/branches-ignore, и paths, рабочий процесс будет запускаться только в случае, если выполнены оба фильтра.

Ключевые слова branches и branches-ignore принимают стандартные маски, использующие такие символы, как *, **, +, ?, ! и другие, чтобы соответствовать нескольким именам ветвей. Если имя содержит любой из этих символов и требуется буквальное совпадение, необходимо экранировать каждый из этих специальных символов с помощью \. Дополнительные сведения о стандартных масках см. в разделе Краткий справочник по шаблонам фильтров.

Пример: включение ветвей

Шаблоны, определенные в branches, оцениваются по имени ссылки Git. Например, указанный ниже рабочий процесс будет выполняться всякий раз, когда происходит событие pull_request для запроса на вытягивание, нацеленного на:

  • ветви с именем main (refs/heads/main);
  • ветви с именем mona/octocat (refs/heads/mona/octocat);
  • ветви, имя которой начинается с releases/, например releases/10 (refs/heads/releases/10);
on:
  pull_request:
    # Sequence of patterns matched against refs/heads
    branches:    
      - main
      - 'mona/octocat'
      - 'releases/**'

Пример исключения ветвей

В случае соответствия шаблона branches-ignore рабочий процесс не будет выполняться. Шаблоны, определенные в branches, оцениваются по имени ссылки Git. Например, указанный ниже рабочий процесс будет выполняться всякий раз, когда происходит событие pull_request, если при этом запрос на вытягивание не нацелен на:

  • ветви с именем mona/octocat (refs/heads/mona/octocat);
  • ветви, имя которой соответствует releases/**-alpha, например releases/beta/3-alpha (refs/heads/releases/beta/3-alpha);
on:
  pull_request:
    # Sequence of patterns matched against refs/heads
    branches-ignore:    
      - 'mona/octocat'
      - 'releases/**-alpha'

Пример: включение и исключение ветвей

Нельзя использовать branches и branches-ignore для фильтрации одного и того же события в одном рабочем процессе. Если вы хотите одновременно включить и исключить шаблоны ветвей для одного события, используйте фильтр branches с символом !, чтобы указать, какие ветви следует исключить.

Если вы определяете ветвь с символом !, необходимо также определить по крайней мере одну ветвь без символа !. Если вы хотите только исключить ветви, используйте вместо этого branches-ignore.

Порядок определения шаблонов имеет значение.

  • Соответствующий отрицательный шаблон (с префиксом !) после положительного совпадения исключает ссылку Git.
  • Соответствующий положительный шаблон после отрицательного совпадения снова включает ссылку Git.

Указанный ниже рабочий процесс будет выполняться на событиях pull_request для запросов на вытягивание, нацеленных на releases/10 или releases/beta/mona, но не для запросов на вытягивание, нацеленных на releases/10-alpha или releases/beta/3-alpha, потому что отрицательный шаблон !releases/**-alpha соответствует положительному шаблону.

on:
  pull_request:
    branches:    
      - 'releases/**'
      - '!releases/**-alpha'

Использование фильтров для назначения определенных ветвей или тегов для событий отправки

При использовании события push можно настроить выполнение рабочего процесса в определенных ветвях или тегах.

Используйте фильтр branches, если требуется включить шаблоны имен ветвей или как включить, так и исключить их. Используйте фильтр branches-ignore, если требуется только исключить шаблоны имен ветвей. Для одного и того же события в рабочем процессе нельзя использовать фильтры branches и branches-ignore одновременно.

Используйте фильтр tags, если требуется включить шаблоны имен тегов или как включить, так и исключить их. Используйте фильтр tags-ignore, если требуется только исключить шаблоны имен тегов. Для одного и того же события в рабочем процессе нельзя использовать фильтры tags и tags-ignore одновременно.

Если вы определяете только tags/tags-ignore или только branches/branches-ignore, рабочий процесс не будет выполняться для событий, затрагивающих не определенную ссылку Git. Если вы не определили ни tags/tags-ignore, ни branches/branches-ignore, рабочий процесс будет выполняться для событий, затрагивающих все ветви или теги. Если вы определили и branches/branches-ignore, и paths, рабочий процесс будет запускаться только в случае, если выполнены оба фильтра.

Ключевые слова branches, branches-ignore, tagsи tags-ignore принимают стандартные маски, использующие такие символы, как *, **, +, ?, ! и другие, для сопоставления нескольких имен ветвей или тегов. Если имя содержит любой из этих символов, и требуется буквальное совпадение, необходимо экранировать каждый из этих специальных символов с помощью \. Дополнительные сведения о стандартных масках см. в разделе Краткий справочник по шаблонам фильтров.

Пример. Включение ветвей и тегов

Шаблоны, определенные в branches и tags, применяются для имени ссылки Git. Например, следующий рабочий процесс будет выполняться всякий раз, когда событие push происходит в:

  • ветви с именем main (refs/heads/main);
  • ветви с именем mona/octocat (refs/heads/mona/octocat);
  • ветви, имя которой начинается с releases/, например releases/10 (refs/heads/releases/10);
  • теге с именем v2 (refs/tags/v2);
  • теге, имя которого начинается с v1., например v1.9.1 (refs/tags/v1.9.1).
on:
  push:
    # Sequence of patterns matched against refs/heads
    branches:    
      - main
      - 'mona/octocat'
      - 'releases/**'
    # Sequence of patterns matched against refs/tags
    tags:        
      - v2
      - v1.*

Пример. Исключение ветвей и тегов

Если шаблон соответствует шаблону branches-ignore или tags-ignore, рабочий процесс не будет выполняться. Шаблоны, определенные в branches и tags, применяются для имени ссылки Git. Например, следующий рабочий процесс будет выполняться всякий раз, когда происходит событие push, если при этом не происходит событие push в:

  • ветви с именем mona/octocat (refs/heads/mona/octocat);
  • ветви, имя которой соответствует releases/**-alpha, например beta/3-alpha (refs/releases/beta/3-alpha);
  • теге с именем v2 (refs/tags/v2);
  • теге, имя которого начинается с v1., например v1.9 (refs/tags/v1.9).
on:
  push:
    # Sequence of patterns matched against refs/heads
    branches-ignore:    
      - 'mona/octocat'
      - 'releases/**-alpha'
    # Sequence of patterns matched against refs/tags
    tags-ignore:        
      - v2
      - v1.*

Пример. Включение и исключение ветвей и тегов

Вы не можете использовать branches и branches-ignore для фильтрации одного и того же события в одном рабочем процессе. Аналогично, вы не можете использовать tags и tags-ignore для фильтрации одного и того же события в одном рабочем процессе. Если вы хотите одновременно включить и исключить шаблоны ветвей или тегов для одного события, используйте фильтр branches или tags с символом !, чтобы указать, какие ветви или теги следует исключить.

Если вы определяете ветвь с символом !, необходимо также определить по крайней мере одну ветвь без символа !. Если вы хотите только исключить ветви, используйте вместо этого branches-ignore. Аналогично, если вы определяете тег с символом !, необходимо также определить по крайней мере один тег без символа !. Если вы хотите только исключить теги, используйте вместо этого tags-ignore.

Порядок определения шаблонов имеет значение.

  • Соответствующий отрицательный шаблон (с префиксом !) после положительного совпадения исключает ссылку Git.
  • Соответствующий положительный шаблон после отрицательного совпадения снова включает ссылку Git.

Следующий рабочий процесс будет выполняться при отправке в releases/10 или releases/beta/mona, но не в releases/10-alpha или releases/beta/3-alpha, потому что за положительным шаблоном следует отрицательный шаблон !releases/**-alpha.

on:
  push:
    branches:
      - 'releases/**'
      - '!releases/**-alpha'

Использование фильтров для назначения определенных ветвей для запросов на вытягивание или событий отправки

При использовании событий push и pull_request можно настроить запускаемый рабочий процесс в зависимости от того, какие пути к файлам изменяются. Фильтры путей не оцениваются при отправке тегов.

Используйте фильтр paths, если требуется включить шаблоны путей к файлам или одновременно включить и исключить их. Используйте фильтр paths-ignore, если требуется только исключить шаблоны путей к файлам. Для одного и того же события в рабочем процессе нельзя использовать фильтры paths и paths-ignore одновременно.

Если определены как branches/branches-ignore, так и paths, рабочий процесс будет запускаться только в том случае, если выполнены оба фильтра.

Ключевые слова paths и paths-ignore принимают стандартные маски, в которых для соответствия нескольким именам путей используются подстановочные знаки * и **. Дополнительные сведения см. в разделе Памятка по шаблонам фильтров.

Пример. Включение путей

Если хотя бы один путь соответствует шаблону в фильтре paths, рабочий процесс запускается. Например, приведенный ниже рабочий процесс будет выполняться при каждой отправке файла JavaScript (.js).

on:
  push:
    paths:
      - '**.js'

Примечание. Если рабочий процесс пропускается из-за фильтрации путей, фильтрации ветви или сообщения фиксации, проверки, связанные с этим рабочим процессом, останутся в состоянии ожидания. Запрос на включение внесенных изменений, требующий успешной проверки, будет заблокирован при слиянии. Дополнительные сведения см. в разделе Обработка пропущенных, но обязательных проверок.

Пример. Исключение путей

Если все имена путей соответствуют шаблонам в paths-ignore, рабочий процесс не запускается. Если хотя бы одно имя пути не соответствует шаблонам в paths-ignore, рабочий процесс запускается.

Рабочий процесс с приведенным ниже фильтром пути будет выполняться только при событиях push с по крайней мере одним файлом за пределами каталога docs в корне репозитория.

on:
  push:
    paths-ignore:
      - 'docs/**'

Пример. Включение и исключение путей

Вы не можете использовать paths и paths-ignore для фильтрации одного и того же события в одном рабочем процессе. Если вы хотите одновременно включить и исключить шаблоны путей для одного события, используйте фильтр paths с символом !, чтобы указать, какие пути следует исключить.

Если вы определяете путь с символом !, необходимо также определить по крайней мере один путь без символа !. Если вы хотите только исключить пути, используйте вместо этого paths-ignore.

Порядок определения шаблонов имеет значение:

  • Соответствующий отрицательный шаблон (с префиксом !) после положительного совпадения исключает путь.
  • Соответствующий положительный шаблон после отрицательного совпадения снова включает путь.

Этот пример запускается каждый раз, когда событие push включает файл в каталоге sub-project или его подкаталогах, но не в каталоге sub-project/docs. Например, принудительная отправка с изменением sub-project/index.js или sub-project/src/index.js запустит выполнение рабочего процесса, но принудительная отправка, изменяющая только sub-project/docs/readme.md, не запустит его.

on:
  push:
    paths:
      - 'sub-project/**'
      - '!sub-project/docs/**'

Сравнение различий в GIT

Примечание. Если вы отправляете более 1000 фиксаций или если GitHub не создает различие из-за истечения времени ожидания, рабочий процесс запускается всегда.

Фильтр определяет, должен ли запускаться рабочий процесс, оценивая измененные файлы и проверяя их по списку paths-ignore или paths. Если измененных файлов нет, рабочий процесс не запускается.

GitHub создает список измененных файлов, используя различия с двумя точками для push-уведомлений и с тремя точками — для запросов на вытягивание.

  • Запросы на вытягивание. Различия с тремя точками — это сравнение последней версией тематической ветки с фиксацией, в которой тематическая ветка была в последний раз синхронизирована с основной ветвью.
  • Отправки в существующие ветви. Различие с двумя точками — это сравнение головных и базовых значений SHA непосредственно друг с другом.
  • Отправки в новые ветви. Различие с двумя точками в сравнении с родителем предка самой глубокой отправленной фиксации.

Различия ограничены 300 файлами. Если существуют соответствующие измененные файлы, которые не вошли в первые 300 файлов, возвращенных фильтром, рабочий процесс не запускается. Возможно, потребуется создать более узкие фильтры, чтобы рабочий процесс запускался автоматически.

Дополнительные сведения см. в разделе Сравнение ветвей в запросах на вытягивание.

Использование фильтров для назначения определенных ветвей для событий выполнения рабочего процесса

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

В фильтрах branches и branches-ignore можно использовать стандартные маски с такими символами, как *, **, +, ?, ! и другие, для сопоставления нескольких имен ветвей. Если имя содержит любой из этих символов, и требуется буквальное совпадение, необходимо экранировать каждый из этих специальных символов с помощью \. Дополнительные сведения о стандартных масках см. в разделе Краткий справочник по шаблонам фильтров.

Например, рабочий процесс со следующим триггером будет выполняться, только если рабочий процесс с именем Build выполняется в ветви, имя которой начинается с releases/.

on:
  workflow_run:
    workflows: ["Build"]
    types: [requested]
    branches:
      - 'releases/**'

Рабочий процесс со следующим триггером будет выполняться, только если рабочий процесс с именем Build выполняется в ветви с именем отличным от canary.

on:
  workflow_run:
    workflows: ["Build"]
    types: [requested]
    branches-ignore:
      - "canary"

Для одного и того же события в рабочем процессе нельзя использовать фильтры branches и branches-ignore одновременно. Если вам нужно с помощью шаблонов одновременно включить и исключить имена ветвей для одного события, используйте фильтр branches с символом !, чтобы указать, какие ветви следует исключить.

Порядок определения шаблонов имеет значение.

  • Если после включающего шаблона идет исключающий (с префиксом !) и найдена ветвь, соответствующая им обоим, такая ветвь исключается.
  • Если после исключающего шаблона идет включающий, ветвь, соответствующая им обоим, снова включается.

Например, рабочий процесс со следующим триггером будет выполняться, если рабочий процесс с именем Build выполняется в ветви с именем releases/10 или releases/beta/mona, но не в ветви releases/10-alpha, releases/beta/3-alpha или main.

on:
  workflow_run:
    workflows: ["Build"]
    types: [requested]
    branches:
      - 'releases/**'
      - '!releases/**-alpha'

Определение входных данных для рабочих процессов, активированных вручную

При использовании события workflow_dispatch можно дополнительно указать входные данные, передаваемые рабочему процессу.

Активированный рабочий процесс получает входные данные в контексте github.event.inputs. Дополнительные сведения см. в разделе «Контексты».

on:
  workflow_dispatch:
    inputs:
      logLevel:
        description: 'Log level'
        required: true
        default: 'warning' 
        type: choice
        options:
        - info
        - warning
        - debug 
      print_tags:
        description: 'True to print to STDOUT'
        required: true 
        type: boolean 
      tags:
        description: 'Test scenario tags'
        required: true 
        type: string
      environment:
        description: 'Environment to run tests against'
        type: environment
        required: true 

jobs:
  print-tag:
    runs-on: ubuntu-latest
    if:  ${{ github.event.inputs.print_tags == 'true' }} 
    steps:
      - name: Print the input tag to STDOUT
        run: echo  The tags are ${{ github.event.inputs.tags }} 

Определение входных, выходных данных и секретов для повторно используемых рабочих процессов

Примечание. Повторно используемые рабочие процессы доступны в общедоступной бета-версии и могут быть изменены.

Вы можете определить входные данные и секреты, которые рабочий процесс, доступный для повторного использования, должен получать от вызывающего рабочего процесса. Вы также можете указать выходные данные, которые повторно используемый рабочий процесс сделает доступным для вызывающего рабочего процесса. Дополнительные сведения см. в статье Многократное использование рабочих процессов.

Использование сведений о событии

Сведения о событии, которое активировало рабочий процесс, доступны в контексте github.event. Свойства в контексте github.event зависят от типа события, которое активировало рабочий процесс. Например, рабочий процесс, запускаемый при присвоении метки проблеме, будет содержать сведения о проблеме и метке.

Просмотр всех свойств события

Обратитесь к документации по событиям веб-перехватчиков, чтобы ознакомиться с общими свойствами и примерами полезных данных. Дополнительные сведения см. в разделе События веб-перехватчика и полезные данные.

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

jobs:
  print_context:
    runs-on: ubuntu-latest
    steps:
      - env:
          EVENT_CONTEXT: ${{ toJSON(github.event) }}
        run: |
          echo $EVENT_CONTEXT

Доступ к свойствам события и их использование

Вы можете использовать контекст github.event в своем рабочем процессе. Например, следующий рабочий процесс выполняется при открытии запроса на вытягивание, который изменяет package*.json, .github/CODEOWNERS или .github/workflows/**. Если автор запроса на вытягивание (github.event.pull_request.user.login) не является octobot или dependabot[bot], рабочий процесс использует GitHub CLI для добавления меток и комментариев к запросу на вытягивание (github.event.pull_request.number).

on:
  pull_request:
    types:
      - opened
    paths:
      - '.github/workflows/**'
      - '.github/CODEOWNERS'
      - 'package*.json'

jobs:
  triage:
    if: >-
      github.event.pull_request.user.login != 'octobot' &&
      github.event.pull_request.user.login != 'dependabot[bot]'
    runs-on: ubuntu-latest
    steps:
      - name: "Comment about changes we can't accept"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR: ${{ github.event.pull_request.html_url }}
        run: |
          gh pr edit $PR --add-label 'invalid'
          gh pr comment $PR --body 'It looks like you edited `package*.json`, `.github/CODEOWNERS`, or `.github/workflows/**`. We do not allow contributions to these files. Please review our [contributing guidelines](https://github.com/octo-org/octo-repo/blob/main/CONTRIBUTING.md) for what contributions are accepted.'

Дополнительные сведения о контекстах см. в разделе Контексты. Дополнительные сведения о полезных данных события см. в разделе События веб-перехватчика и полезные данные.

Дальнейшее управление запуском рабочего процесса

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

Использование условных выражений

Условные выражения можно использовать для дальнейшего управления выполнением заданий или шагов в рабочем процессе.

Пример использования значения в полезных данных события

Например, если требуется, чтобы рабочий процесс выполнялся при добавлении определенной метки в проблему, можно активировать тип действия события issues labeled и использовать условное выражение для проверки того, какая метка активировала рабочий процесс. Следующий рабочий процесс будет выполняться при добавлении метки в проблему в репозитории рабочего процесса, но задание run_if_label_matches будет выполняться только в том случае, если метка называется bug.

on:
  issues:
    types:
      - labeled

jobs:
  run_if_label_matches:
    if: github.event.label.name == 'bug'
    runs-on: ubuntu-latest
    steps:
      - run: echo 'The label was bug'

Пример использования типа события

Например, если вы хотите выполнять различные задания или шаги в зависимости от того, какое событие активировало рабочий процесс, можно использовать условное выражение, чтобы проверить, существует ли определенный тип события в контексте события. Следующий рабочий процесс будет выполняться при закрытии проблемы или запроса на вытягивание. Если рабочий процесс были выполнен по причине закрытия проблемы, контекст github.event будет содержать значение для issue, но не для pull_request. Поэтому шаг if_issue будет выполняться, а шаг if_pr не будет выполняться. Если рабочий процесс были выполнен по причине закрытия запроса на вытягивание,шаг if_pr будет выполняться, а шаг if_issue — нет.

on:
  issues:
    types:
      - closed
  pull_request:
    types:
      - closed

jobs:
  state_event_type:
    runs-on: ubuntu-latest
    steps:
    - name: if_issue
      if: github.event.issue
      run: |
        echo An issue was closed
    - name: if_pr
      if: github.event.pull_request
      run: |
        echo A pull request was closed

Дополнительные сведения о том, какие сведения доступны в контексте события, см. в разделе Использование сведений о событии. Дополнительные сведения об использовании условных выражений см. в разделе Выражения.

Использование сред для активации заданий рабочих процессов вручную

Если вы хотите вручную активировать определенное задание в рабочем процессе, можно использовать среду, требующую утверждения от определенной команды или пользователя. Сначала настройте среду с необходимыми рецензентами. Дополнительные сведения см. в разделе Использование сред для развертывания. Затем укажите имя среды в задании в рабочем процессе с помощью ключа environment:. Любое задание, ссылающееся на среду, не будет выполняться, пока хотя бы один рецензент не утвердит задание.

Например, следующий рабочий процесс будет выполняться всякий раз, когда выполняется отправка в главную ветвь. Задание build будет выполняться всегда. Задание publish будет выполняться только после успешного завершения задания build (ввиду needs: [build]) и после соблюдения требований всех правил (включая обязательных рецензентов) для среды, называемой production (ввиду environment: production).

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: build
        echo 'building'

  publish:
    needs: [build]
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: publish
        echo 'publishing'

Среды, секреты среды и правила защиты среды доступны в общедоступных репозиториях для всех продуктов. Для доступа к средам, секретам сред и ветвям развертываний в частных или внутренних репозиториях необходимо использовать GitHub Pro, GitHub Team или GitHub Enterprise. Для доступа к другим правилам защиты среды в частных или внутренних репозиториях необходимо использовать GitHub Enterprise.

Доступные события

Полный список доступных событий см. в разделе События, активирующие рабочие процессы.