Хотелось бы восполнить скромную пустоту в литературе по Gitea. С версии 1.19 в Gitea появился свой CI/CD и раннер Act Runner, являющийся ничем иным как форком всем знакомого nextos/act-runner. Собственно говоря, с Gitea я был знаком достаточно давно, и использовал его в своих любительских целях более года, а вот к Gitea CI/CD руки мои дошли только сейчас, и сразу же меня спохватил зуд перенести свой самописный пайплайн по развертке сайта на базе MkDocs на него. Кроме того, интересно будет пронаблюдать: упрется ли в потолок наконец-то мой VPS с 2 гигабайтами ОЗУ, или же нет? Насколько вообще Gitea вместе с одним инстансом раннера будет прожороливым? Задача для нашего CI/CD до отвращения проста и банальна: есть сайт, написанный на MkDocs, и есть python скрипт(ы), генерирующие часть Markdown кода, которые нужно сначала запустить; сайт собирается при помощи команды mkdocs build в статику, аккуратно сложенную в субдиректории site; статику нужно залить на сервер в определенную папку по SSH, используя SCP или rsync. И Все! Вместо MkDocs здесь мог бы быть любой известный JS фреймворк вроде React или Angular. Gitea был с самого начала развернут при помощи Docker Compose вместе с SSHing Shim (см. гайд). Компоуз до боли стандартный: Прикрутить к нему раннер оказалось довольно просто: В конфиге Gitea нужно добавить строчку И в наш компоуз добавить шаблон из официального гайда: Токен берем в зависимости от того, где мы хотими, чтобы runner был доступен: — На глобальном уровне: Settings -> Site administration -> Actions -> Runners -> Create new Runner и копируем REGISTRATION TOKEN; — На уровне организации: вкладка организации -> Settings -> Actions -> Runners -> Create new Runner и копируем REGISTRATION TOKEN; — На уровне репозитория: вкладка репозитория -> Settings -> Actions -> Runners -> Create new Runner и копируем REGISTRATION TOKEN. Токен подставляем в переменную GITEA_RUNNER_REGISTRATION_TOKEN нашего сервиса act-runner. Когда в разделе раннеров появится строка с новым инстансом Act Runner, мы можем писать наш первый Gitea Actions скрипт. Недолго думая пришел, то есть пытаясь долго подобрать минимально работающий скрипт, я пришел к первому варианту: Да, Gitea использует тот же самый формат, что и GitHub Actions. Собственно говоря, это он и есть. Секретные переменные secrets задаются в Репозиторий -> Settings -> Actions -> Secrets. По умолчанию Gitea берет все actions из своего собственного сайта gitea.com, но можно конечно вставить на свой страх и риск actions из Github, просто прописав  путь к репозиторию@ветка. Попытка № 1 провалилась на этапе установки Python3.9 с таким сообщением: М-да, и вроде бы проверил версию ubuntu, использующуюся раннером, но всякие попытки поменять версию не увенчались успехом. Оказалось, что по умолчанию, если не указать в компоузе раннера переменную GITEA_RUNNER_LABELS, то он будет по умолчанию использовать лейбл ubuntu-latest:docker://node:16-bullseye (образ, в котором нет Docker), и поставить Python на этот образ никак нельзя. Тем не менее, не все так плохо. Есть несколько вариантов. Можно поменять дефолтный лейбл для раннера в панели  Site administration -> Actions -> Runners -> Edit и перезаписать существующий лейбл на новый. Синтаксис у лейблов такой: {тип хостовой ВМ, на которой будет запускаться джоба}:{имя Docker образа, в котором будет работать пайплайн}. Тип хостовой ВМ может быть ubuntu-latest, windows- latest или macOS-latest. Лейблы разделяются запятыми. Можно просто добавить строчку container в конфиг нашего пайплайна. Например: Альтернативой дефолтного образа был catthehacker/ubuntu:runner-22.04 с установленной Ubuntu 22.04. Весит он 510 мегабайт, что для меня было терпимо. На этом образе Python успешно установился; сайт собрался и успешно улетел на сервер. Ура! До полного счастья осталось пару шагов. Добавим в стадию установки Python кэширование самих бинарников и pip пакетов: С этими изменениями пайплайн выполнился за 10 минут и 31 секунду. Вот статистика по Memory Usage (в мб): 310 мегабайт ОЗУ на пике. Сойдет! Gitea Actions оказался довольно простым в настройке и довольно легковесным решением для реализации CI/CD у себя дома.