Integrate ThunderAI in the current theme #28
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Issues Validate Integration Field | |
on: | |
issues: | |
types: [opened, edited] | |
permissions: | |
issues: write | |
jobs: | |
check-integration: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Validate dropdown selection (only for bug report form) | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const issue = context.payload.issue; | |
const bodyText = issue.body || ""; | |
// ---- Guard: only act if this looks like a Bug Report form ---- | |
if (!bodyText.includes("### The problem")) { | |
core.info("Skipped: This issue does not contain '### The problem', so it is not a Bug Report."); | |
return; | |
} | |
core.info("Detected a Bug Report issue. Proceeding with validation..."); | |
// Extract selection under "Which integration are you using?" | |
const header = "### Which integration are you using?"; | |
const nextHeaderRegex = /\n### /; | |
let selection = ""; | |
const startIdx = bodyText.indexOf(header); | |
if (startIdx !== -1) { | |
const afterHeader = bodyText.slice(startIdx + header.length).replace(/^\r?\n+/, ""); | |
const nextHeaderIdx = afterHeader.search(nextHeaderRegex); | |
selection = (nextHeaderIdx === -1 ? afterHeader : afterHeader.slice(0, nextHeaderIdx)).trim(); | |
} | |
core.info(`Integration field extracted: "${selection}"`); | |
const isInvalid = !selection || selection.startsWith("-- Select an option"); | |
if (isInvalid) { | |
core.info("Integration field is invalid or not selected."); | |
} else { | |
core.info("Integration field is valid. Nothing to do."); | |
} | |
const owner = context.repo.owner; | |
const repo = context.repo.repo; | |
const issue_number = issue.number; | |
// Avoid duplicate comments | |
const marker = "please specify **Which integration are you using?**"; | |
const { data: comments } = await github.rest.issues.listComments({ owner, repo, issue_number }); | |
const alreadyCommented = comments.some(c => c.body && c.body.includes(marker)); | |
if (isInvalid) { | |
if (!alreadyCommented) { | |
core.info("No existing reminder found. Posting a new comment..."); | |
await github.rest.issues.createComment({ | |
owner, repo, issue_number, | |
body: [ | |
`👋 Hello @${issue.user.login}!`, | |
`To complete your bug report, please specify which integration you are using.`, | |
"", | |
"Right now the field `**Which integration are you using?**` is set to `-- Select an option --`.", | |
"", | |
"Click **Edit** at the top right of the issue, choose a valid option from the dropdown, and save.", | |
].join("\n") | |
}); | |
} else { | |
core.info("Reminder comment already exists. Skipping new comment."); | |
} | |
} |