function init()

in scripts/release.js [25:91]


function init() {
  let latestTag = getLatestTag();
  let proposedVersion = incrementVersion(pkg.version);

  log(`- Current Version: ${pkg.version}`);
  log(`- Latest Tag: ${latestTag || 'None'}`);
  log();

  log('Please specify the new version to be released.');
  let version = prompt(`Version (${proposedVersion}):`) || proposedVersion;

  log();
  info(`> Creating release for ${version}...`);

  if (pkg.version !== version) {
    updateVersion(version);
    createCommit(`release(): publish ${version}`, ['package.json']);

    info('> Updated version inside of package.json');
  } else {
    info('> Keeping existing version inside of package.json');
  }

  fse.removeSync(OUT_DIR);
  info('> Deleted distribution folder.');

  let hasBuilt = buildDistribution();

  if (!hasBuilt) {
    log();
    error('An error occurred while building the source files.');
    return;
  } else {
    info('> Successfully built the source files.');
  }

  copyFiles(['README.md']);
  info('> Copied project description into distribution folder.');

  if (tagRelease(version)) {
    info('> Created git tag for new version.');
  } else {
    log();
    error('An error occurred while tagging the new version.');
    return;
  }

  success('> Successfully built a release.');
  log();

  let response = prompt('Do you want to publish the new version to NPM? (yes)');
  let shouldPublish = response === 'yes' || response === '';

  if (shouldPublish) {
    let oneTimePassword = prompt('Enter your NPM one-time password: ');
    info('> Publishing to NPM...');

    if (publishPackage(oneTimePassword)) {
      success('> Successfully published package to NPM.');
    } else {
      error('An error occurred while publishing to NPM');
    }
  }

  log();
  info('> Exiting the release script... Bye!');
}