diff --git a/.gitea/workflows/wiki-sync.yml b/.gitea/workflows/wiki-sync.yml index 598154e..77253a6 100644 --- a/.gitea/workflows/wiki-sync.yml +++ b/.gitea/workflows/wiki-sync.yml @@ -3,6 +3,7 @@ name: "Wiki Sync" on: push: branches: + - master - main jobs: diff --git a/Makefile b/Makefile index 6eeb768..894c2d6 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ endif # Основные команды # ============================================================================ -.PHONY: all build run clean test lint deps tidy fmt vet help clean-results ensure-build-dir +.PHONY: all build run clean test lint deps tidy fmt vet help clean-results ensure-build-dir wiki-update .PHONY: release-tag release-tag-delete ci-release ci-check release-local ## Сборка + тесты (цель по умолчанию при явном вызове make all) @@ -513,6 +513,57 @@ endif release-local: checksum $(info >>> Локальный релиз готов в $(BUILD_DIR)/release/) +# ============================================================================ +# Wiki — синхронизация локальной папки wiki/ в Gitea Wiki +# ============================================================================ + +## Синхронизировать папку wiki/ в удалённый wiki-репозиторий (.wiki.git) +ifeq ($(OS),Windows_NT) +wiki-update: + $(info >>> Синхронизация wiki в Gitea...) + if (-Not (Test-Path 'wiki')) { throw 'Папка wiki/ не найдена.' } + $$origin = git remote get-url origin + if (-not $$origin) { throw 'Не найден remote origin.' } + if ($$origin -match '\.git$$') { $$wikiUrl = $$origin -replace '\.git$$', '.wiki.git' } else { $$wikiUrl = "$$origin.wiki.git" } + $$tmp = '$(BUILD_DIR)\\.wiki-sync' + Remove-Item -Recurse -Force $$tmp -ErrorAction SilentlyContinue + New-Item -ItemType Directory -Force '$(BUILD_DIR)' | Out-Null + git clone --depth 1 $$wikiUrl $$tmp + robocopy wiki $$tmp /MIR /XD .git | Out-Null; if ($$LASTEXITCODE -gt 7) { throw 'Ошибка robocopy при синхронизации wiki.' } + Push-Location $$tmp + git add -A + if (git diff --cached --quiet) { + $(info >>> Изменений в wiki нет.) + Pop-Location + } else { + git config user.name "wiki-sync-bot" + git config user.email "wiki-sync@local" + git commit -m "docs(wiki): sync from main repo" + git push origin HEAD + Pop-Location + $(info >>> Wiki успешно обновлена.) + } +else +wiki-update: + $(info >>> Синхронизация wiki в Gitea...) + @test -d wiki || (echo "Папка wiki/ не найдена." && exit 1) + @ORIGIN=$$(git remote get-url origin); \ + if [ -z "$$ORIGIN" ]; then echo "Не найден remote origin."; exit 1; fi; \ + if echo "$$ORIGIN" | grep -q '\.git$$'; then WIKI_URL=$$(echo "$$ORIGIN" | sed 's/\.git$$/.wiki.git/'); else WIKI_URL="$$ORIGIN.wiki.git"; fi; \ + TMP_DIR="$(BUILD_DIR)/.wiki-sync"; \ + rm -rf "$$TMP_DIR"; mkdir -p "$(BUILD_DIR)"; \ + git clone --depth 1 "$$WIKI_URL" "$$TMP_DIR"; \ + rsync -a --delete --exclude '.git/' wiki/ "$$TMP_DIR"/; \ + cd "$$TMP_DIR"; \ + git add -A; \ + if git diff --cached --quiet; then echo ">>> Изменений в wiki нет."; exit 0; fi; \ + git config user.name "wiki-sync-bot"; \ + git config user.email "wiki-sync@local"; \ + git commit -m "docs(wiki): sync from main repo"; \ + git push origin HEAD; \ + echo ">>> Wiki успешно обновлена." +endif + # ============================================================================ # Справка # ============================================================================ @@ -563,5 +614,8 @@ help: $(info GITEA_TOKEN=<токен> обязателен для ci-release) $(info make release-tag-delete VERSION=X.Y.Z Удалить ошибочный тег) $(info ) + $(info Wiki:) + $(info make wiki-update Синхронизировать локальную папку wiki/ в Gitea Wiki) + $(info ) .DEFAULT_GOAL := help