mirror of
https://github.com/xHyroM/bun-discord-bot.git
synced 2024-11-21 22:21:05 +01:00
ci: adapt validate tags
This commit is contained in:
parent
c7cffecfab
commit
4ed957a650
5 changed files with 39 additions and 35 deletions
BIN
scripts/validate_tags/bun.lockb
Executable file
BIN
scripts/validate_tags/bun.lockb
Executable file
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
["files/tags.toml"]
|
|
@ -1,6 +1,9 @@
|
|||
{
|
||||
"name": "validate_tags",
|
||||
"scripts": {
|
||||
"start": "bun src/index.ts"
|
||||
}
|
||||
"name": "validate_tags",
|
||||
"scripts": {
|
||||
"start": "bun src/index.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"glob": "^10.3.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,36 +1,48 @@
|
|||
interface Tag {
|
||||
keywords: string[];
|
||||
content: string;
|
||||
}
|
||||
import type { Tag } from "../../../src/structs/Tag.ts";
|
||||
import { globSync as glob } from "glob";
|
||||
import * as matter from "gray-matter";
|
||||
import { join, dirname } from "node:path";
|
||||
import { readFileSync } from "node:fs";
|
||||
|
||||
const githubToken = process.env['github-token'];
|
||||
const commitSha = process.env['commit-sha'];
|
||||
const pullRequestNumber = process.env['pr-number'];
|
||||
|
||||
const codeBlockRegex = /(`{1,3}).+?\1/gs;
|
||||
const urlRegex =
|
||||
/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/\/=]*)/gi;
|
||||
|
||||
// Check if files/tags.toml was changed
|
||||
const files = await Bun.file('./files.json').text();
|
||||
if (!files.includes('files/tags.toml')) process.exit(0);
|
||||
const files = await Bun.file('./files.json').json() as string[];
|
||||
if (!files.some(f => f.includes("tags"))) process.exit(0);
|
||||
|
||||
const errors = [];
|
||||
|
||||
let tags;
|
||||
try {
|
||||
tags = (await import('../../../files/tags.toml')).default;
|
||||
const tags: Tag[] = [];
|
||||
const tagPaths = glob(join(__dirname, "..", "..", "..", "data", "tags", "*.md"));
|
||||
for (const tagPath of tagPaths) {
|
||||
const content = readFileSync(tagPath);
|
||||
const frontMatter = matter(content);
|
||||
|
||||
tags.push({
|
||||
name: dirname(tagPath),
|
||||
question: frontMatter.data.question,
|
||||
keywords: frontMatter.data.keywords,
|
||||
answer: frontMatter.content,
|
||||
category_ids: frontMatter.data.category_ids ?? null,
|
||||
channel_ids: frontMatter.data.channel_ids ?? null,
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
await requestGithub(`issues/${pullRequestNumber}/labels`, {
|
||||
labels: ['tags'],
|
||||
});
|
||||
} catch (e) {
|
||||
tags = [];
|
||||
errors.push(e.message);
|
||||
}
|
||||
|
||||
for (const [key, value] of Object.entries(tags)) {
|
||||
const tag = value as Tag;
|
||||
for (const tag of tags) {
|
||||
const key = tag.name;
|
||||
|
||||
if (!tag?.keywords || tag.keywords.length === 0)
|
||||
errors.push(`**[${key}]:** Tag must have keywords`);
|
||||
|
@ -38,15 +50,12 @@ for (const [key, value] of Object.entries(tags)) {
|
|||
errors.push(
|
||||
`**[${key}]:** First keyword of tag is not the same as the tag name`
|
||||
);
|
||||
if (!tag.content) errors.push(`**[${key}]:** Tag must have content`);
|
||||
if (!tag.answer) errors.push(`**[${key}]:** Tag must have content`);
|
||||
|
||||
if (tag.content) {
|
||||
const cleanedContent = tag.content
|
||||
.replaceAll('+++', '```')
|
||||
.replace(codeBlockRegex, '');
|
||||
for (const url of cleanedContent.match(urlRegex) || []) {
|
||||
const firstChar = tag.content.split(url)[0].slice(-1);
|
||||
const lastChar = tag.content.split(url)[1].slice(0, 1);
|
||||
if (tag.answer) {
|
||||
for (const url of tag.answer.match(urlRegex) || []) {
|
||||
const firstChar = tag.answer.split(url)[0].slice(-1);
|
||||
const lastChar = tag.answer.split(url)[1].slice(0, 1);
|
||||
if (firstChar !== '<' || lastChar !== '>')
|
||||
errors.push(`**[${key}]:** Link must be wrapped in <>`);
|
||||
}
|
||||
|
|
|
@ -1,10 +1,3 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"lib": ["ESNext"],
|
||||
"module": "esnext",
|
||||
"target": "esnext",
|
||||
"moduleResolution": "Node",
|
||||
// "bun-types" is the important part
|
||||
"types": ["bun-types"]
|
||||
}
|
||||
}
|
||||
"extends": "../../tsconfig.json"
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue