Package Release: handle initial release case (#36922)
This commit is contained in:
parent
2700a44463
commit
da1dce8f19
|
@ -3,7 +3,7 @@ on:
|
|||
workflow_dispatch:
|
||||
inputs:
|
||||
packages:
|
||||
description: 'Enter a specific package to release, or packages separated by commas, ie @woocommerce/components,@woocommerce/number. Leaving this input to the default "-a" will prepare to release all eligible packages.'
|
||||
description: 'Enter a specific package to release, or packages separated by commas, ie @woocommerce/components,@woocommerce/number. Leaving this input to the default "-a" will prepare to release all eligible packages. When releasing a package for the first time, pass the "--initialRelease" flag.'
|
||||
required: false
|
||||
default: '-a'
|
||||
|
||||
|
|
|
@ -62,4 +62,12 @@ To create a new package, add a new folder to `/packages`, containing…
|
|||
- Usage example
|
||||
4. A `src` directory for the source of your module, which will be built by default using the `pnpm run turbo:build` command. Note that you'll want an `index.js` file that exports the package contents, see other packages for examples.
|
||||
|
||||
5. Add the new package name to `packages/js/dependency-extraction-webpack-plugin/assets/packages.js` so that users of that plugin will also be able to use the new package without enqueuing it.
|
||||
5. A blank Changelog file, `changelog.md`.
|
||||
|
||||
```
|
||||
# Changelog
|
||||
|
||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
```
|
||||
|
||||
6. Add the new package name to `packages/js/dependency-extraction-webpack-plugin/assets/packages.js` so that users of that plugin will also be able to use the new package without enqueuing it.
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
# Changelog
|
||||
|
||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
@ -0,0 +1,5 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
Comment: Added a blank changelog file
|
||||
|
||||
|
|
@ -2705,32 +2705,6 @@ packages:
|
|||
semver: 6.3.0
|
||||
dev: true
|
||||
|
||||
/@babel/helper-compilation-targets/7.17.7_@babel+core@7.12.9:
|
||||
resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
dependencies:
|
||||
'@babel/compat-data': 7.19.3
|
||||
'@babel/core': 7.12.9
|
||||
'@babel/helper-validator-option': 7.18.6
|
||||
browserslist: 4.19.3
|
||||
semver: 6.3.0
|
||||
dev: true
|
||||
|
||||
/@babel/helper-compilation-targets/7.17.7_@babel+core@7.16.12:
|
||||
resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
dependencies:
|
||||
'@babel/compat-data': 7.19.3
|
||||
'@babel/core': 7.16.12
|
||||
'@babel/helper-validator-option': 7.18.6
|
||||
browserslist: 4.19.3
|
||||
semver: 6.3.0
|
||||
dev: false
|
||||
|
||||
/@babel/helper-compilation-targets/7.17.7_@babel+core@7.17.8:
|
||||
resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
@ -6393,9 +6367,9 @@ packages:
|
|||
'@babel/core': ^7.0.0-0
|
||||
dependencies:
|
||||
'@babel/core': 7.16.12
|
||||
'@babel/helper-module-imports': 7.16.0
|
||||
'@babel/helper-plugin-utils': 7.14.5
|
||||
babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.16.12
|
||||
'@babel/helper-module-imports': 7.18.6
|
||||
'@babel/helper-plugin-utils': 7.19.0
|
||||
babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.16.12
|
||||
babel-plugin-polyfill-corejs3: 0.4.0_@babel+core@7.16.12
|
||||
babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.16.12
|
||||
semver: 6.3.0
|
||||
|
@ -6410,9 +6384,9 @@ packages:
|
|||
'@babel/core': ^7.0.0-0
|
||||
dependencies:
|
||||
'@babel/core': 7.17.8
|
||||
'@babel/helper-module-imports': 7.16.0
|
||||
'@babel/helper-plugin-utils': 7.14.5
|
||||
babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.17.8
|
||||
'@babel/helper-module-imports': 7.18.6
|
||||
'@babel/helper-plugin-utils': 7.19.0
|
||||
babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.17.8
|
||||
babel-plugin-polyfill-corejs3: 0.4.0_@babel+core@7.17.8
|
||||
babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.17.8
|
||||
semver: 6.3.0
|
||||
|
@ -6921,7 +6895,7 @@ packages:
|
|||
dependencies:
|
||||
'@babel/compat-data': 7.17.7
|
||||
'@babel/core': 7.12.9
|
||||
'@babel/helper-compilation-targets': 7.17.7_@babel+core@7.12.9
|
||||
'@babel/helper-compilation-targets': 7.19.3_@babel+core@7.12.9
|
||||
'@babel/helper-plugin-utils': 7.18.9
|
||||
'@babel/helper-validator-option': 7.16.7
|
||||
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.7_@babel+core@7.12.9
|
||||
|
@ -6988,7 +6962,7 @@ packages:
|
|||
'@babel/plugin-transform-unicode-escapes': 7.16.7_@babel+core@7.12.9
|
||||
'@babel/plugin-transform-unicode-regex': 7.16.7_@babel+core@7.12.9
|
||||
'@babel/preset-modules': 0.1.5_@babel+core@7.12.9
|
||||
'@babel/types': 7.17.0
|
||||
'@babel/types': 7.19.3
|
||||
babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.12.9
|
||||
babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.12.9
|
||||
babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.12.9
|
||||
|
@ -7006,7 +6980,7 @@ packages:
|
|||
dependencies:
|
||||
'@babel/compat-data': 7.17.7
|
||||
'@babel/core': 7.16.12
|
||||
'@babel/helper-compilation-targets': 7.17.7_@babel+core@7.16.12
|
||||
'@babel/helper-compilation-targets': 7.19.3_@babel+core@7.16.12
|
||||
'@babel/helper-plugin-utils': 7.18.9
|
||||
'@babel/helper-validator-option': 7.16.7
|
||||
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.7_@babel+core@7.16.12
|
||||
|
@ -7073,7 +7047,7 @@ packages:
|
|||
'@babel/plugin-transform-unicode-escapes': 7.16.7_@babel+core@7.16.12
|
||||
'@babel/plugin-transform-unicode-regex': 7.16.7_@babel+core@7.16.12
|
||||
'@babel/preset-modules': 0.1.5_@babel+core@7.16.12
|
||||
'@babel/types': 7.17.0
|
||||
'@babel/types': 7.19.3
|
||||
babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.16.12
|
||||
babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.16.12
|
||||
babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.16.12
|
||||
|
@ -14511,7 +14485,7 @@ packages:
|
|||
dependencies:
|
||||
'@babel/runtime': 7.19.0
|
||||
'@wordpress/dom-ready': 3.10.0
|
||||
'@wordpress/i18n': 4.19.0
|
||||
'@wordpress/i18n': 4.26.0
|
||||
dev: false
|
||||
|
||||
/@wordpress/a11y/3.5.0:
|
||||
|
@ -14546,7 +14520,7 @@ packages:
|
|||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
'@babel/runtime': 7.19.0
|
||||
'@wordpress/i18n': 4.19.0
|
||||
'@wordpress/i18n': 4.26.0
|
||||
'@wordpress/url': 3.20.0
|
||||
dev: true
|
||||
|
||||
|
@ -14796,7 +14770,7 @@ packages:
|
|||
'@wordpress/deprecated': 3.19.0
|
||||
'@wordpress/dom': 3.19.0
|
||||
'@wordpress/element': 4.20.0
|
||||
'@wordpress/hooks': 3.19.0
|
||||
'@wordpress/hooks': 3.26.0
|
||||
'@wordpress/html-entities': 3.19.0
|
||||
'@wordpress/i18n': 4.26.0
|
||||
'@wordpress/icons': 9.10.0
|
||||
|
@ -14995,9 +14969,9 @@ packages:
|
|||
'@wordpress/deprecated': 3.19.0
|
||||
'@wordpress/dom': 3.19.0
|
||||
'@wordpress/element': 4.20.0
|
||||
'@wordpress/hooks': 3.19.0
|
||||
'@wordpress/hooks': 3.26.0
|
||||
'@wordpress/html-entities': 3.19.0
|
||||
'@wordpress/i18n': 4.19.0
|
||||
'@wordpress/i18n': 4.26.0
|
||||
'@wordpress/is-shallow-equal': 4.19.0
|
||||
'@wordpress/shortcode': 3.19.0
|
||||
colord: 2.9.2
|
||||
|
@ -15326,7 +15300,7 @@ packages:
|
|||
'@wordpress/dom': 3.19.0
|
||||
'@wordpress/element': 4.20.0
|
||||
'@wordpress/escape-html': 2.22.0
|
||||
'@wordpress/hooks': 3.19.0
|
||||
'@wordpress/hooks': 3.26.0
|
||||
'@wordpress/i18n': 4.26.0
|
||||
'@wordpress/icons': 9.10.0
|
||||
'@wordpress/is-shallow-equal': 4.19.0
|
||||
|
@ -15380,7 +15354,7 @@ packages:
|
|||
'@wordpress/dom': 3.19.0
|
||||
'@wordpress/element': 4.20.0
|
||||
'@wordpress/escape-html': 2.22.0
|
||||
'@wordpress/hooks': 3.19.0
|
||||
'@wordpress/hooks': 3.26.0
|
||||
'@wordpress/i18n': 4.26.0
|
||||
'@wordpress/icons': 9.10.0
|
||||
'@wordpress/is-shallow-equal': 4.19.0
|
||||
|
@ -15762,14 +15736,14 @@ packages:
|
|||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
'@babel/runtime': 7.19.0
|
||||
'@wordpress/hooks': 3.19.0
|
||||
'@wordpress/hooks': 3.26.0
|
||||
|
||||
/@wordpress/deprecated/3.19.0:
|
||||
resolution: {integrity: sha512-0YdT5emjDd7RPwQ0SMlUqqwxlxRDvF3hDsFJkUmMU5CtMVbWh+vnaGSmFEYJB7LyGc7ZkN0/BOvD2THl8bNnoA==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
'@babel/runtime': 7.19.0
|
||||
'@wordpress/hooks': 3.19.0
|
||||
'@wordpress/hooks': 3.26.0
|
||||
|
||||
/@wordpress/deprecated/3.2.3:
|
||||
resolution: {integrity: sha512-YoJos/hW216PIlxbtNyb24kPR3TUFTSsfeVT23SxudW4jhmwM12vkl3KY1RDbhD/qi89OE4k+8xsBo5cM3lCSw==}
|
||||
|
@ -16205,7 +16179,7 @@ packages:
|
|||
hasBin: true
|
||||
dependencies:
|
||||
'@babel/runtime': 7.19.0
|
||||
'@wordpress/hooks': 3.19.0
|
||||
'@wordpress/hooks': 3.26.0
|
||||
gettext-parser: 1.4.0
|
||||
lodash: 4.17.21
|
||||
memize: 1.1.0
|
||||
|
@ -16219,7 +16193,7 @@ packages:
|
|||
hasBin: true
|
||||
dependencies:
|
||||
'@babel/runtime': 7.19.0
|
||||
'@wordpress/hooks': 3.19.0
|
||||
'@wordpress/hooks': 3.26.0
|
||||
gettext-parser: 1.4.0
|
||||
lodash: 4.17.21
|
||||
memize: 1.1.0
|
||||
|
@ -16233,7 +16207,7 @@ packages:
|
|||
hasBin: true
|
||||
dependencies:
|
||||
'@babel/runtime': 7.19.0
|
||||
'@wordpress/hooks': 3.19.0
|
||||
'@wordpress/hooks': 3.26.0
|
||||
gettext-parser: 1.4.0
|
||||
memize: 1.1.0
|
||||
sprintf-js: 1.1.2
|
||||
|
@ -16724,7 +16698,7 @@ packages:
|
|||
dependencies:
|
||||
'@babel/runtime': 7.19.0
|
||||
'@wordpress/element': 4.20.0
|
||||
'@wordpress/i18n': 4.19.0
|
||||
'@wordpress/i18n': 4.26.0
|
||||
utility-types: 3.10.0
|
||||
dev: false
|
||||
|
||||
|
@ -16853,7 +16827,7 @@ packages:
|
|||
'@wordpress/data': 6.15.0_react@17.0.2
|
||||
'@wordpress/element': 4.20.0
|
||||
'@wordpress/escape-html': 2.22.0
|
||||
'@wordpress/i18n': 4.19.0
|
||||
'@wordpress/i18n': 4.26.0
|
||||
'@wordpress/keycodes': 3.19.0
|
||||
lodash: 4.17.21
|
||||
memize: 1.1.0
|
||||
|
@ -18498,6 +18472,19 @@ packages:
|
|||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.16.12:
|
||||
resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
dependencies:
|
||||
'@babel/compat-data': 7.19.3
|
||||
'@babel/core': 7.16.12
|
||||
'@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.16.12
|
||||
semver: 6.3.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.17.8:
|
||||
resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==}
|
||||
peerDependencies:
|
||||
|
|
|
@ -36,6 +36,8 @@ In order to prepare a package for release, a changelog will need to be compiled
|
|||
./tools/package-release/bin/dev prepare -a
|
||||
```
|
||||
|
||||
When making an initial release for a new package, pass the `--initialRelease` flag to signify a new release for a new package.
|
||||
|
||||
2. Create a pull request with the resulting changes and merge it.
|
||||
|
||||
See more about the prepare script using `./tools/package-release/bin/dev publish --help`.
|
||||
|
|
|
@ -14,7 +14,7 @@ import { getFilepathFromPackageName } from './validate';
|
|||
* Call changelogger's next version function to get the version for the next release.
|
||||
*
|
||||
* @param {string} name Package name.
|
||||
* @return {string} Next release version.
|
||||
* @return {string|null} Next release version or null if none exists.
|
||||
*/
|
||||
export const getNextVersion = ( name: string ) => {
|
||||
try {
|
||||
|
@ -25,9 +25,7 @@ export const getNextVersion = ( name: string ) => {
|
|||
} ).trim();
|
||||
} catch ( e ) {
|
||||
if ( e instanceof Error ) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log( e );
|
||||
throw e;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -59,13 +57,18 @@ export const validateChangelogEntries = ( name: string ) => {
|
|||
*
|
||||
* @param {string} name Package name.
|
||||
*/
|
||||
export const writeChangelog = ( name: string ) => {
|
||||
export const writeChangelog = ( name: string, nextVersion?: string ) => {
|
||||
try {
|
||||
const cwd = getFilepathFromPackageName( name );
|
||||
execSync( './vendor/bin/changelogger write --add-pr-num', {
|
||||
execSync(
|
||||
`./vendor/bin/changelogger write --add-pr-num ${
|
||||
nextVersion ? '--use-version ' + nextVersion : ''
|
||||
}`,
|
||||
{
|
||||
cwd,
|
||||
encoding: 'utf-8',
|
||||
} );
|
||||
}
|
||||
);
|
||||
} catch ( e ) {
|
||||
if ( e instanceof Error ) {
|
||||
// eslint-disable-next-line no-console
|
||||
|
|
|
@ -49,6 +49,10 @@ export default class PackagePrepare extends Command {
|
|||
default: false,
|
||||
description: 'Perform prepare function on all packages.',
|
||||
} ),
|
||||
initialRelease: Flags.boolean( {
|
||||
default: false,
|
||||
description: "Create a package's first release to NPM",
|
||||
} ),
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -62,17 +66,23 @@ export default class PackagePrepare extends Command {
|
|||
}
|
||||
|
||||
if ( flags.all ) {
|
||||
this.preparePackages( getAllPackges() );
|
||||
await this.preparePackages( getAllPackges() );
|
||||
return;
|
||||
}
|
||||
|
||||
const packages = args.packages.split( ',' );
|
||||
|
||||
if ( flags.initialRelease && packages.length > 1 ) {
|
||||
this.error(
|
||||
'Please release only a single package when making an initial release'
|
||||
);
|
||||
}
|
||||
|
||||
packages.forEach( ( name: string ) =>
|
||||
validatePackage( name, ( e: string ): void => this.error( e ) )
|
||||
);
|
||||
|
||||
this.preparePackages( packages );
|
||||
await this.preparePackages( packages, flags.initialRelease );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -80,18 +90,33 @@ export default class PackagePrepare extends Command {
|
|||
*
|
||||
* @param {Array<string>} packages Packages to prepare.
|
||||
*/
|
||||
private preparePackages( packages: Array< string > ) {
|
||||
packages.forEach( ( name ) => {
|
||||
private async preparePackages(
|
||||
packages: Array< string >,
|
||||
initialRelease?: Boolean
|
||||
) {
|
||||
packages.forEach( async ( name ) => {
|
||||
CliUx.ux.action.start( `Preparing ${ name }` );
|
||||
|
||||
try {
|
||||
if ( hasValidChangelogs( name ) ) {
|
||||
validateChangelogEntries( name );
|
||||
const nextVersion = getNextVersion( name );
|
||||
writeChangelog( name );
|
||||
let nextVersion = getNextVersion( name );
|
||||
if ( nextVersion ) {
|
||||
this.bumpPackageVersion( name, nextVersion );
|
||||
writeChangelog( name );
|
||||
} else {
|
||||
if ( initialRelease ) {
|
||||
nextVersion = '1.0.0';
|
||||
} else {
|
||||
throw new Error(
|
||||
`Error reading version number for ${ name }. Check that a Changelog file exists and has a version number. If making an initial release, pass the --initialRelease flag.`
|
||||
);
|
||||
}
|
||||
|
||||
writeChangelog( name, nextVersion );
|
||||
}
|
||||
|
||||
this.bumpPackageVersion( name, nextVersion );
|
||||
|
||||
CliUx.ux.action.stop();
|
||||
} else {
|
||||
CliUx.ux.action.stop(
|
||||
|
|
Loading…
Reference in New Issue