diff --git a/.github/workflows/process.yml b/.github/workflows/process.yml index 00525e7d..bf896138 100644 --- a/.github/workflows/process.yml +++ b/.github/workflows/process.yml @@ -77,19 +77,36 @@ jobs: -q "[.comments[] | select(.body | test(\"Вердикт:\")) | select(.body | test(\"$marker\"))] | length") fi + # Отказ обязан быть виден в issue, а не только в логе прогона. + # Ревьюшная метка обещает работу; если конвейер её не начал и промолчал, + # задача стоит в этом статусе бесконечно и никто об этом не узнаёт. + # Так и вышло на #123: чужой issue довели до S4-spec-review, guard + # отказался за 9 секунд, и в issue не было ни слова. + # + # Пишем только когда пытались запустить ревью, то есть stage опознан. + # Иначе комментарий уходил бы на каждую смену любой метки. + refuse() { + echo "$1" + gh issue comment "$NUM" --repo "${{ github.repository }}" --body \ + "Конвейер ревью не запущен: $2 + + Метка \`$LABEL\` обещает работу, которая не начнётся, поэтому статус лучше вернуть в предыдущий — иначе задача простоит здесь бесконечно. [Прогон](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})." + stage="" + } + # В процесс идут только issue, созданные владельцем: репозиторий # публичный, чужие отчёты бывают невалидны и статусов не несут. if [ -z "$stage" ]; then : elif [ "$AUTHOR" != "Matysh" ]; then - echo "issue от $AUTHOR, не от владельца — пропуск" - stage="" + refuse "issue от $AUTHOR, не от владельца — пропуск" \ + "issue создан пользователем \`$AUTHOR\`, а в процесс идут только issue владельца (PROCESS.md §9). Чтобы взять задачу в работу, владельцу нужно завести свой issue со ссылкой на этот." elif [ "$BLOCKED" = "true" ]; then - echo "стоит blocked — конвейер не запускается" - stage="" + refuse "стоит blocked — конвейер не запускается" \ + "на issue стоит \`blocked\` — задача ждёт внешнего решения. Снять метку, когда решение принято." elif [ "$EXHAUSTED" = "true" ]; then - echo "стоит review-4 — решение за владельцем" - stage="" + refuse "стоит review-4 — решение за владельцем" \ + "на issue стоит \`review-4\`: лимит циклов ревью исчерпан, дальше решает владелец — разделить задачу, отклонить или арбитраж (PROCESS.md §4)." elif [ "$done_cycles" -ge "$limit" ]; then echo "циклов этапа $stage пройдено $done_cycles из $limit — лимит исчерпан" gh issue edit "$NUM" --repo "${{ github.repository }}" --add-label review-4