Отфильтровать запрос на внесение изменений в GitHub

Вопрос или проблема

Я пытаюсь отфильтровать запросы на извлечение в Github. Если определенный PR существует, нам не нужно создавать PR для этого. Я включил код ниже, но получаю ошибку line 61: syntax error: unexpected end of file

Обычное название PR должно быть таким: = Проверка отклонения в ресурсе: $RESOURCE

echo "Проверяем, существует ли запрос на извлечение для '$RESOURCE'"
        existing_pr=$(curl -s -H "Authorization: Bearer $(pat-token)" \
        https://github.mytab.com/api/v3/repos/rep/rep-infra/pulls?state=open&head=drift-rep-${RESOURCE} \
         | jq '.[] | select(.title | test("Проверка отклонения в ресурсе: '"$RESOURCE"'"))')
        if [ -n "$existing_pr" ]; then
        echo "Запрос на извлечение для '$RESOURCE' уже существует. Пропускаем создание PR."
        else
        echo "Создаем запрос на извлечение"

Возможные фатальные ошибки:

  1. Вам, похоже, не хватает fi после if.
  2. Вам, похоже, есть некоторые & в нецитируемой строке.
  3. Мне кажется, что "$RESOURCE" в команде jq не будет отображаться в двойных кавычках для jq.

Другие соображения:

  1. jq имеет флаг --exit-status, который, вероятно, более подходящий, чем [ -n "$existing_pr" ].
  2. Подумайте о том, чтобы передать RESOURCE в jq как переменную.
  3. Вы уверены, что не хотите использовать gh для этого?

Возможно:

echo "Проверяем, существует ли запрос на извлечение для '$RESOURCE'"
gh_token=$(pat-token)
url="https://github.mytab.com/api/v3/repos/rep/rep-infra/pulls?state=open&head=drift-rep-${RESOURCE}"
jq='.[] |
    select(.title |
           test("Проверка отклонения в ресурсе: $resource"))'
json=$(curl -sfH "Authorization: Bearer $gh_token" "$url")
if jq --exit-status --arg resource "$RESOURCE" "$jq"; then
    echo "Запрос на извлечение для '$RESOURCE' уже существует. Пропускаем создание PR."
else
    echo 'Создаем запрос на извлечение сейчас'
fi

.

Ответ или решение

Для эффективного фильтрации запросов на вливание (Pull Requests) в GitHub, важно учитывать несколько ключевых аспектов в коде и логике, которые вы предоставили. Рассмотрим вашу задачу, а также предложим улучшенный вариант скрипта, избегая текущих ошибок и недочетов.

Анализ существующего кода

Ваш текущий код имеет критические проблемы:

  1. Отсутствие fi: Каждое условие if в Shell должно завершаться соответствующим fi. Вы пропустили этот элемент, что является причиной возникновения ошибки syntax error: unexpected end of file.

  2. Неправильное использование символа &: В URL, который вы составляете, символ & должен быть представлен как & без HTML кода (&). Это может вызывать проблемы с обработкой запроса.

  3. Передача переменной в jq: Ваша переменная $RESOURCE не будет доступна в jq, если вы передаете её как строку. Рекомендуется передавать её в качестве аргумента, используя --arg.

  4. Опция --exit-status в jq: Использование этой опции упрощает вашу логику, так как jq сам будет возвращать статус, в зависимости от наличия искомого запроса на вливание.

Улучшенный код

Предлагаемая версия кода с исправлениями:

echo "Проверка существования запроса на вливание для '$RESOURCE'..."
gh_token=$(pat-token)
url="https://github.mytab.com/api/v3/repos/rep/rep-infra/pulls?state=open&head=drift-rep-${RESOURCE}"
jq_filter='.[] | select(.title | test("Проверка отклонения в ресурсе: $resource"))'

# Получаем JSON с запросами на вливание
json=$(curl -sfH "Authorization: Bearer $gh_token" "$url")

# Проверяем наличие существующего PR
if echo "$json" | jq --exit-status --arg resource "$RESOURCE" "$jq_filter"; then
    echo "Запрос на вливание уже существует для '$RESOURCE'. Пропускаем создание PR."
else
    echo 'Создание запроса на вливание...'
    # Здесь добавьте код для создания PR
fi

Объяснение улучшений:

  • Структура и логика: Мы структурировали код для лучшего понимания. Каждая логическая часть выполняет свою функцию, и контрольные точки четко обозначены.

  • Экспрессия jq: Мы передаем значение переменной RESOURCE в jq с помощью --arg, что позволяет избежать проблем с интерполяцией.

  • Проверка PR: Использование echo "$json" для передачи результата в jq упрощает проверку наличия существующего PR и делает код более лаконичным.

Итоговые рекомендации

  1. Используйте библиотеку GitHub CLI (gh): Это может значительно упростить интеграцию с GitHub и управление запросами на вливание. Если возможно, рассмотрите переход на использование gh.

  2. Логирование и отладка: Добавление логирования для ваших шагов поможет лучше идентифицировать проблемы при выполнении скрипта.

  3. Тестирование и процесс CI/CD: Запускайте скрипты в тестовой среде перед интеграцией в производственный процесс. Это поможет избежать неожиданных ошибок.

Следуя этим рекомендациям, вы сможете успешно управлять запросами на вливание в вашем проекте GitHub, избегая распространенных ошибок и повышая качество работы вашего кода.

Оцените материал
Добавить комментарий

Капча загружается...