added status for testserver status print (#20)
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
import { GluegunMenuToolbox } from '@lenne.tech/gluegun-menu';
|
import { GluegunMenuToolbox } from '@lenne.tech/gluegun-menu';
|
||||||
import chalk = require('chalk');
|
import chalk = require('chalk');
|
||||||
import { defaultMenuSettings } from '../../../../globals';
|
import { defaultMenuSettings, getSettings } from '../../../../globals';
|
||||||
import { getTestStacksInfo } from '../../../../common/testservers';
|
import { getTestStacksInfo } from '../../../../common/testservers';
|
||||||
|
import { getIssueFromRepo } from '../../../../services/github_rest';
|
||||||
const tto = require('terminal-table-output').create();
|
const tto = require('terminal-table-output').create();
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
@@ -10,6 +11,13 @@ module.exports = {
|
|||||||
description: 'Show status for available testservers (s)',
|
description: 'Show status for available testservers (s)',
|
||||||
hidden: false,
|
hidden: false,
|
||||||
run: async (toolbox: GluegunMenuToolbox) => {
|
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 testStacks = await getTestStacksInfo(toolbox);
|
||||||
const status = (status: string) => {
|
const status = (status: string) => {
|
||||||
switch (status) {
|
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) => {
|
const stackUrl = (stackname: string) => {
|
||||||
return `https://test-${
|
return `https://test-${
|
||||||
stackname.split('photowall-test-')[1]
|
stackname.split('photowall-test-')[1]
|
||||||
@@ -73,7 +117,14 @@ module.exports = {
|
|||||||
|
|
||||||
tto.line('-');
|
tto.line('-');
|
||||||
tto
|
tto
|
||||||
.pushrow(['| status', 'stack', 'branch', 'time since update', 'url'])
|
.pushrow([
|
||||||
|
'| status',
|
||||||
|
'stack',
|
||||||
|
'branch',
|
||||||
|
'status',
|
||||||
|
'time since update',
|
||||||
|
'url'
|
||||||
|
])
|
||||||
.line('-');
|
.line('-');
|
||||||
// Sort on stackname
|
// Sort on stackname
|
||||||
testStacks.sort((a, b) => {
|
testStacks.sort((a, b) => {
|
||||||
@@ -81,12 +132,31 @@ module.exports = {
|
|||||||
if (a.name > b.name) return 1;
|
if (a.name > b.name) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Get issue status
|
||||||
|
const issueStatusPromises = [];
|
||||||
for (const stack of testStacks) {
|
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);
|
const t = new Date(stack.updated);
|
||||||
tto.pushrow([
|
tto.pushrow([
|
||||||
status(stack.status),
|
status(stack.status),
|
||||||
stack.name,
|
stack.name,
|
||||||
ellipsis(stack.branch, 24),
|
ellipsis(stack.branch, 24),
|
||||||
|
printIssueStatus(issueStatuses, branchIssueNumber),
|
||||||
!isNaN(t.getTime())
|
!isNaN(t.getTime())
|
||||||
? timeSince(t.getTime())
|
? timeSince(t.getTime())
|
||||||
: timeSince(new Date(stack.created).getTime()),
|
: timeSince(new Date(stack.created).getTime()),
|
||||||
|
|||||||
Reference in New Issue
Block a user