name: "Wiki Sync" on: push: branches: - master - main jobs: sync-wiki: name: "Синхронизация Wiki" runs-on: native steps: # ── Получение исходного кода (без actions/checkout) ──────────────── - name: "Получение исходного кода" shell: bash env: GIT_TOKEN: ${{ secrets.GIT_TOKEN }} run: | TOKEN="${GIT_TOKEN}" SERVER="${{ github.server_url }}" REPO="${{ github.repository }}" HOST="${SERVER#https://}" HOST="${HOST#http://}" CLONE_URL="https://${TOKEN}@${HOST}/${REPO}.git" echo ">>> Клонирование ${REPO}..." git clone --depth 1 "${CLONE_URL}" . 2>&1 | grep -v "${TOKEN}" || true echo ">>> Исходный код получен: $(git log --oneline -1)" - name: "Проверка папки wiki/" shell: bash run: | if [ ! -d "wiki" ]; then echo "Папка wiki/ не найдена — синхронизация не требуется." exit 0 fi echo ">>> Найдено файлов wiki: $(find wiki -type f | wc -l)" - name: "Синхронизация wiki в DFGit Wiki" shell: bash env: GIT_TOKEN: ${{ secrets.GIT_TOKEN }} run: | if [ -z "${GIT_TOKEN}" ]; then echo "GIT_TOKEN не задан. Добавьте секрет в Settings -> Secrets -> Actions." echo "Пропуск синхронизации wiki без ошибки." exit 0 fi WIKI_REPO_URL="${{ github.server_url }}/${{ github.repository }}.wiki.git" AUTH_WIKI_REPO_URL="${WIKI_REPO_URL/https:\/\//https:\/\/oauth2:${GIT_TOKEN}@}" echo ">>> Клонируем wiki-репозиторий..." git clone --depth 1 "${AUTH_WIKI_REPO_URL}" .wiki-repo 2>&1 | grep -v "${GIT_TOKEN}" || true # rsync или fallback на cp if command -v rsync &>/dev/null; then rsync -a --delete --exclude '.git/' wiki/ .wiki-repo/ else # Удаляем старые файлы (кроме .git) и копируем новые find .wiki-repo -mindepth 1 -not -path '.wiki-repo/.git/*' -not -name '.git' -delete 2>/dev/null || true cp -a wiki/* .wiki-repo/ fi cd .wiki-repo git add -A if git diff --cached --quiet; then echo ">>> Изменений в wiki нет — пуш не требуется." exit 0 fi git config user.name "gitea-actions[bot]" git config user.email "gitea-actions@local" DEFAULT_BRANCH=$(git remote show origin 2>/dev/null | sed -n '/HEAD branch/s/.*: //p') if [ -z "${DEFAULT_BRANCH}" ]; then DEFAULT_BRANCH="master" fi git commit -m "docs(wiki): sync from main @ ${{ github.sha }}" git push origin "HEAD:${DEFAULT_BRANCH}" 2>&1 | grep -v "${GIT_TOKEN}" || true echo ">>> Wiki синхронизирована в ветку ${DEFAULT_BRANCH}."