|
|
@@ -1,139 +0,0 @@
|
|
|
-#!/usr/bin/env node
|
|
|
-
|
|
|
-/**
|
|
|
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
|
|
|
- * For licensing, see LICENSE.md.
|
|
|
- */
|
|
|
-
|
|
|
-/* eslint-env node */
|
|
|
-
|
|
|
-'use strict';
|
|
|
-
|
|
|
-const path = require( 'path' );
|
|
|
-const { tools, logger } = require( '@ckeditor/ckeditor5-dev-utils' );
|
|
|
-const versionUtils = require( '@ckeditor/ckeditor5-dev-env/lib/release-tools/utils/versions' );
|
|
|
-const cli = require( '@ckeditor/ckeditor5-dev-env/lib/release-tools/utils/cli' );
|
|
|
-const createGithubRelease = require( '@ckeditor/ckeditor5-dev-env/lib/release-tools/utils/creategithubrelease' );
|
|
|
-const validatePackageToRelease = require( '@ckeditor/ckeditor5-dev-env/lib/release-tools/utils/validatepackagetorelease' );
|
|
|
-const { getChangesForVersion } = require( '@ckeditor/ckeditor5-dev-env/lib/release-tools/utils/changelog' );
|
|
|
-
|
|
|
-const log = logger();
|
|
|
-const cke5Path = path.resolve( __dirname, '..', '..' );
|
|
|
-const packageJsonPath = path.resolve( cke5Path, 'package.json' );
|
|
|
-const templatePath = path.resolve( cke5Path, 'scripts', 'release', 'template' );
|
|
|
-const packageJsonTemplatePath = path.resolve( templatePath, 'package.json' );
|
|
|
-const packageJsonTemplateCopy = require( packageJsonTemplatePath );
|
|
|
-
|
|
|
-// That files will be copied from source to template directory and will be released too.
|
|
|
-const additionalFiles = [
|
|
|
- 'CHANGELOG.md',
|
|
|
- 'LICENSE.md',
|
|
|
- 'README.md'
|
|
|
-];
|
|
|
-
|
|
|
-cli.provideToken()
|
|
|
- .then( token => {
|
|
|
- const gitVersion = versionUtils.getLastTagFromGit();
|
|
|
- const changelogVersion = versionUtils.getLastFromChangelog();
|
|
|
-
|
|
|
- log.info( 'Checking whether there is anything to release...' );
|
|
|
-
|
|
|
- // If the last tag is equal to version saved in changelog, we don't have new version for release.
|
|
|
- if ( gitVersion === changelogVersion ) {
|
|
|
- return reject( 'Before starting the release process, you should generate the changelog.' );
|
|
|
- }
|
|
|
-
|
|
|
- const releaseDescription = getChangesForVersion( changelogVersion );
|
|
|
-
|
|
|
- log.info( 'Validating the repository for the release...' );
|
|
|
-
|
|
|
- const errors = validatePackageToRelease( {
|
|
|
- version: changelogVersion,
|
|
|
- changes: releaseDescription
|
|
|
- } );
|
|
|
-
|
|
|
- // Abort due to errors during validation.
|
|
|
- if ( errors.length ) {
|
|
|
- const log = logger();
|
|
|
-
|
|
|
- log.error( 'Unexpected errors occured:' );
|
|
|
- errors.map( err => '* ' + err ).forEach( log.error.bind( log ) );
|
|
|
-
|
|
|
- return reject( 'Releasing has been aborted due to errors.' );
|
|
|
- }
|
|
|
-
|
|
|
- log.info( 'Bumping the version...' );
|
|
|
-
|
|
|
- // Bump the version.
|
|
|
- tools.shExec(
|
|
|
- `npm version ${ changelogVersion } --message "Release: v${ changelogVersion }." --allow-same-version`,
|
|
|
- { verbosity: 'error' }
|
|
|
- );
|
|
|
-
|
|
|
- tools.shExec( `git push origin master v${ changelogVersion }` );
|
|
|
-
|
|
|
- const packageJson = require( packageJsonPath );
|
|
|
-
|
|
|
- log.info( 'Copying the package.json...' );
|
|
|
-
|
|
|
- // Update the template of `package.json`. We will use values from source `package.json`
|
|
|
- // but only these ones which are defined in the template.
|
|
|
- tools.updateJSONFile( packageJsonTemplatePath, jsonFile => {
|
|
|
- for ( const property of Object.keys( jsonFile ) ) {
|
|
|
- // If the `property` is set in the template, leave it.
|
|
|
- if ( jsonFile[ property ] ) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- if ( property == 'private' ) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- // Copy value from original package.json file.
|
|
|
- jsonFile[ property ] = packageJson[ property ];
|
|
|
- }
|
|
|
-
|
|
|
- return jsonFile;
|
|
|
- } );
|
|
|
-
|
|
|
- // Copy additional files.
|
|
|
- for ( const file of additionalFiles ) {
|
|
|
- tools.shExec( `cp ${ path.resolve( cke5Path, file ) } ${ path.resolve( templatePath, file ) }` );
|
|
|
- }
|
|
|
-
|
|
|
- log.info( 'Publishing on npm...' );
|
|
|
-
|
|
|
- // Publish the package on npm.
|
|
|
- tools.shExec( `cd ${ templatePath } && npm publish && cd ${ cke5Path }` );
|
|
|
-
|
|
|
- // Remove files that were copy.
|
|
|
- for ( const file of additionalFiles ) {
|
|
|
- tools.shExec( `rm ${ path.resolve( templatePath, file ) }` );
|
|
|
- }
|
|
|
-
|
|
|
- log.info( 'Creating a release on GitHub...' );
|
|
|
-
|
|
|
- // Create a release on GitHub.
|
|
|
- return createGithubRelease( token, {
|
|
|
- repositoryOwner: 'ckeditor',
|
|
|
- repositoryName: 'ckeditor5',
|
|
|
- version: `v${ changelogVersion }`,
|
|
|
- description: releaseDescription
|
|
|
- } ).then( () => changelogVersion );
|
|
|
- } )
|
|
|
- .then( version => {
|
|
|
- log.info( 'Restoring the package.json template...' );
|
|
|
-
|
|
|
- // Restore the template `package.json` to state before the publishing process.
|
|
|
- tools.updateJSONFile( packageJsonTemplatePath, () => packageJsonTemplateCopy );
|
|
|
-
|
|
|
- const url = `https://github.com/ckeditor/ckeditor5/releases/tag/v${ version }`;
|
|
|
- log.info( `Created the release: ${ url }` );
|
|
|
- } )
|
|
|
- .catch( err => {
|
|
|
- log.error( err.stack );
|
|
|
- } );
|
|
|
-
|
|
|
-function reject( message ) {
|
|
|
- return Promise.reject( new Error( message ) );
|
|
|
-}
|