Используя действия 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/
Одним из вариантов может быть использование функции join с пробелом, но для этого необходимо, чтобы имена ваших каталогов не содержали пробелов.
Это не проблема, папки не содержат пробелов. Смогу ли я указать путь к подпапкам отдельно от запуска?
Для надежного решения вы можете использовать отдельный шаг, на котором вы устанавливаете каталоги, а затем ссылаетесь на них на шаге «Запуск сценария на целях». Предыдущий шаг мог записать во временный файл или установить вывод с помощью объекта JSON, чтобы затем ссылаться...
Сегодня я смог сделать это со следующим 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 зависимых запуска - нет (в зависимости от вашей основной логики).
@MihaiGalos конечно! Сегодня я только что закончил репозиторий GitHub Action, который зависит от этой логики, вы можете увидеть его успешный запуск здесь: github.com/meese-enterprises/meeseOS/runs/…. Дайте мне знать, если вы не видите его!
Я не думаю, что вы можете установить массивы в среде. Для того, что вы показываете, вы можете просто вставить строки прямо в поле
run:
; откуда вы на самом деле берете цели?