Skip to content

Commit 72fae22

Browse files
committed
Merge branch 'develop' of https://github.com/stdlib-js/stdlib into develop
2 parents 812e033 + 7047c43 commit 72fae22

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+8645
-690
lines changed

.github/workflows/scaffold_pkg_via_branch_push.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ jobs:
8484
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
8585
added-files: ${{ steps.changed-files.outputs.files }}
8686

87-
# Configure git:
88-
- name: 'Configure git'
87+
# Configure Git:
88+
- name: 'Configure Git'
8989
run: |
9090
git config --local user.email "[email protected]"
9191
git config --local user.name "stdlib-bot"

.github/workflows/standalone_publish.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,17 @@ jobs:
9191
lfs: false
9292
timeout-minutes: 10
9393

94+
# Configure Git:
95+
- name: 'Configure Git'
96+
run: |
97+
git config --local user.email "[email protected]"
98+
git config --local user.name "stdlib-bot"
99+
100+
# Apply Git notes:
101+
- name: 'Apply Git notes'
102+
run: |
103+
make apply-git-notes
104+
94105
# Install Node.js:
95106
- name: 'Install Node.js'
96107
# Pin action to full length commit SHA

.github/workflows/standalone_publish_custom.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,18 @@ jobs:
9898
lfs: false
9999
timeout-minutes: 10
100100

101+
# Configure Git:
102+
- name: 'Configure Git'
103+
run: |
104+
git config --local user.email "[email protected]"
105+
git config --local user.name "stdlib-bot"
106+
107+
# Apply Git notes:
108+
- name: 'Apply Git notes'
109+
run: |
110+
make apply-git-notes
111+
timeout-minutes: 5
112+
101113
# Install Node.js:
102114
- name: 'Install Node.js'
103115
# Pin action to full length commit SHA

.github/workflows/standalone_push_changes.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,17 @@ jobs:
6666
lfs: false
6767
timeout-minutes: 10
6868

69+
# Configure Git:
70+
- name: 'Configure Git'
71+
run: |
72+
git config --local user.email "[email protected]"
73+
git config --local user.name "stdlib-bot"
74+
75+
# Apply Git notes:
76+
- name: 'Apply Git notes'
77+
run: |
78+
make apply-git-notes
79+
6980
# Install Node.js:
7081
- name: 'Install Node.js'
7182
# Pin action to full length commit SHA

CONTRIBUTORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Muhammad Haris <[email protected]>
5151
Naresh Jagadeesan <[email protected]>
5252
NightKnight <[email protected]>
5353
Nithin Katta <[email protected]>
54+
Nourhan Hasan <[email protected]>
5455
Ognjen Jevremović <[email protected]>
5556
Oneday12323 <[email protected]>
5657
Philipp Burckhardt <[email protected]>

lib/node_modules/@stdlib/_tools/changelog/generate/lib/main.js

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
* limitations under the License.
1717
*/
1818

19+
/* eslint-disable max-statements */
20+
1921
'use strict';
2022

