Выход составного действия Github не может быть установлен из скрипта bash

Для одного из моих проектов я устанавливаю вывод действия из скрипта bash, который выполняется внутри составного действия. Я обнаружил, что на GitHub есть отличная документация о том, как создать вывод составного действия GitHub. В нем говорится, что это можно сделать с помощью следующего action.yml файла.

name: 'Hello World'
description: 'Greet someone'
inputs:
  who-to-greet:  # id of input
    description: 'Who to greet'
    required: true
    default: 'World'
outputs:
  random-number:
    description: "Random number"
    value: ${{ steps.random-number-generator.outputs.random-number }}
runs:
  using: "composite"
  steps:
    - run: echo Hello ${{ inputs.who-to-greet }}.
      shell: bash
    - id: random-number-generator
      run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
      shell: bash
    - run: echo "${{ github.action_path }}" >> $GITHUB_PATH
      shell: bash
    - run: goodbye.sh
      shell: bash

Я проверил результаты, используя следующий рабочий процесс, и он работает.

on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v3
      - id: foo
        uses: actions/hello-world-composite-action@v1
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number ${{ steps.foo.outputs.random-number }}
        shell: bash

Однако мой вариант использования отличается от приведенного выше примера тем, что я должен установить выходную переменную внутри скрипта goodbye.sh. Согласно документации, это нужно делать с помощью переменной GITHUB_OUTPUT:

echo "{name} = {value}" >> $GITHUB_OUTPUT

После некоторого тестирования этот метод не работает для составных действий. Поскольку это также может быть ошибкой или не поддерживаться, я создал отчет об ошибке на https://github.com/orgs/community/discussions/47775. Тем не менее, я быстро хотел перепроверить, может быть, что-то не так с моим синтаксисом.

Действия по воспроизведению

  1. Форк этого репозитория.
  2. Включите действия GitHub на форке.
  3. Вставьте коммит в свою вилку.
  4. Обратите внимание, что при установке случайного числа bash устанавливается только переменная случайного числа (см. этот пример рабочего процесса).

🤔 А знаете ли вы, что...
Bash предоставляет множество полезных команд для работы с сетью и сетевыми соединениями.


60
1

Ответ:

Решено

Я нашел свою проблему, используя комментарий @benjamin-w. Проблема заключалась в том, что шаг goodbye.sh должен содержать ключ id для правильной ссылки на созданный вывод. Правильный синтаксис должен быть:

action.yml

name: 'Hello World'
description: 'Greet someone'
inputs:
  who-to-greet:  # id of input
    description: 'Who to greet'
    required: true
    default: 'World'
outputs:
  random-number:
    description: "Random number"
    value: ${{ steps.random-number-generator.outputs.random-number }}
  random-number-bash:
    description: "Random number bash"
    value: ${{ steps.random-number-generator-bash.outputs.random-number-bash }}
runs:
  using: "composite"
  steps:
    - run: echo Hello ${{ inputs.who-to-greet }}.
      shell: bash
    - id: random-number-generator
      run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
      shell: bash
    - run: echo "${{ github.action_path }}" >> $GITHUB_PATH
      shell: bash
    - run: goodbye.sh
      id: random-number-generator-bash
      shell: bash

И правильный синтаксис для создания вывода в скрипте goodbye.sh должен быть таким:

До свидания.ш

echo "Goodbye"
echo "random-number-bash=$(echo 123)" >> $GITHUB_OUTPUT

Который затем можно протестировать с помощью следующего файла рабочего процесса:

Рабочий процесс тестирования

on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v3
      - id: foo
        uses: rickstaa/hello-world-composite-action-output-bug@main
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number ${{ steps.foo.outputs.random-number }}
        shell: bash
      - run: echo random-number ${{ steps.foo.outputs.random-number-bash }}
        shell: bash