Релизы
Каждая помеченная сборка gtcnsl с проверенными загрузками под каждую архитектуру.
$ curl -fsSL https://dl.gtcnsl.ru/v1.6.0/gtcnsl-v1.6.0-linux-amd64 -o /usr/local/bin/gtcnsl && chmod +x /usr/local/bin/gtcnsl
✓Каждый ассет проверяется контрольной суммой SHA-256.
v1.6.0
2026-08-10
latest
- Gitea Actions Runner 3.x — проверенная цель: v3.1.0 прошёл полную контейнерную матрицу, включая dind-rootless-образ и новый лок «один процесс на `.runner`» из ≥ 3.0.
- `runner register --force` поверх работающего демона снова безопасен — сервис останавливается до удаления старой регистрации, и лок `.runner.lock` из ≥ 3.0 больше не может оставить хост незарегистрированным.
- Генерация базового `config.yaml` следует за переименованием в апстриме: `config generate` на раннере ≥ 3.1.0, устаревший `generate-config` на более старых бинарниках — выбор происходит автоматически по установленной версии.
- Руководство по апгрейду описывает три изменения Runner 3.x, которые живут в ваших workflow, а не в gtcnsl: cache v2 включён по умолчанию, хостовые флаги `container.options` требуют привилегированного режима, `::set-env::`/`::add-path::` требуют opt-in `ACTIONS_ALLOW_UNSECURE_COMMANDS`.
v1.5.0
2026-08-06
- openSUSE Leap 16 присоединяется к поддерживаемой матрице как первое zypper-семейство — `internal/pkgmgr` получил `FamilySUSE` с явным `zypper refresh`, обязательным из-за отключённого по умолчанию autorefresh в репозиториях.
- Alpine Linux присоединяется к поддерживаемой матрице в виде MVP только для host-mode, на новом бэкенде OpenRC за init-агностичной абстракцией `service.Manager` — контейнерные executor'ы раннера честно отказывают вместо падения на полпути.
- Загрузки больше не зависают навсегда: 30-секундный stall-watchdog повторяет зависшее соединение (до 3 попыток) с докачкой по байтовым диапазонам, а клиенты загрузки/обнаружения версий теперь принудительно работают по HTTP/1.1 после того, как зависание HTTP/2 за Cloudflare вызвало реальный прод-инцидент.
- Экран операции TUI теперь показывает живой спиннер и прогресс в процентах вместо тишины, а Esc на выполняющейся операции честен — предлагает отменить её или скрыть экран — вместо того чтобы делать вид, что вышел, пока операция продолжает работать под капотом.
v1.4.0
2026-08-04
- `gtcnsl` без аргументов теперь открывает не голое меню, а живой дашборд — статус установки Gitea/раннера и состояние конфига видны сразу.
- Пять новых дистрибутивов присоединяются к поддерживаемой матрице одним релизом — AlmaLinux 9/10, Rocky 10, Ubuntu 22.04 LTS и 26.04 LTS, — тестовая контейнерная матрица выросла с трёх образов до восьми благодаря новому диспетчеру `pkgmgr.Family`, для которого добавление следующего дистрибутива — изменение в две строки.
- Скриншоты TUI на сайте теперь генерируются из byte-for-byte golden-дампов реального терминала, так что сайт больше не может незаметно разойтись с тем, что на самом деле рисует `gtcnsl`.
v1.3.2
2026-07-23
- HTTPS-установки задают LOCAL_ROOT_URL — чинит ssh-пуши на Gitea 1.27+
- Бэкапы работают на хостах только с раннером
v1.3.1
2026-07-23
- Релизный workflow теперь проверяет собственные входные данные
v1.3.0
2026-07-18
- Gitea 1.27.x и Runner 2.x официально поддерживаются, сверены end-to-end — и `secrets rotate SECRET_KEY --reencrypt` теперь отказывается запускаться на миноре Gitea, для которого gtcnsl не сверил свою криптографию.
- Безопасная ротация `SECRET_KEY` теперь охватывает и инстансы с `SECRET_KEY_URI`: gtcnsl резолвит ключ точно так же, как это делает сама Gitea при старте, а ротация держит файл за URI синхронизированным, вместо того чтобы молча расходиться с ним.
- `gtcnsl runner adopt` берёт существующий Gitea Actions Runner под управление, никогда не перерегистрируя его — раннер-близнец `gitea adopt`.
- Состояние раннера — `.runner`, `config.yaml`, его systemd-юнит — теперь путешествует вместе с `gtcnsl backup`/`restore`, так что потеря файла больше не означает новый регистрационный токен.
- Полноценные команды `gtcnsl gitea upgrade`/`runner upgrade`, и неудачный апгрейд Gitea теперь автоматически восстанавливает предыдущий бинарник, вместо того чтобы оставить хост без него.
- Регистрационным токенам раннера больше не обязательно попадать в argv процесса: `runner register`/`reconfigure --token-file <path>` читает токен из файла.
v1.2.1
2026-07-12
- Прогресс скачивания больше не заливает ssh-сессии, CI-логи и TUI: троттлинг у источника, редкие обычные строки вне терминала, одна обновляемая на месте строка в TUI.
v1.2.0
2026-07-12
- Безопасная ротация `SECRET_KEY`: `secrets rotate SECRET_KEY --reencrypt` перешифровывает все зашифрованные строки БД — секреты Actions, сиды 2FA, auth-заголовки вебхуков, LDAP bind-пароли — на новый ключ, с бэкапом и автоматическим откатом. Ротация, которой в самом Gitea нет до сих пор (go-gitea/gitea#16832).
- Предохранитель: простой `secrets rotate SECRET_KEY` теперь жёстко останавливается до любых изменений, вместо того чтобы молча осиротить зашифрованные данные, а `--dry-run` заранее показывает, что именно затронет миграция.
- `doctor` теперь предупреждает о пустом `SECRET_KEY` — Gitea в этом случае шифрует публичным ключом, зашитым в её собственные исходники, то есть данные фактически не защищены.
v1.1.2
2026-07-08
- Исправлено: health-check'и работают на инстансах «только по логину» (`REQUIRE_SIGNIN_VIEW`) — liveness теперь через неаутентифицированный `/api/healthz`.
v1.1.1
2026-07-08
- Исправлено: health-check'и на установках со встроенным Let's Encrypt больше не дают ложный отказ — `secrets rotate`, `config apply` и обновления на месте снова работают на ACME-хостах.
v1.1.0
2026-07-08
- Наведите `gitea install` на хост с уже работающей Gitea — и это будет обновление на месте: живые пути определяются сами, данные не переносятся, рукописный юнит сохраняется байт-в-байт.
- `gtcnsl gitea adopt` берёт ручную установку под управление, не перенося никакие данные: секреты — из `app.ini` в `secrets.ini`, права — потуже, плюс шаблон для декларативного цикла.
- Профили сервинга при установке: HTTP за прокси (по умолчанию), прямой HTTPS со встроенным Let's Encrypt или ваш собственный сертификат.
- `gtcnsl gitea enable-https` переключает живую HTTP-установку на HTTPS — и автоматически откатывается к рабочему конфигу, если что-то пошло не так.
- Doctor теперь ловит классическую бомбу замедленного действия: конфиг https на :443, чей юнит на самом деле не может забиндить порт.
v1.0.0
2026-07-02
- Первый стабильный релиз — CLI и структура на диске теперь под гарантией совместимости по SemVer (COMPATIBILITY.md).
- `gtcnsl backup` / `restore` — снимок установки Gitea и откат безопасным самооткатывающимся потоком.
- Исполнитель раннера `dind-rootless` — раннер в rootless-контейнере, без бинаря на хосте.
- Самообновление подписывающего ключа: верификация загрузок работает при ежегодном продлении ключа Gitea.
- Исправлено: обновление на месте `gitea install --to` теперь перезапускается на новый бинарь.
v0.6.3
2026-05-30
- Надёжное зеркалирование релизов на download-хост
v0.6.1
2026-05-30
- Исправлен шаг зеркалирования релиза на download-хост