2123
// MODULES //
@@ -26,7 +28,6 @@ var semver = require( 'semver' );
2628
var recommendVersionBump = require( '@stdlib/_tools/changelog/recommend-version-bump' );
2729
var name2standalone = require( '@stdlib/_tools/pkgs/name2standalone' );
2830
var substringAfter = require( '@stdlib/string/substring-after' );
29-
var objectEntries = require( '@stdlib/utils/entries' );
3031
var parseCommits = require( '@stdlib/_tools/changelog/parse-commits' );
3132
var objectKeys = require( '@stdlib/utils/keys' );
3233
var namespaces = require( '@stdlib/_tools/pkgs/namespaces' ).sync;
@@ -58,6 +59,7 @@ var STDLIB_REPO_NODE_PATH = 'https://github.com/stdlib-js/stdlib/tree/develop/li
5859
var RE_PACKAGE_SUBDIRS = /\/?(benchmark|bin|data|docs|etc|examples|include|lib|scripts|src|test)\/?[\s\S]*$/;
5960
var RE_MARKDOWN_HEADER = /(^#+)/gm;
6061
var RE_EXTRANEOUS_NEWLINES = /\n{3,}/g;
62+
var PLACEHOLDER_SUMMARY = 'No changes reported for this release.';
6163

6264

6365
// FUNCTIONS //
@@ -258,13 +260,16 @@ function generate( pkg, releaseType ) {
258260
isNamespacePkg = true;
259261
standalone = '@stdlib/stdlib';
260262
pkg = '';
261-
releases = objectEntries( npmReleases( standalone ) );
263+
releases = npmReleases( standalone );
262264
} else {
263265
// Case: all other packages
264266
isNamespacePkg = contains( STDLIB_NAMESPACE_PKGS, pkg );
265267
standalone = name2standalone( pkg );
266268
pkg = replace( pkg, '@stdlib/', '' );
267-
releases = objectEntries( npmReleases( standalone ) );
269+
releases = npmReleases( standalone );
270+
}
271+
if ( releases.length > 0 ) {
272+
newestRelease = releases[ releases.length-1 ][ 0 ];
268273
}
269274

270275
str = '# CHANGELOG\n\n';
@@ -288,10 +293,19 @@ function generate( pkg, releaseType ) {
288293

289294
if ( releaseType === 'auto' ) {
290295
releaseType = recommendVersionBump( commits.unreleased );
296+
297+
// If no bump is recommended, default to 'patch' as we still want to trigger a release:
298+
if ( releaseType === null ) {
299+
releaseType = 'patch';
300+
}
301+
302+
// Ensure major bump only happens if we are already on a major release line:
303+
if ( releaseType === 'major' && semver.major( newestRelease ) < 1 ) {
304+
releaseType = 'minor';
305+
}
291306
}
292307
if ( releaseType && releaseType !== 'none' ) {
293-
if ( releases.length > 0 ) {
294-
newestRelease = releases[ releases.length-1 ][ 0 ];
308+
if ( newestRelease ) {
295309
nextVersion = semver.inc( newestRelease, releaseType );
296310
} else {
297311
nextVersion = semver.inc( '0.0.0', releaseType );
@@ -311,8 +325,8 @@ function generate( pkg, releaseType ) {
311325
for ( i = 0; i < pkgNames.length; i++ ) {
312326
name = pkgNames[ i ];
313327
unreleased = releaseSummary( bySubpackage[ name ], true, true );
314-
if ( unreleased ) {
315-
str += packageSummaryWrapper( pkg, '', name, unreleased );
328+
if ( unreleased || nextVersion ) {
329+
str += packageSummaryWrapper( pkg, '', name, unreleased || PLACEHOLDER_SUMMARY );
316330
}
317331
}
318332
str += sectionEnd( 'packages' );
@@ -323,10 +337,10 @@ function generate( pkg, releaseType ) {
323337
str += sectionEnd( 'release' );
324338
} else {
325339
unreleased = releaseSummary( commits.unreleased );
326-
if ( unreleased ) {
340+
if ( unreleased || nextVersion ) {
327341
str += releaseSectionStart( nextVersion );
328342
str += '## ' + ( nextVersion || 'Unreleased' ) + ' (' + formatDate() + ')\n\n';
329-
str += unreleased;
343+
str += unreleased || PLACEHOLDER_SUMMARY;
330344
str += sectionEnd( 'release' );
331345
}
332346
}
@@ -335,7 +349,7 @@ function generate( pkg, releaseType ) {
335349
version = releases[ i ][ 0 ];
336350
releaseCommits = commits[ version ];
337351
if ( !releaseCommits ) {
338-
continue;
352+
releaseCommits = [];
339353
}
340354
str += '## ' + version + ' (' + formatDate( releases[ i ][ 1 ] ) + ')\n\n';
341355
bySubpackage = groupBySubPackage( releaseCommits, pkg );
@@ -346,7 +360,7 @@ function generate( pkg, releaseType ) {
346360
name = pkgNames[ j ];
347361
summary = releaseSummary( bySubpackage[ name ], true, true );
348362
if ( !summary ) {
349-
continue;
363+
summary = PLACEHOLDER_SUMMARY;
350364
}
351365
str += packageSummaryWrapper( pkg, version, name, summary );
352366
}
@@ -361,7 +375,7 @@ function generate( pkg, releaseType ) {
361375
version = releases[ i ][ 0 ];
362376
summary = releaseSummary( commits[ version ] );
363377
if ( !summary ) {
364-
continue;
378+
summary = PLACEHOLDER_SUMMARY;
365379
}
366380
str += releaseSectionStart( version );
367381
str += '## ' + version + ' (' + formatDate( releases[ i ][ 1 ] ) + ')\n\n';
@@ -382,13 +396,19 @@ function generate( pkg, releaseType ) {
382396
* @returns {string} release indicator
383397
*/
384398
function indicator( commit ) {
399+
var prevReleaseDate;
400+
var releaseDate;
385401
var date;
386402
var i;
387403
date = new Date( commit.date );
388404

389405
// Walk the releases in reverse chronological order:
390406
for ( i = releases.length-1; i >= 0; i-- ) {
391-
if ( date <= new Date( releases[ i ][ 1 ] ) ) {
407+
releaseDate = new Date( releases[ i ][ 1 ] );
408+
409+
// Get the previous release date or set it to a very early date if none exists:
410+
prevReleaseDate = ( i > 0 ) ? new Date( releases[ i-1 ][ 1 ] ) : new Date( 0 );
411+
if ( date <= releaseDate && date > prevReleaseDate ) {
392412
return releases[ i ][ 0 ]; // version
393413
}
394414
}

lib/node_modules/@stdlib/_tools/changelog/generate/lib/npm_releases.js

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
// MODULES //
2222

2323
var shell = require( 'child_process' ).execSync; // eslint-disable-line node/no-sync
24+
var semver = require( 'semver' );
2425
var logger = require( 'debug' );
2526
var omit = require( '@stdlib/utils/omit' );
2627
var rootDir = require( '@stdlib/_tools/utils/root-dir' );
@@ -35,35 +36,43 @@ var OMITTED_KEYS = [ 'created', 'modified', 'unpublished' ];
3536
// MAIN //
3637

3738
/**
38-
* Returns a list of published package versions and their release dates.
39+
* Returns a two-element array of published package versions and their release dates.
3940
*
4041
* @private
4142
* @param {string} pkg - package name
42-
* @returns {Object} object mapping versions to release dates
43+
* @returns {Array} two-element array of published package versions and their release dates
4344
*
4445
* @example
4546
* var releases = npmReleases( '@stdlib/utils-omit' );
46-
* // returns {...}
47+
* // returns [...]
4748
*/
4849
function npmReleases( pkg ) {
50+
var releases;
4951
var command;
52+
var version;
5053
var opts;
51-
var out;
54+
var map;
5255

5356
command = 'npm view ' + pkg + ' time --json';
5457
opts = {
5558
'cwd': rootDir(),
5659
'stdio': [ 'pipe', 'pipe', 'ignore' ] // stdin, stdout, stderr
5760
};
5861
try {
59-
out = shell( command, opts ).toString();
60-
out = JSON.parse( out );
62+
map = shell( command, opts ).toString();
63+
map = JSON.parse( map );
6164
} catch ( err ) {
6265
debug( 'Encountered an error when attempting to retrieve package release dates: %s', err.message );
6366
return {};
6467
}
65-
out = omit( out, OMITTED_KEYS );
66-
return out;
68+
map = omit( map, OMITTED_KEYS );
69+
releases = [];
70+
for ( version in map ) {
71+
if ( semver.valid( version ) && !semver.prerelease( version ) ) {
72+
releases.push( [ version, map[ version ] ] );
73+
}
74+
}
75+
return releases;
6776
}
6877

6978

lib/node_modules/@stdlib/_tools/eslint/rules/jsdoc-main-export/lib/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ function main( context ) {
108108
match = RE_REQUIRE.exec( tag.description );
109109
if ( match ) {
110110
// The main export should be required last, so no `require` calls should follow:
111-
if ( match.index !== tag.description.lastIndexOf( 'require' ) ) {
111+
if ( match.index !== tag.description.lastIndexOf( 'require(' ) ) {
112112
report( 'Example code of main export should require itself last, i.e. contain `require( \'@'+modulePath+'\' )` as the last `require` call', loc );
113113
}
114114
} else {

lib/node_modules/@stdlib/_tools/eslint/rules/require-spaces/README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,12 @@ var Linter = require( 'eslint' ).Linter;
7171
var rule = require( '@stdlib/_tools/eslint/rules/require-spaces' );
7272

7373
var linter = new Linter();
74-
var result;
7574

7675
var code = 'var betainc = require(\'@stdlib/math/base/special/betainc\');';
7776

7877
linter.defineRule( 'require-spaces', rule );
7978

80-
result = linter.verify( code, {
79+
var result = linter.verify( code, {
8180
'rules': {
8281
'require-spaces': 'error'
8382
}

0 commit comments

Comments
 (0)