Контекст GitVerse
Контекст — это набор данных, описывающих текущее состояние системы во время выполнения workflow. С его помощью можно получать значения переменных, статусов, имён веток, пользователей, событий и многое другое.
Что такое контекст
Контекст — это встроенная структура данных, доступная в каждом шаге workflow.
Она позволяет обращаться к информации о:
- текущем репозитории, коммите, ветке;
- джобах и шагаx (их статусах, результатах);
- пользователе, событии-триггере, секретах и переменных;
- среде выполнения (runner, ОС, архитектура, путь и т.д.).
Контексты делают workflow динамичным — вы можете подставлять значения в runtime, не захардкоживая их в YAML.
Пример использования
Контексты вызываются через синтаксис ${{ ... }} и доступны во всех выражениях (if:, run:, env: и т.д.).
name: Простой пример использования контекста
on: [push]
jobs:
show-context:
runs-on: ubuntu-latest
steps:
- name: Выведем ветку и инициатора пуша
run: echo "Commit by ${{ gitverse.actor }} on branch ${{ gitverse.ref_name }}"| Контекст | Описание | Пример обращения |
|---|---|---|
gitverse | Информация о событии, репозитории и.т.д | ${{ gitverse.repository }} |
github | То же самое что и gitverse, для собратной совместимости | ${{ github.repository }} |
env | Переменные окружения | ${{ env.MY_VAR }} |
job | Данные о текущей job в workflow | ${{ job.build.result }} |
jobs | Данные о всех job в workflow | ${{ jobs.build.result }} |
runner | Сведения о среде выполнения (ОС, архитектура) | ${{ runner.os }} |
secrets | Секреты, заданные в настройках репозитория | ${{ secrets.TOKEN }} |
strategy | Данные о matrix-сборке | ${{ strategy.job-index }} |
matrix | Текущие значения matrix-параметров | ${{ matrix.python-version }} |
steps | Результаты предыдущих шагов | ${{ steps.test.outputs.coverage }} |
inputs | Входные параметры для workflow_call | ${{ inputs.name }} |
vars | Переменные, заданные на уровне репозитория или организации | ${{ vars.ENVIRONMENT }} |
Пример с условиями
steps:
- name: Деплоить только из ветки main
if: ${{ gitverse.ref_name == 'master' && gitverse.event_name == 'push' }}
run: echo "Deploying to production..."
- name: Печатаем env контекст
run: echo '${{ toJson(env) }}