mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-06-01 22:50:26 -04:00
feat: Enhanced PR Lint/Validation (#7329)
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
0af9633193
commit
7b0d1fde64
49
.github/workflows/pull-request-lint.yml
vendored
49
.github/workflows/pull-request-lint.yml
vendored
@@ -3,7 +3,7 @@ name: Pull Request Linter
|
|||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
pull_request:
|
pull_request:
|
||||||
types: [edited] # This captures the PR title changing
|
types: [edited, reopened] # This captures the PR title/body changing
|
||||||
branches:
|
branches:
|
||||||
- mealie-next
|
- mealie-next
|
||||||
|
|
||||||
@@ -41,3 +41,50 @@ jobs:
|
|||||||
ignoreLabels: |
|
ignoreLabels: |
|
||||||
bot
|
bot
|
||||||
ignore-semantic-pull-request
|
ignore-semantic-pull-request
|
||||||
|
|
||||||
|
validate-template:
|
||||||
|
name: Validate PR template
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- name: Check required PR template sections
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const pr = context.payload.pull_request;
|
||||||
|
|
||||||
|
if (pr.user.type === "Bot") {
|
||||||
|
console.log("Skipping template check for bot");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const response = await github.rest.repos.getContent({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
path: ".github/pull_request_template.md",
|
||||||
|
});
|
||||||
|
|
||||||
|
const template = Buffer.from(response.data.content, "base64").toString("utf8");
|
||||||
|
const lines = template.split("\n");
|
||||||
|
|
||||||
|
const requiredHeadings = [];
|
||||||
|
let lastHeading = null;
|
||||||
|
|
||||||
|
for (const line of lines) {
|
||||||
|
if (line.startsWith("## ")) {
|
||||||
|
lastHeading = line.trim();
|
||||||
|
} else if (line.trim() === "_(REQUIRED)_" && lastHeading) {
|
||||||
|
requiredHeadings.push(lastHeading);
|
||||||
|
lastHeading = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const body = pr.body || "";
|
||||||
|
const missing = requiredHeadings.filter(h => !body.includes(h));
|
||||||
|
|
||||||
|
if (missing.length > 0) {
|
||||||
|
core.setFailed(`Missing headings:\n${missing.join("\n")}`);
|
||||||
|
} else {
|
||||||
|
console.log("All required headings present");
|
||||||
|
}
|
||||||
|
|||||||
2
.github/workflows/pull-requests.yml
vendored
2
.github/workflows/pull-requests.yml
vendored
@@ -18,6 +18,8 @@ jobs:
|
|||||||
name: "Lint PR"
|
name: "Lint PR"
|
||||||
if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
uses: ./.github/workflows/pull-request-lint.yml
|
uses: ./.github/workflows/pull-request-lint.yml
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
backend-tests:
|
backend-tests:
|
||||||
name: "Backend Server Tests"
|
name: "Backend Server Tests"
|
||||||
|
|||||||
Reference in New Issue
Block a user