woocommerce/plugins/woocommerce-blocks/bin/changelog/common/get-entry.js

89 lines
2.3 KiB
JavaScript

'use strict';
const requestPromise = require( 'request-promise' );
const { graphql } = require( '@octokit/graphql' );
const { pkg, REPO } = require( '../config' );
/* eslint no-console: 0 */
const headers = {
authorization: `token ${ pkg.changelog.ghApiToken }`,
'user-agent': 'changelog-tool',
};
const authedGraphql = graphql.defaults( { headers } );
const getPullRequestType = ( labels ) => {
const typeLabel = labels.find( ( label ) =>
label.name.includes( pkg.changelog.labelPrefix )
);
if ( ! typeLabel ) {
return pkg.changelog.defaultPrefix;
}
return typeLabel.name.replace( `${ pkg.changelog.labelPrefix } `, '' );
};
const devNoteSuffix = ( labels ) => {
const noteLabel = labels.find( ( label ) =>
label.name.includes( pkg.changelog.devNoteLabel )
);
return noteLabel ? ' [DN]' : '';
};
const isCollaborator = async ( username ) => {
return requestPromise( {
url: `https://api.github.com/orgs/${
REPO.split( '/' )[ 0 ]
}/members/${ username }`,
headers,
resolveWithFullResponse: true,
} )
.then( ( response ) => {
return response.statusCode === 204;
} )
.catch( ( err ) => {
if ( err.statusCode !== 404 ) {
console.log( '🤯' );
console.log( err.message );
}
} );
};
const getEntry = async ( pullRequest ) => {
if (
pullRequest.labels.nodes.some(
( label ) => label.name === pkg.changelog.skipLabel
)
) {
return;
}
const collaborator = await isCollaborator( pullRequest.author.login );
const type = getPullRequestType( pullRequest.labels.nodes );
const authorTag = collaborator ? '' : `👏 @${ pullRequest.author.login }`;
const devNote = devNoteSuffix( pullRequest.labels.nodes );
let title;
if ( /### Changelog\r\n\r\n> /.test( pullRequest.body ) ) {
const bodyParts = pullRequest.body.split( '### Changelog\r\n\r\n> ' );
const note = bodyParts[ bodyParts.length - 1 ];
title = note
// Remove comment prompt
.replace( /<!---(.*)--->/gm, '' )
// Remove new lines and whitespace
.trim();
if ( ! title.length ) {
title = `${ type }: ${ pullRequest.title }`;
} else {
title = `${ type }: ${ title }`;
}
} else {
title = `${ type }: ${ pullRequest.title }`;
}
return `- ${ title } [#${ pullRequest.number }](${ pullRequest.url })${ devNote } ${ authorTag }`;
};
module.exports = {
authedGraphql,
getEntry,
};