From 293e7259b65ac0f1dc34ea3c6ef2607f521855a2 Mon Sep 17 00:00:00 2001 From: Dmitriy Fofanov Date: Mon, 23 Feb 2026 23:21:23 +0300 Subject: [PATCH] =?UTF-8?q?Fix:=20wiki-sync.yml=20=20runs-on=20native,=20?= =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20actions/checkout,=20fallback=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20rsync?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/release.yml | 4 +- .gitea/workflows/wiki-sync.yml | 85 +++++++++++++++++++++++++++++++++ .github/workflows/release.yml | 4 +- .github/workflows/wiki-sync.yml | 47 +++++++++++++----- 4 files changed, 124 insertions(+), 16 deletions(-) create mode 100644 .gitea/workflows/wiki-sync.yml diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 6f388aa..77dd0ff 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -339,8 +339,8 @@ jobs: cat /tmp/release_body.md echo "──────────────────────────────────────" - # ── Публикация в Gitea ────────────────────────────────────────────── - - name: "Создание релиза в Gitea и загрузка файлов" + # ── Публикация в DFGit ────────────────────────────────────────────── + - name: "Создание релиза в DFGit и загрузка файлов" shell: bash env: GIT_TOKEN: ${{ secrets.GIT_TOKEN }} diff --git a/.gitea/workflows/wiki-sync.yml b/.gitea/workflows/wiki-sync.yml new file mode 100644 index 0000000..d238d7e --- /dev/null +++ b/.gitea/workflows/wiki-sync.yml @@ -0,0 +1,85 @@ +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}." diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6f388aa..77dd0ff 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -339,8 +339,8 @@ jobs: cat /tmp/release_body.md echo "──────────────────────────────────────" - # ── Публикация в Gitea ────────────────────────────────────────────── - - name: "Создание релиза в Gitea и загрузка файлов" + # ── Публикация в DFGit ────────────────────────────────────────────── + - name: "Создание релиза в DFGit и загрузка файлов" shell: bash env: GIT_TOKEN: ${{ secrets.GIT_TOKEN }} diff --git a/.github/workflows/wiki-sync.yml b/.github/workflows/wiki-sync.yml index 77253a6..d238d7e 100644 --- a/.github/workflows/wiki-sync.yml +++ b/.github/workflows/wiki-sync.yml @@ -9,20 +9,36 @@ on: jobs: sync-wiki: name: "Синхронизация Wiki" - runs-on: ubuntu-latest + runs-on: native steps: - - name: "Checkout main repository" - uses: actions/checkout@v4 + # ── Получение исходного кода (без 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: "Validate wiki source folder" + - name: "Проверка папки wiki/" + shell: bash run: | if [ ! -d "wiki" ]; then echo "Папка wiki/ не найдена — синхронизация не требуется." exit 0 fi + echo ">>> Найдено файлов wiki: $(find wiki -type f | wc -l)" - - name: "Sync wiki folder to Gitea Wiki repository" + - name: "Синхронизация wiki в DFGit Wiki" + shell: bash env: GIT_TOKEN: ${{ secrets.GIT_TOKEN }} run: | @@ -35,28 +51,35 @@ jobs: WIKI_REPO_URL="${{ github.server_url }}/${{ github.repository }}.wiki.git" AUTH_WIKI_REPO_URL="${WIKI_REPO_URL/https:\/\//https:\/\/oauth2:${GIT_TOKEN}@}" - echo "Клонируем: ${WIKI_REPO_URL}" - git clone --depth 1 "${AUTH_WIKI_REPO_URL}" .wiki-repo + echo ">>> Клонируем wiki-репозиторий..." + git clone --depth 1 "${AUTH_WIKI_REPO_URL}" .wiki-repo 2>&1 | grep -v "${GIT_TOKEN}" || true - rsync -a --delete --exclude '.git/' wiki/ .wiki-repo/ + # 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 нет — пуш не требуется." + 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 | sed -n '/HEAD branch/s/.*: //p') + 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}" + git push origin "HEAD:${DEFAULT_BRANCH}" 2>&1 | grep -v "${GIT_TOKEN}" || true - echo "Wiki синхронизирована в ветку ${DEFAULT_BRANCH}." + echo ">>> Wiki синхронизирована в ветку ${DEFAULT_BRANCH}."