Для одного из моих проектов я устанавливаю вывод действия из скрипта 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. Тем не менее, я быстро хотел перепроверить, может быть, что-то не так с моим синтаксисом.
Прогон, на который вы ссылаетесь, имеет оба выхода, один из скрипта установлен на test
, как вы установили его в скрипте.
Ах, ты прав. Спасибо что подметил это. Последние коммиты, которые я сделал, по-видимому, исправили проблему. Похоже, в ломаной версии отсутствовал элемент id
(см. github.com/rickstaa/hello-world-composite-action-output-bug/…).
Я нашел свою проблему, используя комментарий @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
В этот рабочий процесс запущен, вроде нормально сработал?