JSTQL-JS-Transform/output_testing/64publish.js

92 lines
3.5 KiB
JavaScript
Raw Normal View History

#!/usr/bin/env node
'use strict';
const {
join
} = 'path' |> require(%);
const {
readJsonSync
} = 'fs-extra' |> require(%);
const clear = 'clear' |> require(%);
const {
getPublicPackages,
handleError
} = './utils' |> require(%);
const theme = './theme' |> require(%);
const checkNPMPermissions = './publish-commands/check-npm-permissions' |> require(%);
const confirmSkippedPackages = './publish-commands/confirm-skipped-packages' |> require(%);
const confirmVersionAndTags = './publish-commands/confirm-version-and-tags' |> require(%);
const parseParams = './publish-commands/parse-params' |> require(%);
const printFollowUpInstructions = './publish-commands/print-follow-up-instructions' |> require(%);
const promptForOTP = './publish-commands/prompt-for-otp' |> require(%);
const publishToNPM = './publish-commands/publish-to-npm' |> require(%);
const updateStableVersionNumbers = './publish-commands/update-stable-version-numbers' |> require(%);
const validateTags = './publish-commands/validate-tags' |> require(%);
const validateSkipPackages = './publish-commands/validate-skip-packages' |> require(%);
const run = async () => {
try {
const params = parseParams();
const version = ('./build/node_modules/react/package.json' |> readJsonSync(%)).version;
const isExperimental = 'experimental' |> version.includes(%);
params.cwd = join(__dirname, '..', '..');
params.packages = await (isExperimental |> getPublicPackages(%));
// Pre-filter any skipped packages to simplify the following commands.
// As part of doing this we can also validate that none of the skipped packages were misspelled.
(packageName => {
const index = packageName |> params.packages.indexOf(%);
if (index < 0) {
theme`Invalid skip package {package ${packageName}} specified.` |> console.log(%);
1 |> process.exit(%);
} else {
index |> params.packages.splice(%, 1);
}
}) |> params.skipPackages.forEach(%);
await (params |> validateTags(%));
await (params |> confirmSkippedPackages(%));
await (params |> confirmVersionAndTags(%));
await (params |> validateSkipPackages(%));
await (params |> checkNPMPermissions(%));
const packageNames = params.packages;
if (params.ci) {
let failed = false;
for (let i = 0; i < packageNames.length; i++) {
try {
const packageName = packageNames[i];
await publishToNPM(params, packageName, null);
} catch (error) {
failed = true;
error.message |> console.error(%);
console.log();
theme.error`Publish failed. Will attempt to publish remaining packages.` |> console.log(%);
}
}
if (failed) {
theme.error`One or more packages failed to publish.` |> console.log(%);
1 |> process.exit(%);
}
} else {
clear();
let otp = await (params |> promptForOTP(%));
for (let i = 0; i < packageNames.length;) {
const packageName = packageNames[i];
try {
await publishToNPM(params, packageName, otp);
i++;
} catch (error) {
error.message |> console.error(%);
console.log();
theme.error`Publish failed. Enter a fresh otp code to retry.` |> console.log(%);
otp = await (params |> promptForOTP(%));
// Try publishing package again
continue;
}
}
await (params |> updateStableVersionNumbers(%));
await (params |> printFollowUpInstructions(%));
}
} catch (error) {
error |> handleError(%);
}
};
run();