@jwpkg/gitversion
Version:
Gitversion is a complete customizable git-based release management system
121 lines • 11.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.YarnBerryPlugin = void 0;
const cli_1 = require("@yarnpkg/cli");
const core_1 = require("@yarnpkg/core");
const fslib_1 = require("@yarnpkg/fslib");
const plugin_npm_1 = require("@yarnpkg/plugin-npm");
const promises_1 = require("fs/promises");
const fs_1 = require("fs");
const path_1 = require("path");
const node_project_1 = require("./node-project");
class YarnBerryPlugin {
application;
yarnProject;
yarnConfiguration;
name = 'Yarn berry package manager plugin';
ident = 'yarn-berry';
get packManager() {
return this;
}
constructor(application, yarnProject, yarnConfiguration) {
this.application = application;
this.yarnProject = yarnProject;
this.yarnConfiguration = yarnConfiguration;
}
static async initialize(initialize) {
if ((0, fs_1.existsSync)((0, path_1.join)(initialize.cwd, 'yarn.lock'))) {
const yarnConfig = await core_1.Configuration.find(fslib_1.npath.toPortablePath(initialize.cwd), (0, cli_1.getPluginConfiguration)());
const { project } = await core_1.Project.find(yarnConfig, fslib_1.npath.toPortablePath(initialize.cwd));
return new YarnBerryPlugin(initialize, project, yarnConfig);
}
return null;
}
async pack(workspace, outputFolder) {
if (!(workspace instanceof node_project_1.NodeWorkspace)) {
return null;
}
if (workspace.private) {
return null;
}
const normalizedPackageName = `${workspace.packageName.replace(/@/g, '').replace(/\//g, '-')}-${workspace.version}.tgz`;
const outFile = (0, path_1.join)(outputFolder, normalizedPackageName);
await this.application.executor.exec(['yarn', 'pack', '-o', outFile], {
cwd: workspace.cwd,
});
return normalizedPackageName;
}
async publish(packedPackage, fileName, releaseTag, dryRun) {
const yarnWorkspace = this.yarnProject.workspaces.find(w => w.relativeCwd === packedPackage.packageRelativeCwd);
if (!yarnWorkspace) {
throw new Error('Mismatch between yarn workspace and gitversion workspace. Please file a bug with your package folder details at https://github.com/jwpkg/gitversion/issues');
}
else {
yarnWorkspace.manifest.version = packedPackage.version;
if (dryRun) {
this.application.logger.reportDryrun(`Would be publishing ${packedPackage.packageName} using release tag ${releaseTag}`);
return;
}
else {
// Check if running in CI environment
const isCI = process.env.CI === 'true' ||
process.env.GITHUB_ACTIONS === 'true' ||
process.env.GITLAB_CI === 'true' ||
process.env.CIRCLECI === 'true' ||
process.env.TRAVIS === 'true' ||
process.env.JENKINS_URL !== undefined ||
process.env.BUILDKITE === 'true';
if (isCI && !process.stdin.isTTY) {
this.application.logger.reportInfo('Running in CI environment - ensuring non-interactive mode');
}
const registry = plugin_npm_1.npmConfigUtils.getPublishRegistry(yarnWorkspace.manifest, { configuration: this.yarnConfiguration });
const gitHead = await plugin_npm_1.npmPublishUtils.getGitHead(yarnWorkspace.cwd);
const buffer = await (0, promises_1.readFile)(fileName);
const body = await plugin_npm_1.npmPublishUtils.makePublishBody(yarnWorkspace, buffer, {
tag: releaseTag,
access: undefined,
registry,
gitHead,
});
if (yarnWorkspace.manifest.name) {
const url = plugin_npm_1.npmHttpUtils.getIdentUrl(yarnWorkspace.manifest.name);
try {
await plugin_npm_1.npmHttpUtils.put(url, body, {
configuration: this.yarnConfiguration,
registry,
ident: yarnWorkspace.manifest.name,
// otp: this.otp,
jsonResponse: true,
});
}
catch (error) {
// Check if error is related to OTP/2FA
const errorMessage = error instanceof Error ? error.message : String(error);
const errorString = JSON.stringify(error);
if (isCI && !process.stdin.isTTY &&
(errorMessage.includes('one-time password') ||
errorMessage.includes('OTP') ||
errorMessage.includes('otpRequired') ||
errorString.includes('EOTP'))) {
throw new Error('Publishing failed: npm registry is requesting a one-time password (OTP) in CI environment.\n' +
'This typically happens when:\n' +
' 1. Your npm account has 2FA enabled (good!)\n' +
' 2. The NPM_AUTH_TOKEN is a "Classic" or "Publish" token that requires OTP\n' +
'\n' +
'To fix this:\n' +
' 1. Log in to npmjs.com\n' +
' 2. Go to Access Tokens → Generate New Token\n' +
' 3. Select "Automation" token type (bypasses OTP for CI/CD)\n' +
' 4. Update your NPM_AUTH_TOKEN secret with this new automation token\n' +
'\n' +
`Original error: ${errorMessage}`);
}
throw error;
}
}
}
}
}
}
exports.YarnBerryPlugin = YarnBerryPlugin;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFybi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL2VtYmVkZGVkL25vZGUveWFybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzQ0FBc0Q7QUFDdEQsd0NBQTJGO0FBQzNGLDBDQUF1QztBQUN2QyxvREFBb0Y7QUFDcEYsMENBQXVDO0FBQ3ZDLDJCQUFnQztBQUNoQywrQkFBNEI7QUFNNUIsaURBQStDO0FBRS9DLE1BQWEsZUFBZTtJQVFFO0lBQXdDO0lBQWtDO0lBUHRHLElBQUksR0FBRyxtQ0FBbUMsQ0FBQztJQUMzQyxLQUFLLEdBQUcsWUFBWSxDQUFDO0lBRXJCLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFlBQTRCLFdBQThCLEVBQVUsV0FBd0IsRUFBVSxpQkFBb0M7UUFBOUcsZ0JBQVcsR0FBWCxXQUFXLENBQW1CO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUksQ0FBQztJQUUvSSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUE2QjtRQUNuRCxJQUFJLElBQUEsZUFBVSxFQUFDLElBQUEsV0FBSSxFQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sb0JBQWlCLENBQUMsSUFBSSxDQUFDLGFBQUssQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUEsNEJBQXNCLEdBQUUsQ0FBQyxDQUFDO1lBRWhILE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLGNBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQUssQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0YsT0FBTyxJQUFJLGVBQWUsQ0FBQyxVQUFVLEVB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