GitHub Actions: типы входных параметров для workflow вызываемых вручную
В данной заметке, рассматриваются типы данных, которые могут быть использованы в качестве входных параметров в GitHub Actions для workflow запускаемых пользователем вручную (workflow dispatch).
Для workflow вызываемых вручную GitHub Actions поддерживает 4 типа входных параметров (inputs):
И если в случае со строковым типом string
все довольно понятно, то остальные типы имеют интересные особенности, которые стоит обсудить.
Boolean
Начнем с типа boolean
. Казалось бы с ним тоже все должно быть очевидно, но не все так просто.
Рассмотрим запускаемый вручную workflow с входными параметрами:
name: Mixed inputs on: workflow_dispatch: inputs: name: type: choice description: Who to greet options: - monalisa - cschleiden message: required: true use-emoji: type: boolean description: Include emojis environment: type: environment jobs: greet: runs-on: ubuntu-latest steps: - name: Send greeting run: echo "Hello world!"
Параметр use-emoji
тут имеет тип boolean
. Кажется мы можем рассчитывать на то, что что-нибудь подобное сработает:
if: ${{ github.event.inputs.use-emoji == true }}
И тут мы обнаружим, что хотя для use-emoji
явно указан тип boolean
, фактически мы получили строку.
В репозитории Actions на GitHub уже заведено issue на эту тему.
Поэтому, если мы хотим обращаться с этим параметром как с boolean
, то необходимо привести типы.
Для того чтобы привести тип string
к boolean в GitHub Actions есть способ:
if: ${{ parseJSON(github.event.inputs.use-emoji) == true }}
Или если вы передаете это значение в повторно используемый воркфлоу (reusable workflow), то сделать это можно так:
jobs: greet: uses: user/repository/.github/workflows/greeting_workflow.yml@main with: use-emoji: ${{ fromJSON(github.event.inputs.use-emoji) }} # OR use-emoji: ${{ github.event.inputs.use-emoji == 'true' }}
При использовании в запускаемом вручную workflow, входной параметр типа boolean
отображается как чекбокс:
Choice
С типом choice
все существенно проще.
Декларируется он следующим образом:
on: workflow_dispatch: inputs: name: type: choice description: Who to greet options: - monalisa - cschleiden
Обращаться с ним можно точно так же как с обычной строкой:
greet: runs-on: ubuntu-latest steps: - name: Send greeting run: echo "Hello, ${{ github.event.inputs.name }}
При ручном запуске workflow отображается как выпадающий список:
Environment
И последний тип - environment
. Его название точно отражает назначение. Тип environment
применяется для разделения сред выполнения (dev/test/prod и т.д.).
В меню такой входной параметр отображается как выпадающий список, аналогично элементу choice
. Разница в том, откуда подтягиваются данные для его заполнения. Если в случае choice варианты декларируются тут же, то в случае с environment, они подтягиваются из соответствующего раздела в настройках репозитория:
Там мы можем настроить различные параметры специфичные для конкретной среды: пользователи, которым разрешено запускать workflow для данной среды, задержку выполнения, ветки, для которых workflow может быть запущен. Также, можно указать секреты для каждой из сред индивидуально.
Ссылки
Пост на Github Blog в разделе Changelog "GitHub Actions: Input types for manual workflows"
Пост на Medium: "GitHub Actions: Passing Boolean input variables to reusable workflow_call"