Files
test-repo/scripts/release/steps/wait-for-bot-release.js
T

95 lines
2.2 KiB
JavaScript

import chalk from "chalk";
import outdent from "outdent";
import { waitForEnter, logPromise } from "../utils.js";
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");
}
const sleep = () =>
new Promise((resolve) => {
setTimeout(resolve, 30_000);
});
export default async function waitForBotRelease({ dry, version }) {
if (dry) {
return;
}
if (!(await checkBotPermission())) {
console.log(
outdent`
1. Go to ${chalk.green.underline(
"https://www.npmjs.com/package/prettier/access",
)}
2. Add "${chalk.yellow("prettier-bot")}" as prettier package maintainer.
`,
);
await waitForEnter();
}
console.log(
outdent`
1. Go to ${chalk.green.underline(
"https://www.npmjs.com/package/prettier/access",
)}
2. Make sure "${chalk.yellow(
"Publishing access",
)}" section is set to "${chalk.yellow(
"Require two-factor authentication or automation tokens",
)}".
`,
);
await waitForEnter();
console.log(
outdent`
1. Go to ${chalk.green.underline(
"https://github.com/prettier/release-workflow/actions/workflows/release.yml",
)}
2. Click "${chalk.green(
"Run workflow",
)}" button, type "${chalk.yellow.underline(
version,
)}" in "Version to release", uncheck all checkboxes, hit the "${chalk.bgGreen(
"Run workflow",
)}" button.
`,
);
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());
}
}
}