escanor-dev.js.org #4757
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: Validate | |
on: | |
push: | |
branches: | |
- master | |
pull_request: | |
branches: | |
- master | |
types: | |
- opened | |
- reopened | |
- edited | |
- synchronize | |
permissions: | |
contents: read | |
jobs: | |
validate-cnames: | |
runs-on: ubuntu-latest | |
env: | |
GH_EVENT_HASH: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ env.GH_EVENT_HASH }} | |
- uses: actions/checkout@v4 | |
with: | |
repository: js-org/js.org-cleanup | |
path: cleanup | |
- uses: actions/setup-node@v4 | |
with: | |
node-version-file: cleanup/.nvmrc | |
cache: npm | |
cache-dependency-path: cleanup/package-lock.json | |
- name: Install dependencies | |
run: npm ci | |
working-directory: cleanup | |
- name: Validate cnames_active.js | |
run: node index.js --validate ../cnames_active.js | |
working-directory: cleanup | |
validate-pr-template: | |
if: github.event_name == 'pull_request' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Validate PR template | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const body = context.payload.pull_request.body || ""; | |
// 1. Check both checkboxes | |
const checkbox1 = /\[x\].*?There is reasonable content/i.test(body); | |
const checkbox2 = /\[x\].*?I have read and accepted/i.test(body); | |
// 2. URL must be on the exact "The site content can be seen at ..." line | |
const urlLineRegex = /^[ \t]*-[ \t]*The site content can be seen at[ \t]+(https?:\/\/[^\s]+)/m; | |
const urlMatch = urlLineRegex.exec(body); | |
const urlValid = urlMatch !== null; | |
// 3. Explanation must follow the blockquote marker | |
const explanationMatch = />\s*The site content is(?:\s*|\s*\n)(.+)/i.exec(body); | |
const explanation = explanationMatch && explanationMatch[1].trim().length > 10; | |
if (!checkbox1 || !checkbox2 || !urlValid || !explanation) { | |
core.setFailed( | |
"❌ PR template is not properly filled:\n" + | |
`Checkbox1: ${checkbox1 ? '✅' : '❌'}\n` + | |
`Checkbox2: ${checkbox2 ? '✅' : '❌'}\n` + | |
`URL on correct line: ${urlValid ? '✅' : '❌'}\n` + | |
`Explanation: ${explanation ? '✅' : '❌'}` | |
); | |
} else { | |
console.log("✅ PR template format is valid."); | |
} |