Выполните команду, выводящую данные с предыдущего шага в действиях GitHub

#yaml #github-actions

Вопрос:

Я пытаюсь выполнить действие GitHub, которое создает веб-сайт Hugo, развертывает его на Pinata и сохраняет выходной хэш этого последнего шага в txt-файл. Мне удалось сделать первый и второй шаги. И, для третьего, я пытался сделать это, выполнив команду «эхо». Однако я получаю следующее сообщение: «У вас есть ошибка в синтаксисе yaml в строке 36»

Как запустить скрипт, берущий выходные данные с шага, определенного как «ipfs-pin»?

Вот мой код:

 name: deploy
 on:
  push:
   branches: [ main ]
   pull_request:
   branches: [ main ]
   workflow_dispatch:
jobs:
 build:
  runs-on: ubuntu-latest
   steps:
   - uses: actions/checkout@master
   - uses: jakejarvis/hugo-build-action@master
     with:
      args: --minify --buildDrafts
   - uses: anantaramdas/ipfs-pinata-deploy-action@v1.6.4
     id: ipfs-pin
      with:
       pin-name: '[my-pin-name]'
       path: './public'
       pinata-api-key: [API Key]
       pinata-secret-api-key: [secret API Key]
       verbose: true
       remove-old: true
  saves-hash-on-file:
   runs-on: ubuntu-latest
    steps:
  - uses: actions/checkout@v2
  - uses: actions/setup-node@v2
    with:
      node-version: '14'
  - run: echo ${{steps.build.ipfs-pin.hash}} > /.github/ipfs-hash.txt
 

Комментарии:

1. Вы пробовали добавить needs: build конфигурацию второго задания? Если я не ошибаюсь, это обязательно, когда вы хотите использовать результаты конкретной работы. Я бы также попробовал добавить ${{ … }} эхо-часть между " для устранения синтаксической ошибки.

2. @GuiFalourd Хорошо! Спасибо. Я добавил эти две вещи. Однако я все равно получаю синтаксическую ошибку. Похоже, он находится в последней строке перед вторым заданием.

3. Кажется, я понял, что произошло. Во-первых, это, кажется, ваш отступ есть проблемы, я воспроизвел процесс, чтобы исправить это, не возвращая ошибку здесь: github.com/GuillaumeFalourd/poc-github-actions/blob/main/… — во-вторых: я не видел его в первый раз, но ты забыл добавить outputs поле в job1 (сборка) уровня, без этого ты не можешь поделиться вывод на другую работу (я не смог запустить его успешно, так как у меня нет учетных данных для тестирования). Это должно сработать, если вы скопируете/вставите рабочий процесс, которым я поделился, используя свои учетные данные.

4. Дайте мне знать, если это сработает, чтобы я добавил официальный ответ 🙂

5. @GuiFalourd да, конечно! Это работает. Спасибо!!

Ответ №1:

Первый

Похоже, у вашего отступа есть проблема, я воспроизвел рабочий процесс, чтобы исправить его, не возвращая ошибку при запуске рабочего процесса в репозитории:

 name: Deploy

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      hash: ${{ steps.ipfs-pin.outputs.hash }}
    steps:
      - uses: actions/checkout@master
      - uses: jakejarvis/hugo-build-action@master
        with:
          args: --minify --buildDrafts
      - uses: anantaramdas/ipfs-pinata-deploy-action@v1.6.4
        id: ipfs-pin
        with:
          pin-name: '[my-pin-name]'
          path: './public'
          pinata-api-key: '[API Key]'
          pinata-secret-api-key: '[secret API Key]'
          verbose: true
          remove-old: true

  saves-hash-on-file:
    runs-on: ubuntu-latest
    needs: [build]
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: '14'
      - run: echo ${{steps.build.outputs.hash}} > /.github/ipfs-hash.txt
 

Второй

Как вы можете видеть в приведенном выше рабочем процессе, я добавил outputs поле на уровне задания 1 (сборка), без этого вы не сможете делиться результатами на других заданиях.

Справка о результатах

Кроме того, чтобы разделить выходные данные между заданиями, вам придется добавить needs: [build] строку на уровне job2 (сохранение хэша в файле).

Примечание: Я не смог запустить его успешно, так как у меня нет никаких учетных данных для тестирования, но он должен работать, если вы скопируете/вставите рабочий процесс, которым я поделился, используя свои учетные данные.