Skip to content

Base

Базовый класс для GitHub Action.

ActionBase также предоставляет вспомогательные методы для вывода стандартных GitHub workflow команд. С помощью debug(message: str) можно писать диагностические сообщения, которые появятся только при запуске job с включенным debug-логированием. Для аннотаций, которые должны отображаться в разделе “Files changed”, используйте ActionBase.message() или её варианты error_message, notice_message и warning_message, чтобы передать путь к файлу, строку и колонку:

class MyAction(ActionBase):
    def main(self):
        self.debug("Завершён разбор конфигурации")
        self.error_message(
            message="Неизвестный ключ 'service_port'",
            title="Некорректная конфигурация",
            file="config.yml",
            line=14,
            column=1,
        )

Эти методы формируют нужную команду ::<severity>:: автоматически; за подробностями параметров можно обратиться по ссылкам выше.

В своем подклассе вы должны реализовать метод main() который вызывается из run().

Вы можете определить пользовательские типы входных и/или выходных данных в подклассе. Или вы можете ничего не делать в подклассе, если вам не нужны типизированные входные и выходные данные.

Обратите внимание, что это просто типы, экземпляры этих типов автоматически создаются в методе init.

Использование:

from pathlib import Path

from github_custom_actions import ActionBase, ActionInputs, ActionOutputs


class MyInputs(ActionInputs):
    my_input: str
    """My input description"""

    my_path: Path
    """My path description"""


class MyOutputs(ActionOutputs):
    runner_os: str
    """Runner OS description"""


class MyAction(ActionBase):
    inputs: MyInputs
    outputs: MyOutputs

    def main(self):
        if self.inputs.my_path is None:
            raise ValueError("my-path is required")
        self.inputs.my_path.mkdir(exist_ok=True)
        self.outputs.runner_os = self.env.runner_os
        self.summary.text += self.render(
            "### {{ inputs.my_input }}.\nHave a nice day, {{ inputs['name'] }}!",
        )


if __name__ == "__main__":
    MyAction().run()