Действия GitHub передают список переменных в скрипт оболочки

Используя действия GitHub, я хотел бы вызвать сценарий оболочки со списком каталогов. (По существу эквивалентно передаче списка Ansible vars в сценарий оболочки)

Я действительно не знаю, как это вообще возможно? Вот что у меня есть до сих пор, как можно улучшить это?

name: CI

on:
  push:
    branches:
      - master

    tags:
      - v*

  pull_request:

jobs:
  run-script:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v2

      - name: Run script on targets
        run: ./.github/workflows/script.sh {{ targets }}
        env:
          targets:
            - FolderA/SubfolderA/
            - FolderB/SubfolderB/

Я не думаю, что вы можете установить массивы в среде. Для того, что вы показываете, вы можете просто вставить строки прямо в поле run:; откуда вы на самом деле берете цели?

Benjamin W. 17.12.2020 18:33

Одним из вариантов может быть использование функции join с пробелом, но для этого необходимо, чтобы имена ваших каталогов не содержали пробелов.

Benjamin W. 17.12.2020 18:34

Это не проблема, папки не содержат пробелов. Смогу ли я указать путь к подпапкам отдельно от запуска?

Mihai Galos 17.12.2020 18:36

Для надежного решения вы можете использовать отдельный шаг, на котором вы устанавливаете каталоги, а затем ссылаетесь на них на шаге «Запуск сценария на целях». Предыдущий шаг мог записать во временный файл или установить вывод с помощью объекта JSON, чтобы затем ссылаться...

Benjamin W. 17.12.2020 18:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
4
2 199
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сегодня я смог сделать это со следующим YAML (усеченным):

...
with:
  targets: |
    FolderA/SubfolderA
    FolderB/SubfolderB

Фактическое действие GitHub передает это как аргумент, подобный следующему:

runs:
  using: docker
  image: Dockerfile
  args:
    - "${{ inputs.targets }}"

Это просто отправляет параметры в виде строки со встроенными символами новой строки, которые затем можно повторять аналогично массиву в соответствии с POSIX с помощью следующего кода оболочки:

#!/bin/sh -l

targets = "${1}"

for target in $targets
do
  echo "Proof that this code works: $target"
done

Который должен быть способен выполнить желаемую задачу, если я правильно понимаю вопрос. Вы всегда можете запустить что-то вроде sh ./script.sh $target в цикле, если этого требует ваш вариант использования.

Привет, Аарон, у вас есть успешный запуск, то есть общедоступное действие GitHub, чтобы я мог проверить и одобрить ваш ответ? Второй вариант, включающий цикл, не решает проблему полностью, поскольку 2 независимых запуска могут работать правильно, а 2 зависимых запуска - нет (в зависимости от вашей основной логики).

Mihai Galos 09.07.2022 21:50

@MihaiGalos конечно! Сегодня я только что закончил репозиторий GitHub Action, который зависит от этой логики, вы можете увидеть его успешный запуск здесь: github.com/meese-enterprises/meeseOS/runs/…. Дайте мне знать, если вы не видите его!

Aaron Meese 10.07.2022 01:25

Другие вопросы по теме