added status for testserver status print (#20)

This commit is contained in:
Arwid Thornström
2024-06-10 21:43:53 +02:00
committed by GitHub
parent 690abacdce
commit 3e6f910f67
@@ -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()),