mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-15 17:31:56 +03:00
53a3803ba4
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/7691 GitOrigin-RevId: 4e3926b4105f0bc15dce75b154f6ef60292c5074
76 lines
2.3 KiB
JavaScript
76 lines
2.3 KiB
JavaScript
/**
|
|
* This is a minimal script to publish your package to "npm".
|
|
* This is meant to be used as-is or customize as you see fit.
|
|
*
|
|
* This script is executed on "dist/path/to/library" as "cwd" by default.
|
|
*
|
|
* You might need to authenticate with NPM before running this script.
|
|
*/
|
|
|
|
import { readCachedProjectGraph } from '@nrwl/devkit';
|
|
import { execSync } from 'child_process';
|
|
import { readFileSync, appendFileSync, writeFileSync } from 'fs';
|
|
import chalk from 'chalk';
|
|
|
|
function invariant(condition, message) {
|
|
if (!condition) {
|
|
console.error(chalk.bold.red(message));
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// Executing publish script: node path/to/publish.mjs {name} --version {version} --tag {tag}
|
|
// Default "tag" to "next" so we won't publish the "latest" tag by accident.
|
|
const [, , name, version, tagInput] = process.argv;
|
|
|
|
const tag = tagInput ?? 'next';
|
|
|
|
// A simple SemVer validation to validate the version
|
|
const validVersion = /^\d+\.\d+\.\d+(-\w+\.\d+)?/;
|
|
invariant(
|
|
version && validVersion.test(version),
|
|
`No version provided or version did not match Semantic Versioning, expected: #.#.#-tag.# or #.#.#, got ${version}.`
|
|
);
|
|
|
|
const graph = readCachedProjectGraph();
|
|
const project = graph.nodes[name];
|
|
|
|
invariant(
|
|
project,
|
|
`Could not find project "${name}" in the workspace. Is the project.json configured correctly?`
|
|
);
|
|
|
|
const outputPath = project.data?.targets?.build?.options?.outputPath;
|
|
invariant(
|
|
outputPath,
|
|
`Could not find "build.options.outputPath" of project "${name}". Is project.json configured correctly?`
|
|
);
|
|
|
|
process.chdir(outputPath);
|
|
|
|
// Updating the version in "package.json" before publishing
|
|
try {
|
|
const json = JSON.parse(readFileSync(`package.json`).toString());
|
|
json.version = version;
|
|
writeFileSync(`package.json`, JSON.stringify(json, null, 2));
|
|
} catch (e) {
|
|
console.error(
|
|
chalk.bold.red(`Error reading package.json file from library build output.`)
|
|
);
|
|
}
|
|
try {
|
|
appendFileSync('.npmrc', '//registry.npmjs.org/:_authToken=${NPM_TOKEN}');
|
|
} catch (e) {
|
|
console.error(chalk.bold.red(`Error writing to npmrc.`));
|
|
}
|
|
|
|
if (process.env.BUILDKITE) {
|
|
execSync(`npm publish --access public --tag ${tag}`, {
|
|
env: { ...process.env, CI: 'true' },
|
|
});
|
|
} else {
|
|
console.log('DRY RUN, since we are not in CI.');
|
|
console.log(`npm publish --access public --tag ${tag}`);
|
|
console.log(`With version ${version}`);
|
|
}
|