GitHub Actions
May 8

GitHub Actions: типы входных параметров для workflow вызываемых вручную

В данной заметке, рассматриваются типы данных, которые могут быть использованы в качестве входных параметров в GitHub Actions для workflow запускаемых пользователем вручную (workflow dispatch).

Для workflow вызываемых вручную GitHub Actions поддерживает 4 типа входных параметров (inputs):

  • string
  • boolean
  • choice
  • environment

И если в случае со строковым типом 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"

Официальная документация GitHub Actions