2022-05-30 13:44:54 +08:00
import chalk from "chalk" ;
import outdent from "outdent" ;
import fetch from "node-fetch" ;
import { waitForEnter , logPromise } from "../utils.js" ;
const outdentString = outdent . string ;
export async function isVersionReleased ( version ) {
const response = await fetch ( "https://registry.npmjs.org/prettier/" );
const result = await response . json ();
const versionExists = version in result . time ;
if ( ! versionExists ) {
throw new Error ( `prettier@ ${ version } doesn't exit.` );
}
return versionExists ;
}
async function checkBotPermission () {
const response = await fetch ( "https://registry.npmjs.org/prettier/" );
const { maintainers } = await response . json ();
return maintainers . some (({ name }) => name === "prettier-bot" );
}
checkBotPermission ();
const sleep = () =>
new Promise (( resolve ) => {
setTimeout ( resolve , 30_000 );
});
export default async function waitForBotRelease ({ dry , version }) {
if ( dry ) {
return ;
}
if ( ! ( await checkBotPermission ())) {
console . log (
outdentString ( chalk /* indent */ `
1. Go to {green.underline https://www.npmjs.com/package/prettier/access}
2. Add "{yellow prettier-bot}" as prettier package maintainer.
Press ENTER to continue.
` )
);
await waitForEnter ();
}
2022-06-14 14:23:34 +08:00
console . log (
outdentString ( chalk /* indent */ `
1. Go to {green.underline https://www.npmjs.com/package/prettier/access}
2. Make sure "{yellow Publishing access}" section is set to "{yellow Require two-factor authentication or automation tokens}".
Press ENTER to continue.
` )
);
await waitForEnter ();
2022-05-30 13:44:54 +08:00
console . log (
outdentString ( chalk /* indent */ `
1. Go to {green.underline https://github.com/prettier/release-workflow/actions/workflows/release.yml}
2. Click "{green Run workflow}" button, type "{yellow.underline ${ version } }" in "Version to release", uncheck all checkboxes, hit the "{bgGreen Run workflow}" button.
Press ENTER to continue.
` )
);
await waitForEnter ();
let released = false ;
while ( ! released ) {
try {
released = await logPromise (
"Checking release status" ,
isVersionReleased ( version )
);
} catch {
// No op
}
if ( ! released ) {
await logPromise ( "Wait for 30s" , sleep ());
}
}
}