mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-20 23:32:19 +02:00
other(qol): add pr title lint workflow
This commit is contained in:
parent
480a2568a9
commit
f554633c7a
75
.github/scripts/pr-title.ts
vendored
Normal file
75
.github/scripts/pr-title.ts
vendored
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import * as core from "@actions/core";
|
||||||
|
import * as github from "@actions/github";
|
||||||
|
|
||||||
|
const PREFIXES = ["ability", "balance", "bug", "docs", "feature", "item", "localize", "move", "other"] as const;
|
||||||
|
|
||||||
|
const LOCALES = ["es", "fr", "de", "it", "zh_CN", "zh_TW", "pt_BR", "ko"];
|
||||||
|
|
||||||
|
const validEvent = ["pull_request"];
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
try {
|
||||||
|
const authToken = core.getInput("github_token", { required: true });
|
||||||
|
const eventName = github.context.eventName;
|
||||||
|
core.info(`Event name: ${eventName}`);
|
||||||
|
if (!validEvent.includes(eventName)) {
|
||||||
|
core.setFailed(`Invalid event: ${eventName}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const client = github.getOctokit(authToken);
|
||||||
|
// The pull request info on the context isn't up to date. When
|
||||||
|
// the user updates the title and re-runs the workflow, it would
|
||||||
|
// be outdated. Therefore fetch the pull request via the REST API
|
||||||
|
// to ensure we use the current title.
|
||||||
|
const { data: pullRequest } = await client.rest.pulls.get({
|
||||||
|
owner: github.context.payload.pull_request!.base.user.login,
|
||||||
|
repo: github.context.payload.pull_request!.base.repo.name,
|
||||||
|
pull_number: github.context.payload.pull_request!.number,
|
||||||
|
});
|
||||||
|
|
||||||
|
const title = pullRequest.title;
|
||||||
|
// const title = "poop(asd): asdasdasd";
|
||||||
|
core.info(`Pull Request title: "${title}"`);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const info = `
|
||||||
|
Terminology: feat(ui): Add new feature
|
||||||
|
^ ^ ^
|
||||||
|
| | |__ Subject
|
||||||
|
| |_______ Scope
|
||||||
|
|____________ Prefix
|
||||||
|
`;
|
||||||
|
|
||||||
|
core.info(info.trim());
|
||||||
|
|
||||||
|
// Check if title pass regex
|
||||||
|
const regex = RegExp(/^[a-zA-Z]+(\([a-zA-Z]+\))?: .+/);
|
||||||
|
if (!regex.test(title)) {
|
||||||
|
core.setFailed(`Pull Request title "${title}" failed to match - 'Prefix(Scrope): Subject'`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if title starts with an allowed prefix
|
||||||
|
core.info(`Allowed prefixes: ${PREFIXES}`);
|
||||||
|
if (!PREFIXES.some((prefix) => title.startsWith(prefix))) {
|
||||||
|
core.setFailed(`Pull Request title "${title}" did not match any of the prefixes - ${PREFIXES}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if title has an allowed scope
|
||||||
|
if (title.startsWith("localize")) {
|
||||||
|
core.info(`Allowed locale scopes: ${LOCALES}`);
|
||||||
|
const scope = regex.exec(title);
|
||||||
|
if (!scope || !LOCALES.includes(scope[1])) {
|
||||||
|
core.setFailed(`Pull Request title "${title}" did not match any of the locale scope - (${LOCALES})`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
core.setFailed(error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
run();
|
21
.github/workflows/pr-title.yml
vendored
Normal file
21
.github/workflows/pr-title.yml
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
name: PR Title Validation
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, edited, synchronize, reopened]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@master
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
|
||||||
|
- run: npm i --no-save @actions/core @actions/github tsx
|
||||||
|
|
||||||
|
- name: Lint PR
|
||||||
|
run: npx tsx ./.github/scripts/pr-title.ts
|
||||||
|
env:
|
||||||
|
INPUT_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
Loading…
Reference in New Issue
Block a user