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"