Контекст GitVerse
Info
Контекст — это набор данных, описывающих текущее состояние системы во время выполнения workflow. С его помощью можно получать значения переменных, статусов, имен веток, пользователей, событий и многое другое.
Что такое контекст
Контекст — это встроенная структура данных, доступная в каждом шаге workflow.
Она позволяет обращаться к информации о:
- текущем репозитории, коммите, ветке;
- джобах и шагаx (их статусах, результатах);
- пользователе, событии-триггере, секретах и переменных;
- среде выполнения (runner, ОС, архитектура, путь и т.д.).
Контексты делают workflow динамичным — вы можете подставлять значения в runtime, не захардкоживая их в YAML.
Пример использования
Info
Контексты вызываются через синтаксис
${{ ... }}и доступны во всех выражениях (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) }}Доступ к репозиториям организации
Когда workflow запущен на раннере организации, он имеет автоматический доступ ко всем репозиториям этой организации, включая приватные. Это позволяет выполнять операции checkout и uses для других репозиториев внутри той же организации без необходимости в дополнительных настройках авторизации.
Однако доступ к репозиториям ограничен политикой безопасности.
Разрешено:
- приватный репозиторий → Приватный репозиторий (если оба принадлежат одному владельцу);
- приватный репозиторий → Публичный репозиторий (если оба принадлежат одному владельцу);
- публичный репозиторий → Публичный репозиторий (если оба принадлежат одному владельцу);
- публичный репозиторий → Публичный репозиторий (если репозитории принадлежат разным владельцам, и владелец клонируемого репозитория имеет публичную видимость).
Запрещено:
- приватный репозиторий → Приватный репозиторий (если принадлежат разным владельцам);
- приватный репозиторий → Публичный репозиторий (если принадлежат разным владельцам, и владелец клонируемого репозитория не имеет публичной видимости);
- публичный репозиторий → Приватный репозиторий;
- публичный репозиторий → Публичный репозиторий (если репозитории принадлежат разным владельцам, и владелец клонируемого репозитория не имеет публичной видимости).
Пример использования:
name: Простой пример доступа к репозиториям
on: [push]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout основного репозитория
uses: actions/checkout@v4
- name: Checkout другого репозитория из организации
uses: actions/checkout@v4
with:
repository: organisation/another-repo
ref: 'master'
- name: Читаем код из другого репозитория
run: |
echo "README другого репозитория"
ls -la
cat README.md