mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-01 21:43:28 -05:00
107 lines
3.4 KiB
YAML
107 lines
3.4 KiB
YAML
name: Auto-merge l10n PRs
|
|
|
|
on:
|
|
pull_request:
|
|
types: [opened, synchronize, labeled]
|
|
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
|
|
jobs:
|
|
auto-merge:
|
|
runs-on: ubuntu-latest
|
|
if: contains(github.event.pull_request.labels.*.name, 'l10n')
|
|
|
|
steps:
|
|
- name: Validate PR author
|
|
env:
|
|
AUTHOR: ${{ github.event.pull_request.user.login }}
|
|
run: |
|
|
if [[
|
|
"$AUTHOR" != "hay-kot" &&
|
|
"$AUTHOR" != "github-actions[bot]" &&
|
|
"$AUTHOR" != "mealie-actions[bot]"
|
|
]]; then
|
|
echo "::error::PR author must be hay-kot, github-actions[bot], or mealie-actions[bot] for auto-merge (got: $AUTHOR)"
|
|
exit 1
|
|
fi
|
|
echo "Author validated: $AUTHOR"
|
|
|
|
- name: Validate PR size
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
REPO: ${{ github.repository }}
|
|
run: |
|
|
ADDITIONS=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json additions --jq '.additions')
|
|
DELETIONS=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json deletions --jq '.deletions')
|
|
TOTAL=$((ADDITIONS + DELETIONS))
|
|
|
|
echo "PR changes: +$ADDITIONS -$DELETIONS (total: $TOTAL lines)"
|
|
|
|
if [ "$TOTAL" -gt 400 ]; then
|
|
echo "::error::PR exceeds 400 line change limit ($TOTAL lines)"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Validate file paths
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
REPO: ${{ github.repository }}
|
|
run: |
|
|
FILES=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json files --jq '.files[].path')
|
|
|
|
for file in $FILES; do
|
|
# Check if file matches any allowed path
|
|
if [[ "$file" == "frontend/composables/use-locales/available-locales.ts" ]] || \
|
|
[[ "$file" =~ ^frontend/lang/ ]] || \
|
|
[[ "$file" =~ ^mealie/repos/seed/resources/[^/]+/locales/ ]]; then
|
|
continue
|
|
fi
|
|
|
|
# File doesn't match allowed paths
|
|
echo "::error::Invalid file path: $file"
|
|
echo "Only the following paths are allowed:"
|
|
echo " - frontend/composables/use-locales/available-locales.ts"
|
|
echo " - frontend/lang/"
|
|
echo " - mealie/repos/seed/resources/*/locales/"
|
|
exit 1
|
|
done
|
|
|
|
echo "All files are in allowed paths"
|
|
|
|
- name: Approve PR
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
REPO: ${{ github.repository }}
|
|
run: |
|
|
APPROVED=$(gh pr view "$PR_NUMBER" \
|
|
--repo "$REPO" \
|
|
--json reviews \
|
|
--jq '.reviews[] | select(.state == "APPROVED") | .id' \
|
|
| wc -l)
|
|
|
|
if [ "$APPROVED" -gt 0 ]; then
|
|
echo "PR already approved"
|
|
exit 0
|
|
fi
|
|
|
|
gh pr review "$PR_NUMBER" \
|
|
--repo "$REPO" \
|
|
--approve \
|
|
--body "Auto-approved: l10n PR from trusted author with valid file paths"
|
|
|
|
- name: Enable auto-merge
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
REPO: ${{ github.repository }}
|
|
run: |
|
|
gh pr merge "$PR_NUMBER" \
|
|
--repo "$REPO" \
|
|
--auto \
|
|
--squash
|