#github #github-actions
#github #github-действия
Вопрос:
Я хочу передать значение, установленное core.setOutput
для разных шагов одновременно. Итак, я передал результаты шага hello-action
на другой шаг:
//index.js
const core = require("@actions/core");
core.setOutput("res1","res1");
core.setOutput("res2","res2");
core.setOutput("res3","res3");
jobs:
build:
runs-on: ubuntu-latest
name: Hello
steps:
- name: Checkout
uses: actions/checkout@master
- name: run hello action
id: hello-action
run: node index.js
- name: run hello2 action
id: hello2-action
run: node index2.js
with:
outputs: ${{ steps.hello-action.outputs }}
суть в этом.
outputs: ${{ steps.hello-action.outputs }}
Тип указанного выше значения является объектом, но я не смог получить доступ к ключу внутри объекта.
//index2.js
const core = require("@actions/core");
const outputs = core.getInput("outputs");
console.log("hello2 outputs:", outputs); //result is [object Object]
console.log("hello2 outputs:", outputs.res1); //result is undefined
Есть ли способ передавать аргументы оптом?
Ответ №1:
Объекты не могут быть переданы output
из действия, только строки. Поэтому при передаче объекта из пользовательского действия toString()
для него будет вызываться метод. В результате вы получаете свои [object Object]
уже в момент выполнения этого действия здесь:
- name: run hello action
id: hello-action
run: node index.js
Чтобы перенести структуры данных из пользовательского действия, приведите объект к строке JSON с помощью JSON.stringify()
метода.
первое действие
//index1.js
const obj = {
field1: "value1",
field2: "value2",
}
core.setOutput("outputs", JSON.stringify(obj));
И на втором шаге проанализируйте JSON
строку
второе действие
//index2.js
const core = require("@actions/core");
const outputs = JSON.parse(core.getInput("outputs"));
Это должно вам помочь.