/** * This scripts gathers source markdown files of approved and proposed RFCS into the mdbook/src directory. */ const fs = require('fs'); // The amount of days that an RFC is considered "new". // Counted from the creation of a given PR. const NEW_RFC_PERIOD_DAYS = 7 // The amount of days that an RFC is considered "stale". // Counted from the last update on a PR. const STALE_RFC_PERIOD_DAYS = 30 const dateDaysBefore = (daysBefore) => { const result = new Date() result.setDate(result.getDate() - daysBefore) return result } [ "mdbook/src/approved", "mdbook/src/new", "mdbook/src/stale", "mdbook/src/proposed" ].forEach(path => fs.mkdirSync(path, {resursive: true})) const TOC = "**Table of Contents**\n\n<\!-- toc -->\n" module.exports = async ({github, context}) => { const owner = 'polkadot-fellows' const repo = 'RFCs' const prs = await github.paginate(github.rest.pulls.list, {owner, repo, state: 'open'}) /* The open PRs are potential proposed RFCs. We iterate over them and filter those that include a new RFC markdown file. */ for (const pr of prs) { const addedMarkdownFiles = ( await github.rest.pulls.listFiles({ owner, repo, pull_number: pr.number, }) ).data.filter( (file) => file.status === "added" && file.filename.startsWith("text/") && file.filename.includes(".md"), ); if (addedMarkdownFiles.length !== 1) continue; const [rfcFile] = addedMarkdownFiles; const rawText = await (await fetch(rfcFile.raw_url)).text(); const isNew = new Date(pr.created_at) > dateDaysBefore(NEW_RFC_PERIOD_DAYS) const isStale = new Date(pr.updated_at) < dateDaysBefore(STALE_RFC_PERIOD_DAYS) const status = isNew ? 'new' : (isStale ? 'stale' : 'proposed') const filename = rfcFile.filename.replace("text/", "") fs.writeFileSync( `mdbook/src/${status}/${filename}`, `[(source)](${pr.html_url})\n\n` + TOC + rawText ) } // Copy the approved (already-merged) RFCs markdown files, first adding a source link at the top and a TOC. for (const file of fs.readdirSync("text/")) { if (!file.endsWith(".md")) continue; const text = `[(source)](https://github.com/polkadot-fellows/RFCs/blob/main/text/${file})\n\n` + TOC + fs.readFileSync(`text/${file}`) fs.writeFileSync(`mdbook/src/approved/${file}`, text) } }