"use strict"; const chalk = require("chalk"); const dedent = require("dedent"); const fetch = require("node-fetch"); const { exec } = require("child-process-promise"); const { logPromise, waitForEnter } = require("../utils"); const SCHEMA_REPO = "SchemaStore/schemastore"; const SCHEMA_PATH = "src/schemas/json/prettierrc.json"; const RAW_URL = `https://raw.githubusercontent.com/${SCHEMA_REPO}/master/${SCHEMA_PATH}`; const EDIT_URL = `https://github.com/${SCHEMA_REPO}/edit/master/${SCHEMA_PATH}`; // Any optional or manual step can be warned in this script. async function checkSchema() { const schema = (await exec("node scripts/generate-schema.js")).stdout.trim(); const remoteSchema = await logPromise( "Checking current schema in SchemaStore", fetch(RAW_URL) .then(r => r.text()) .then(t => t.trim()) ); if (schema === remoteSchema) { return; } return dedent(chalk` {bold.underline The schema in {yellow SchemaStore} needs an update.} - Open {cyan.underline ${EDIT_URL}} - Run {yellow node scripts/generate-schema.js} and copy the new schema - Paste it on GitHub interface - Open a PR `); } function twitterAnnouncement() { return dedent(chalk` {bold.underline Announce on Twitter} - Open {cyan.underline https://tweetdeck.twitter.com} - Make sure you are tweeting from the {yellow @PrettierCode} account. - Tweet about the release, including the blog post URL. `); } module.exports = async function() { const steps = [await checkSchema(), twitterAnnouncement()].filter(Boolean); console.log(chalk.bold.green("The script has finished!\n")); if (steps.length === 0) { return; } console.log( dedent(chalk` {yellow.bold The following ${ steps.length === 1 ? "step is" : "steps are" } optional.} ${steps.join("\n\n")} `) ); };