added status for testserver status print (#20)
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { GluegunMenuToolbox } from '@lenne.tech/gluegun-menu';
|
||||
import chalk = require('chalk');
|
||||
import { defaultMenuSettings } from '../../../../globals';
|
||||
import { defaultMenuSettings, getSettings } from '../../../../globals';
|
||||
import { getTestStacksInfo } from '../../../../common/testservers';
|
||||
import { getIssueFromRepo } from '../../../../services/github_rest';
|
||||
const tto = require('terminal-table-output').create();
|
||||
|
||||
module.exports = {
|
||||
@@ -10,6 +11,13 @@ module.exports = {
|
||||
description: 'Show status for available testservers (s)',
|
||||
hidden: false,
|
||||
run: async (toolbox: GluegunMenuToolbox) => {
|
||||
// Load settings
|
||||
const config = await getSettings(toolbox);
|
||||
if (!config) {
|
||||
await toolbox.menu.showMenu('setup', defaultMenuSettings);
|
||||
return;
|
||||
}
|
||||
|
||||
const testStacks = await getTestStacksInfo(toolbox);
|
||||
const status = (status: string) => {
|
||||
switch (status) {
|
||||
@@ -28,6 +36,42 @@ module.exports = {
|
||||
}
|
||||
};
|
||||
|
||||
const getStatusIcon = (status: string): string => {
|
||||
switch (status) {
|
||||
case 'open':
|
||||
return '✅';
|
||||
case 'closed':
|
||||
return '❌';
|
||||
case 'null':
|
||||
return '❔';
|
||||
}
|
||||
};
|
||||
|
||||
const getIssueStatus = async (issueNumber: string) => {
|
||||
if (!issueNumber) return getStatusIcon('null'); // GUARD
|
||||
|
||||
const issueData = await getIssueFromRepo(
|
||||
toolbox,
|
||||
config.gh_token,
|
||||
'photowall',
|
||||
issueNumber
|
||||
);
|
||||
return {
|
||||
issue: issueNumber,
|
||||
status: getStatusIcon(issueData ? issueData.state : 'null')
|
||||
};
|
||||
};
|
||||
|
||||
const printIssueStatus = (
|
||||
issueStatuses: { issue: string; status: string }[],
|
||||
issueNumber: string
|
||||
) => {
|
||||
const issueStatus = issueStatuses.find(
|
||||
issueStatus => issueStatus.issue === issueNumber
|
||||
);
|
||||
return issueStatus ? issueStatus.status : getStatusIcon('null');
|
||||
};
|
||||
|
||||
const stackUrl = (stackname: string) => {
|
||||
return `https://test-${
|
||||
stackname.split('photowall-test-')[1]
|
||||
@@ -73,7 +117,14 @@ module.exports = {
|
||||
|
||||
tto.line('-');
|
||||
tto
|
||||
.pushrow(['| status', 'stack', 'branch', 'time since update', 'url'])
|
||||
.pushrow([
|
||||
'| status',
|
||||
'stack',
|
||||
'branch',
|
||||
'status',
|
||||
'time since update',
|
||||
'url'
|
||||
])
|
||||
.line('-');
|
||||
// Sort on stackname
|
||||
testStacks.sort((a, b) => {
|
||||
@@ -81,12 +132,31 @@ module.exports = {
|
||||
if (a.name > b.name) return 1;
|
||||
return 0;
|
||||
});
|
||||
|
||||
// Get issue status
|
||||
const issueStatusPromises = [];
|
||||
for (const stack of testStacks) {
|
||||
const regex = /^(\d+)/;
|
||||
const match = stack.branch.match(regex);
|
||||
const branchIssueNumber = match ? match[1] : null;
|
||||
|
||||
if (branchIssueNumber) {
|
||||
issueStatusPromises.push(getIssueStatus(branchIssueNumber));
|
||||
}
|
||||
}
|
||||
const issueStatuses = await Promise.all(issueStatusPromises);
|
||||
|
||||
for (const stack of testStacks) {
|
||||
const regex = /^(\d+)/;
|
||||
const match = stack.branch.match(regex);
|
||||
const branchIssueNumber = match ? match[1] : null;
|
||||
|
||||
const t = new Date(stack.updated);
|
||||
tto.pushrow([
|
||||
status(stack.status),
|
||||
stack.name,
|
||||
ellipsis(stack.branch, 24),
|
||||
printIssueStatus(issueStatuses, branchIssueNumber),
|
||||
!isNaN(t.getTime())
|
||||
? timeSince(t.getTime())
|
||||
: timeSince(new Date(stack.created).getTime()),
|
||||
|
||||
Reference in New Issue
Block a user