refactor(repo): flatten structure — remove compose/ and runner-image/ subdirs #1

Open
opened 2026-08-06 19:59:27 +03:00 by slaid098 · 0 comments
Owner

Контекст

Репозиторий forgejo-infra хранит воспроизводимую конфигурацию Forgejo + CI runner. Текущая структура имеет две подпапки (compose/ с 2 файлами, runner-image/ с 1 файлом), которые добавляют вложенность без ценности:

  • compose/ содержит 2 файла (docker-compose.yml, runner-config.yaml), которые setup.sh сразу же распаковывает в root на деплой-хосте. Папка живёт только в репо, никогда на диске как compose/.
  • docker-compose.yml использует ./app_data/... относительные пути, которые работают только если файл лежит в корне, а не в compose/. Если кто-то запустит docker compose -f compose/docker-compose.yml up, волюмы резолвятся не туда — это footgun.
  • runner-image/ содержит 1 файл (Dockerfile без COPY инструкций). Build-context не нужен — можно top-level Dockerfile.
  • README упоминает 1 label (ubuntu-latest), а docker-compose.yml и runner-config.yaml — 3. Непоследованность.
  • Нет .gitignore — есть риск случайно закоммитить .env с реальными секретами.

Всего 6 файлов в репо — подпапки для 6 файлов избыточны.

Задача

Сделать flat структуру: все файлы в root, ноль подпапок.

Целевая структура:

forgejo-infra/
├── .env.example            (без изменений)
├── .gitignore              (НОВЫЙ — исключает .env)
├── README.md               (обновить — пути к файлам без compose/ runner-image/)
├── setup.sh                (упростить — не распаковывать compose/)
├── docker-compose.yml      (был compose/docker-compose.yml, БЕЗ изменений в содержимом)
├── config.yaml             (был compose/runner-config.yaml, БЕЗ изменений в содержимом, только rename)
└── Dockerfile              (был runner-image/Dockerfile, БЕЗ изменений в содержимом)

Контракты

  • Git-история сохраняется (git mv для переименований, не delete+create).
  • setup.sh после рефактора: копирует docker-compose.yml, config.yaml (→ app_data/runner/config.yaml), Dockerfile в deploy dir. Больше не копирует из compose/.
  • docker-compose.yml: содержимое БЕЗ изменений (он уже использует ./app_data/... — это правильно для root-расположения).
  • config.yaml (был runner-config.yaml): содержимое БЕЗ изменений (включая boilerplate — сознательное решение для совместимости с act_runner).
  • Dockerfile: содержимое БЕЗ изменений.
  • .gitignore: добавить .env (защита от случайного коммита секретов).
  • README: обновить пути в quick-start (убрать compose/ и runner-image/ префиксы), привести runner labels к 3 (как в compose/config), убрать упоминание подпапок.

Инварианты

  • docker compose up -d из корня клона репо работает (после setup.sh или напрямую если есть .env).
  • docker build -t git.slaid098.dev/slaid098/runner:latest . из корня клона работает (Dockerfile без COPY — build context не важен).
  • Публичный clone репо работает: git clone https://git.slaid098.dev/slaid098/forgejo-infra.git → все 7 файлов (6 + .gitignore) в root.
  • setup.sh исполняемый (chmod +x).

Граничные случаи

  • Если кто-то уже клонировал старую структуру и работает с compose/docker-compose.yml — их деплой сломается. Это OK — репо молодое (2 коммита), внешних потребителей нет.
  • runner-config.yamlconfig.yaml rename: проверить, что setup.sh и README ссылаются на новое имя.
  • .gitignore не должен исключать .env.example (только .env).

Влияние на связанные компоненты

  • setup.sh — упрощается (меньше cp команд, нет распаковки compose/).
  • README — обновляются пути в quick-start.
  • На linux-2 live deployment НЕ влияет — там файлы уже распакованы в /root/dockers/forgejo/. Этот issue меняет только репо, не live-сервер.

Вне scope

  • Обрезка config.yaml boilerplate (оставляем как есть — сознательное решение для совместимости).
  • Добавление CI для самого forgejo-infra репо.
  • Изменение содержимого docker-compose.yml, config.yaml, Dockerfile.
  • Зеркалирование на GitLab/Codeberg (отдельная задача).

Критерии приемки

  • git clone https://git.slaid098.dev/slaid098/forgejo-infra.git && ls forgejo-infra/ показывает 7 файлов в root (без подпапок): .env.example, .gitignore, README.md, setup.sh, docker-compose.yml, config.yaml, Dockerfile.
  • git log --oneline --follow config.yaml показывает историю от runner-config.yaml (git mv сохраняет историю).
  • setup.sh не содержит ссылок на compose/ или runner-image/ — только root-файлы.
  • README quick-start не упоминает подпапки, runner labels = 3.
  • .gitignore содержит .env, НЕ содержит .env.example.
  • bash setup.sh (dry-run или на тестовом сервере) не падает на cp/mv.
