Недавно я начал новый проект под названием DevData Tools, который представляет собой онлайн-инструмент, который предоставляет набор инструментов, полезных для конкретных нужд, ядром проекта был инструмент с утилитами для простого создания описания сценариев использования и описания тестовых примеров и экспорта в PDF как table, инструмент полезен тем, кому нелегко иметь дело с файлами и таблицами Word, но этого достаточно, чтобы написать еще одну статью ...

В этом контексте я развертывал интерфейсное приложение на хостинге Firebase, а внутреннее приложение - на Heroku, причем интерфейс был легко настроен с файлом .yml для рабочего процесса действия github, действие Firebase сделало весь процесс deploy, нужен только токен, который я хранил в секрете Github Repo.

До сих пор все было в порядке, но дело в том, что когда я развернул внутреннее приложение, которое я пишу на Golang, все настройки и файлы были в порядке, проблема была в моем devdatatools-firebase-adminsdk.json файле, который я добавил в свой .gitignore файл в корень репо при загрузке в Github, но это было сделано намеренно.

Этот файл нужно игнорировать, зачем нужны какие-то закрытые ключи о sdk администратора Firebase, поэтому, когда я развернул локально, все было в порядке, потому что было там, но в CI действие heroku получало HEAD ветки, в данном случае master и развертывание на героку без этого файла. Дело в том, что мне пришлось создать этот файл во время выполнения рабочего процесса для развертывания на Heroku. На этом этапе мой .yml файл рабочего процесса выглядел так:

Все действия в Github Marketplace не очень хорошо справлялись с моими потребностями,
наиболее подходящим был create-env-json, но мне нужно было создать файл .json в подпапке src, а также более динамичным способом, например pass весь json в секрете репо или в строке атрибута действия.

Итак, я начал искать, как работают действия, и обнаружил, что могу использовать свои знания Javascript для написания действия с использованием среды узла, первое чтение касалось основных зависимостей, каковы основные функциональные возможности, чтобы получить сделку, когда вы выполняете свое действие. .



Создав простой проект npm с помощью git init и добавив в качестве зависимости, вся среда для выполнения записи файла .json была в моих руках. Было много тестов, чтобы понять, как получаются переменные env действия, мне очень помогают документы github:



Вы можете просмотреть код действия в этом репозитории:



Развернуть действие очень просто, если вы соблюдаете все требования файла action.yml, описывающего действие, и файла index.js с функциональностью, объявленной в качестве точки входа в файле package.json, остается только создать новую версию в репозитории Github.



А теперь, если вам нужно создать файл json во время выполнения рабочего процесса, вы можете легко добавить это действие в свой .yml файл рабочего процесса.

В конечном итоге в моем файле рабочего процесса для правильной работы использовалось мое недавно опубликованное действие:

Все тесты экшена и моего развертывания на Heroku занимают два дня моих выходных, но это того стоит!