From 69c3ec0e3bb0835c1213a1ece80c1b062ce37964 Mon Sep 17 00:00:00 2001 From: EnotAdmin Date: Mon, 5 May 2025 15:52:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20.woodpecker.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker.yml | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 1677c68..6ac9471 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,30 +1,38 @@ -# .woodpecker.yml (Исправленная структура) +# .woodpecker.yml (Исправлено с учетом from_secret и структуры when) # Определяем условия запуска пайплайна when: event: cron - # Укажите имя cron-задания, которое вы создали в настройках репозитория Woodpecker - # Если вы еще не создали cron-задание в UI Woodpecker, сделайте это. - # Дайте ему имя, например 'sync-hourly', и установите расписание '0 * * * *' - name: sync-hourly # <-- Убедитесь, что это имя совпадает с именем cron в настройках Woodpecker! + # Фильтруем по имени cron-задания. + # Убедитесь, что имя 'sync-hourly' точно совпадает с именем, + # заданным в настройках Cron Jobs репозитория в Woodpecker. + # Синтаксис может немного отличаться в зависимости от версии Woodpecker, + # это один из распространенных вариантов: + cron: + include: + - sync-hourly # Указываем имя cron-задания здесь # Определяем шаги пайплайна steps: - # Наш единственный шаг теперь является элементом списка под 'steps:' - name: sync_releases # Имя шага image: alpine/git - secrets: [ gitea_token, github_token ] # Токены (gitea_token обязателен!) + # УБИРАЕМ устаревший ключ 'secrets:' отсюда environment: - # Переменные окружения для скрипта - # GITEA_URL будет унаследована из окружения агента (WOODPECKER_GITEA_URL) - GITEA_TOKEN: ${GITEA_TOKEN} - GITHUB_TOKEN: ${GITHUB_TOKEN} + # Определяем переменные окружения и связываем их с секретами + GITEA_TOKEN: + from_secret: gitea_token # Переменная GITEA_TOKEN получит значение из секрета gitea_token + GITHUB_TOKEN: + from_secret: github_token # Переменная GITHUB_TOKEN получит значение из секрета github_token + + # Оставляем другие нужные переменные окружения REPO_LIST_FILE: repos_to_sync.txt + # GITEA_URL по-прежнему ожидается из окружения агента (WOODPECKER_GITEA_URL) commands: # 1. Установка зависимостей - apk update && apk add curl jq bash # 2. Запуск скрипта синхронизации (сам скрипт остается без изменений) + # Скрипт будет использовать переменные GITEA_TOKEN и GITHUB_TOKEN из окружения - | #!/bin/bash set -e # Останавливаться при ошибках @@ -34,10 +42,12 @@ steps: # --- Конфигурация --- REPO_FILE="${REPO_LIST_FILE:-repos_to_sync.txt}" - CURRENT_GITEA_URL="${WOODPECKER_GITEA_URL}" + CURRENT_GITEA_URL="${WOODPECKER_GITEA_URL}" # Берем из окружения агента + # Проверки переменных (GITEA_TOKEN и GITHUB_TOKEN теперь должны быть в окружении благодаря from_secret) if [ -z "$CURRENT_GITEA_URL" ]; then echo "Error: GITEA_URL (from WOODPECKER_GITEA_URL) is not set!"; exit 1; fi - if [ -z "$GITEA_TOKEN" ]; then echo "Error: GITEA_TOKEN secret is not set!"; exit 1; fi + if [ -z "$GITEA_TOKEN" ]; then echo "Error: GITEA_TOKEN was not injected from secret!"; exit 1; fi + # GITHUB_TOKEN опционален, поэтому его отсутствие не ошибка, скрипт это обработает if [ ! -f "$REPO_FILE" ]; then echo "Error: Repository list file '$REPO_FILE' not found!"; exit 1; fi echo "Using Gitea URL: $CURRENT_GITEA_URL" @@ -49,11 +59,11 @@ steps: if [ -n "$GITHUB_TOKEN" ]; then GITHUB_AUTH_HEADER="Authorization: token ${GITHUB_TOKEN}"; fi GITHUB_API_URL="https://api.github.com" - # --- Вспомогательные функции --- + # --- Вспомогательные функции (без изменений) --- download_asset() { local url="$1"; local filename="$2"; echo "Downloading asset: $filename"; curl -L -H "$GITHUB_AUTH_HEADER" -o "$filename" "$url"; return $?; } upload_asset() { local repo="$1"; local id="$2"; local file="$3"; echo "Uploading asset: $file"; UPLOAD_URL="${GITEA_API_URL}/repos/${repo}/releases/${id}/assets?name=$(basename "$file")"; curl -sf --fail -X POST -H "$GITEA_AUTH_HEADER" -H "Content-Type: application/octet-stream" --data-binary "@$file" "$UPLOAD_URL"; local status=$?; if [ $status -eq 0 ]; then rm "$file"; fi; return $status; } - # --- Основной цикл --- + # --- Основной цикл (без изменений) --- echo "Reading repository list from $REPO_FILE" while IFS= read -r repo_pair || [[ -n "$repo_pair" ]]; do if [[ -z "$repo_pair" || "$repo_pair" == \#* ]]; then continue; fi