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 { 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()),