## Контекст Репозиторий `forgejo-infra` хранит воспроизводимую конфигурацию Forgejo + CI runner. Текущая структура имеет две подпапки (`compose/` с 2 файлами, `runner-image/` с 1 файлом), которые добавляют вложенность без ценности: - `compose/` содержит 2 файла (`docker-compose.yml`, `runner-config.yaml`), которые `setup.sh` сразу же распаковывает в root на деплой-хосте. Папка живёт только в репо, никогда на диске как `compose/`. - `docker-compose.yml` использует `./app_data/...` относительные пути, которые работают только если файл лежит в корне, а не в `compose/`. Если кто-то запустит `docker compose -f compose/docker-compose.yml up`, волюмы резолвятся не туда — это footgun. - `runner-image/` содержит 1 файл (`Dockerfile` без `COPY` инструкций). Build-context не нужен — можно top-level `Dockerfile`. - README упоминает 1 label (`ubuntu-latest`), а `docker-compose.yml` и `runner-config.yaml` — 3. Непоследованность. - Нет `.gitignore` — есть риск случайно закоммитить `.env` с реальными секретами. Всего 6 файлов в репо — подпапки для 6 файлов избыточны. ## Задача Сделать flat структуру: все файлы в root, ноль подпапок. Целевая структура: ``` forgejo-infra/ ├── .env.example (без изменений) ├── .gitignore (НОВЫЙ — исключает .env) ├── README.md (обновить — пути к файлам без compose/ runner-image/) ├── setup.sh (упростить — не распаковывать compose/) ├── docker-compose.yml (был compose/docker-compose.yml, БЕЗ изменений в содержимом) ├── config.yaml (был compose/runner-config.yaml, БЕЗ изменений в содержимом, только rename) └── Dockerfile (был runner-image/Dockerfile, БЕЗ изменений в содержимом) ``` ## Контракты - Git-история сохраняется (`git mv` для переименований, не delete+create). - `setup.sh` после рефактора: копирует `docker-compose.yml`, `config.yaml` (→ `app_data/runner/config.yaml`), `Dockerfile` в deploy dir. Больше не копирует из `compose/`. - `docker-compose.yml`: содержимое БЕЗ изменений (он уже использует `./app_data/...` — это правильно для root-расположения). - `config.yaml` (был `runner-config.yaml`): содержимое БЕЗ изменений (включая boilerplate — сознательное решение для совместимости с act_runner). - `Dockerfile`: содержимое БЕЗ изменений. - `.gitignore`: добавить `.env` (защита от случайного коммита секретов). - README: обновить пути в quick-start (убрать `compose/` и `runner-image/` префиксы), привести runner labels к 3 (как в compose/config), убрать упоминание подпапок. ## Инварианты - `docker compose up -d` из корня клона репо работает (после `setup.sh` или напрямую если есть `.env`). - `docker build -t git.slaid098.dev/slaid098/runner:latest .` из корня клона работает (Dockerfile без `COPY` — build context не важен). - Публичный clone репо работает: `git clone https://git.slaid098.dev/slaid098/forgejo-infra.git` → все 7 файлов (6 + .gitignore) в root. - `setup.sh` исполняемый (`chmod +x`). ## Граничные случаи - Если кто-то уже клонировал старую структуру и работает с `compose/docker-compose.yml` — их деплой сломается. Это OK — репо молодое (2 коммита), внешних потребителей нет. - `runner-config.yaml` → `config.yaml` rename: проверить, что `setup.sh` и README ссылаются на новое имя. - `.gitignore` не должен исключать `.env.example` (только `.env`). ## Влияние на связанные компоненты - `setup.sh` — упрощается (меньше `cp` команд, нет распаковки `compose/`). - README — обновляются пути в quick-start. - На linux-2 live deployment НЕ влияет — там файлы уже распакованы в `/root/dockers/forgejo/`. Этот issue меняет только репо, не live-сервер. ## Вне scope - Обрезка `config.yaml` boilerplate (оставляем как есть — сознательное решение для совместимости). - Добавление CI для самого `forgejo-infra` репо. - Изменение содержимого `docker-compose.yml`, `config.yaml`, `Dockerfile`. - Зеркалирование на GitLab/Codeberg (отдельная задача). ## Критерии приемки - [ ] `git clone https://git.slaid098.dev/slaid098/forgejo-infra.git && ls forgejo-infra/` показывает 7 файлов в root (без подпапок): `.env.example`, `.gitignore`, `README.md`, `setup.sh`, `docker-compose.yml`, `config.yaml`, `Dockerfile`. - [ ] `git log --oneline --follow config.yaml` показывает историю от `runner-config.yaml` (git mv сохраняет историю). - [ ] `setup.sh` не содержит ссылок на `compose/` или `runner-image/` — только root-файлы. - [ ] README quick-start не упоминает подпапки, runner labels = 3. - [ ] `.gitignore` содержит `.env`, НЕ содержит `.env.example`. - [ ] `bash setup.sh` (dry-run или на тестовом сервере) не падает на `cp`/`mv`.
Sign in to join this conversation.
No labels
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: slaid098/forgejo-infra#1
No description provided.