themes-wordpress/create-a-theme-checklist.js
Mark Biek b7473032d1
Create-a-theme-checklist can also get the Github token from the environment (#6206)
In addition to hard coding a Github token in the actual `create-a-theme-checklist.js` file, we now have the option to read the token from the `THEME_GITHUB_TOKEN` environment variable.

This approach has the benefit of not including a secret like a token in source code.
2022-07-14 11:26:34 -03:00

126 lines
3.2 KiB
JavaScript

const theme = process.argv[ 2 ];
if ( ! theme ) {
console.error( '\x1b[41m', 'You must specify a theme!' );
return;
}
/**
* We need a Github personal access token to continue.
*
* The most robust way is to add an environment variable to your ~/.bashrc or ~/.zshrc depending on the shell you're using. To check which shell you're using, run `echo $SHELL` in a terminal.
*
* The environment variable in your shell rc should look like this:
* export THEME_GITHUB_TOKEN=<insert your token>
*
* Alternatively, you can replace `PUT YOUR ACCESS TOKEN HERE` with the actual access token value.
*/
const octokit = new Octokit({
auth: process.env.THEME_GITHUB_TOKEN || `PUT YOUR ACCESS TOKEN HERE`,
});
function sleep( ms ) {
return new Promise( ( resolve ) => {
setTimeout( resolve, ms );
} );
}
async function createLabel() {
try {
await sleep( 1000 );
return await octokit.request( 'POST /repos/Automattic/themes/labels', {
name: '[Theme] ' + theme,
color: 'c1f4a1',
description: 'Automatically generated label for ' + theme + '.',
} );
} catch ( error ) {
console.log( error );
}
}
async function createMilestone() {
try {
await sleep( 1000 );
return await octokit.request(
'POST /repos/Automattic/themes/milestones',
{
title: theme,
description:
'Automatically generated milestone for ' + theme + '.',
}
);
} catch ( error ) {
console.error( '\x1b[41m', 'Milestone already created.' );
}
}
async function createIssues( milestoneNumber ) {
const issues = [
'Block Patterns',
'Create Base Theme',
'Styles: Colors',
'Styles: Typography — Fonts & Weights',
'Styles: Typography — Sizes & Line Height',
'Styles: Links',
'Styles: Buttons',
'Styles: Layout',
'Styles: Comments',
'Styles: Navigation',
'Styles: Quote',
'Styles: Variations',
'Templates: Search, Category, Tag',
'Templates: 404',
'Templates: Single',
'Templates: Page',
'Templates: Index',
'Templates: Header template part',
'Templates: Footer template part',
'Pre-launch: Screenshot, readme.txt & description',
'Pre-launch: Demo Site',
'Pre-launch: Showcase Entry',
'Pre-launch: Headstart Annotation',
];
issues.forEach( async ( issue ) => {
try {
await sleep( 1000 );
return await octokit.request(
'POST /repos/Automattic/themes/issues',
{
title: theme + ': ' + issue,
labels: [ '[Theme] ' + theme ],
milestone: milestoneNumber,
}
);
// If you want to automatically add this to the Theme Dev Board, uncomment this.
// .then( ( issueData ) => {
// addIssueToProject( issueData );
// } );
} catch ( error ) {
console.log( error );
}
} );
}
async function addIssueToProject( issueData ) {
try {
await sleep( 1000 );
return await octokit.request( 'POST /projects/columns/11021541/cards', {
note: null,
content_id: issueData.data.id,
content_url: issueData.data.url,
content_type: 'Issue',
mediaType: {
previews: [ 'inertia' ],
},
} );
} catch ( error ) {
console.log( error );
}
}
createLabel().then( () => {
createMilestone().then( ( milestoneData ) => {
const milestoneNumber = milestoneData.data.number;
createIssues( milestoneNumber );
} );
} );