solana-improvement-documents/.github/linter/index.ts

149 lines
3.0 KiB
TypeScript

import markdownlint from "markdownlint"
import {
enforceHeaderStructure,
enforceMetadataStructure,
metadataSimdIsValid,
metadataTitleIsValid,
metadataAuthorsIsValid,
metadataCategoryIsValid,
metadataTypeIsValid,
metadataStatusIsValid,
} from "./customRules"
import fs from "fs"
import path from "path"
const core = require('@actions/core');
async function main() {
const dir = path.join(__dirname, "../../proposals")
const files = fs.readdirSync(dir).filter((f) => {
if (f.indexOf("0001-simd-process.md")) {
return true
}
return false
}).map((f) => {
return path.join(dir, f)
})
//const configuration = markdownlint.readConfigSync('../config/.markdownlint.json')
const linted = markdownlint.sync({
files: files,
config: {
default: true,
MD001: true,
MD002: false,
MD003: {
style: "atx"
},
MD004: {
style: "consistent"
},
MD005: true,
MD006: false,
MD007: false,
MD009: false,
MD010: false,
MD011: true,
MD012: false,
MD013: true,
MD014: false,
MD018: true,
MD019: true,
MD020: true,
MD021: true,
MD022: true,
MD023: true,
MD024: {
allow_different_nesting: true
},
MD025: {
level: 1,
front_matter_title: "^\\s*title\\s*[:=]"
},
MD026: false,
MD027: false,
MD028: true,
MD029: false,
MD030: {
ul_single: 1,
ol_single: 1,
ul_multi: 1,
ol_multi: 1
},
MD031: {
list_items: true
},
MD032: true,
MD033: {
allowed_elements: []
},
MD034: false,
MD035: {
style: "consistent"
},
MD036: false,
MD037: false,
MD038: true,
MD039: false,
MD040: false,
MD041: {
level: 1,
front_matter_title: "^\\s*title\\s*[:=]"
},
MD042: true,
MD043: false,
MD044: {
names: [],
code_blocks: true,
html_elements: true
},
MD045: false,
MD046: {
style: "consistent"
},
MD047: false,
MD048: {
style: "consistent"
},
MD049: {
style: "consistent"
},
MD050: {
style: "consistent"
},
MD051: true,
MD052: true,
MD053: true
},
customRules: [
enforceHeaderStructure,
enforceMetadataStructure,
metadataSimdIsValid,
metadataTitleIsValid,
metadataAuthorsIsValid,
metadataCategoryIsValid,
metadataTypeIsValid,
metadataStatusIsValid,
],
})
console.log(linted)
let errorCount = 0
for (let lint in linted) {
errorCount += linted[lint].length
}
if (errorCount > 0) {
throw new Error(JSON.stringify(linted))
}
}
main()
.then(() => {
console.log("Finished Successfully")
process.exit(0)
})
.catch((error) => {
core.setFailed(error)
process.exit(1)
})