|
| 1 | +# мощно, потому не удалю, чекай зачем всё это в строке "(последнее - это попытка..." |
| 2 | +# но пришел по итогу от script к run, т.к. нужно максимально уменьшить окно между проверкой и отправкой. |
| 3 | +# вроде как задержка между шагами script и if + run ощутимая, по крайней мере у меня получилось в неё влезть и закрыть issue когда метки ещё не было, а на момент открытия метка уже появлялась |
| 4 | +# поэтому ступил на путь терминального программирования исключительно через run |
| 5 | + |
| 6 | +# name: Reopen issue if closed by author |
| 7 | + |
| 8 | +# on: |
| 9 | +# issues: |
| 10 | +# types: [closed] |
| 11 | + |
| 12 | +# jobs: |
| 13 | +# reopen: |
| 14 | +# runs-on: ubuntu-latest |
| 15 | +# permissions: |
| 16 | +# issues: write |
| 17 | + |
| 18 | +# steps: |
| 19 | +# - name: Check who edited the issue |
| 20 | +# id: check_closer |
| 21 | +# uses: actions/github-script@v7 |
| 22 | +# with: |
| 23 | +# # если автор закрыл свой же issue и на момент открытия issue это не повтор |
| 24 | +# # (последнее - это попытка обуздать баг с закрытием после открытия issue спустя некоторое время, сперва он закроется как копия, но откроется через reopen) |
| 25 | +# script: | |
| 26 | +# const issue = context.payload.issue; |
| 27 | +# const closer = context.actor; |
| 28 | +# const author = issue.user.login; |
| 29 | +# const labels = issue.labels.map(label => label.name); |
| 30 | + |
| 31 | +# // Проверяем наличие метки "несколько отзывов" |
| 32 | +# const fewIssue = labels.includes("несколько отзывов"); |
| 33 | +# console.log("labels:", labels); |
| 34 | +# console.log("fewIssue:", fewIssue); |
| 35 | + |
| 36 | +# const timeToOpen = closer === author && !fewIssue; |
| 37 | +# core.exportVariable('needOpen', timeToOpen ? 'true' : 'false'); |
| 38 | +# # про core и context можно отсюда подробнее чекнуть(+про сам github-script@v7): https://github.com/actions/github-script?tab=readme-ov-file |
| 39 | + |
| 40 | +# - name: Reopen issue |
| 41 | +# if: env.needOpen == 'true' |
| 42 | +# run: | |
| 43 | +# curl -X PATCH \ |
| 44 | +# -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ |
| 45 | +# -H "Accept: application/vnd.github.v3+json" \ |
| 46 | +# https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }} \ |
| 47 | +# -d '{"state": "open"}' |
| 48 | + |
| 49 | + |
| 50 | +name: REOPEN issue if closed by author and CLOSE else |
| 51 | + |
| 52 | +on: |
| 53 | + issues: |
| 54 | + types: [closed, reopened] |
| 55 | + |
| 56 | +jobs: |
| 57 | + reopen: |
| 58 | + runs-on: ubuntu-latest |
| 59 | + permissions: |
| 60 | + issues: write |
| 61 | + |
| 62 | + steps: |
| 63 | + - name: Check and reopen issue if conditions are met |
| 64 | + env: |
| 65 | + ISSUE_NUMBER: ${{ github.event.issue.number }} |
| 66 | + REPO: ${{ github.repository }} |
| 67 | + TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 68 | + ACTOR: ${{ github.actor }} |
| 69 | + EVENT_PAYLOAD: ${{ toJson(github.event) }} |
| 70 | + run: | |
| 71 | + # Получение данных о issue |
| 72 | + AUTHOR=$(echo "$EVENT_PAYLOAD" | jq -r .issue.user.login) |
| 73 | +
|
| 74 | + # Проверка наличия метки "несколько отзывов" |
| 75 | + LABELS=$(curl -s -H "Authorization: token $TOKEN" "https://api.github.com/repos/$REPO/issues/$ISSUE_NUMBER" | jq -r '.labels[].name') |
| 76 | +
|
| 77 | + # Вывод значений переменных для отладки |
| 78 | + echo "ACTOR: $ACTOR" |
| 79 | + echo "AUTHOR: $AUTHOR" |
| 80 | + echo "LABELS: $LABELS" |
| 81 | +
|
| 82 | + # Проверка наличия метки "несколько отзывов" |
| 83 | + LABEL_PRESENT=$(echo "$LABELS" | grep -q "несколько отзывов"; echo $?) |
| 84 | + echo "LABEL_PRESENT (0 если найдена, 1 если не найдена): $LABEL_PRESENT" |
| 85 | +
|
| 86 | + if [[ "$ACTOR" == "$AUTHOR" && "$LABEL_PRESENT" -eq 1 ]]; then |
| 87 | + echo "Reopening issue #$ISSUE_NUMBER" |
| 88 | + curl -X PATCH \ |
| 89 | + -H "Authorization: token $TOKEN" \ |
| 90 | + -H "Accept: application/vnd.github.v3+json" \ |
| 91 | + https://api.github.com/repos/$REPO/issues/$ISSUE_NUMBER \ |
| 92 | + -d '{"state": "open"}' |
| 93 | + else |
| 94 | + curl -X PATCH \ |
| 95 | + -H "Authorization: token $TOKEN" \ |
| 96 | + -H "Accept: application/vnd.github.v3+json" \ |
| 97 | + https://api.github.com/repos/$REPO/issues/$ISSUE_NUMBER \ |
| 98 | + -d '{"state": "closed"}' |
| 99 | + fi |
0 commit comments