Как передать аргументы в большом количестве на другой шаг в действии Github?

#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"));
 

Это должно вам помочь.