Skip to content

Commit 3344a2b

Browse files
author
casianaoprut
committed
added summary action
1 parent 83bd5f8 commit 3344a2b

File tree

7 files changed

+80
-19
lines changed

7 files changed

+80
-19
lines changed

src/model/Action.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export interface Action {
88
export interface DefaultAction extends Action {
99
with?: WithAction;
1010
produces?: Map<string, string>
11+
summaryFile?: string;
1112
}
1213

1314
export interface WithAction {

src/parser/instrument-parser.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
missionCommandVarProvider,
1717
missionEnvVarProvider,
1818
} from '../context/mission-variable-providers'
19-
import {isDefaultAction} from '../runner/action-utils'
19+
import {isDefaultAction, summaryActionKey} from '../runner/action-utils'
2020
import {missionContext} from '../context/MissionContext'
2121
import {
2222
INSTRUMENT_DIR_NAME,
@@ -103,12 +103,24 @@ function parseCommands(commandsObject: any, instrumentKey: string, actionKey: st
103103
}
104104

105105
function parseDefaultAction(defaultActionObject: any, instrumentKey: string, actionKey: string): DefaultAction {
106-
return {
106+
const action: DefaultAction = {
107107
name: actionKey,
108108
commandsContext: parseCommands(defaultActionObject.commands, instrumentKey, actionKey),
109109
with: parseWith(defaultActionObject.with),
110110
produces: parseProduces(defaultActionObject.produces),
111+
summaryFile: defaultActionObject.summaryFile
112+
? replaceMissionContextVariables(defaultActionObject.summaryFile)
113+
: undefined,
114+
}
115+
116+
if (actionKey === summaryActionKey && action.summaryFile) {
117+
const instrumentName = missionContext.getVariable(INSTRUMENT_NAME)!
118+
missionContext.addVariable(`${instrumentName}Summary`, path.resolve(
119+
missionContext.getVariable(INSTRUMENT_PATH)!, action.summaryFile
120+
))
111121
}
122+
123+
return action
112124
}
113125

114126
function parseWith(withObject: any): WithAction {

src/runner/action-runner.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import {Archiver} from 'archiver'
2-
import {cleanActionKey, packageActionKey, verifyActionKey} from './action-utils'
2+
import {cleanActionKey, packageActionKey, summaryActionKey, verifyActionKey} from './action-utils'
33
import {Action, DefaultAction, instanceOfDefaultAction} from '../model/Action'
44
import {runCommand} from './command-runner'
55
import {runCleanAction} from './default-actions/clean-action-runner'
66
import {runPackageAction} from './default-actions/package-action-runner'
77
import {runVerifyAction} from './default-actions/verify-action-runner'
8+
import {runSummaryAction} from './default-actions/summary-action-runner'
89

910

1011
export async function runAction(action: Action, archive: Archiver | null, instrumentPath: string, instrumentName: string): Promise<void> {
1112
if (instanceOfDefaultAction(action))
12-
await runDefaultAction(<DefaultAction>action, archive, instrumentName)
13+
await runDefaultAction(<DefaultAction>action, archive, instrumentPath, instrumentName)
1314
else
1415
await runCustomAction(action, instrumentPath, instrumentName)
1516
}
@@ -20,7 +21,7 @@ async function runCustomAction(action: Action, instrumentPath: string, instrumen
2021
}
2122
}
2223

23-
async function runDefaultAction(action: DefaultAction, archive: Archiver | null, instrumentName: string) {
24+
async function runDefaultAction(action: DefaultAction, archive: Archiver | null, instrumentPath: string, instrumentName: string) {
2425
switch (action.name) {
2526
case cleanActionKey: {
2627
await runCleanAction(action)
@@ -34,5 +35,9 @@ async function runDefaultAction(action: DefaultAction, archive: Archiver | null,
3435
await runVerifyAction(action, instrumentName)
3536
break
3637
}
38+
case summaryActionKey: {
39+
await runSummaryAction(action, instrumentPath, instrumentName)
40+
break
41+
}
3742
}
3843
}

src/runner/action-utils.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ export const packageActionKey = 'pack'
77
export const startActionKey = 'start'
88
export const verifyActionKey = 'verify'
99
export const unpackActionKey = 'unpack'
10+
export const summaryActionKey = 'summary'
1011

11-
const defaultActionKeys: string[] = [cleanActionKey, packageActionKey, verifyActionKey, unpackActionKey]
12+
const defaultActionKeys: string[] = [cleanActionKey, packageActionKey, verifyActionKey, unpackActionKey, summaryActionKey]
1213

1314
export function isDefaultAction(actionKey: string): boolean {
1415
for (let i = 0; i < defaultActionKeys.length; i++)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import fs from 'fs'
2+
import path from 'node:path'
3+
import {DefaultAction} from '../../model/Action'
4+
import {runCommand} from '../command-runner'
5+
6+
export async function runSummaryAction(
7+
action: DefaultAction,
8+
instrumentPath: string,
9+
instrumentName: string
10+
): Promise<string | null> {
11+
const summaryFilePath = action.summaryFile
12+
? path.resolve(instrumentPath, action.summaryFile)
13+
: null
14+
15+
// If summaryFile is declared and already exists, skip commands
16+
if (summaryFilePath && fs.existsSync(summaryFilePath)) {
17+
return summaryFilePath
18+
}
19+
20+
// Run generation commands if defined
21+
if (action.commandsContext && action.commandsContext.length > 0) {
22+
for (const commandContext of action.commandsContext) {
23+
await runCommand(commandContext, commandContext.dir ?? instrumentPath, instrumentName)
24+
}
25+
}
26+
27+
// Return the summary file path if it was declared and now exists
28+
if (summaryFilePath) {
29+
if (fs.existsSync(summaryFilePath)) {
30+
return summaryFilePath
31+
}
32+
console.warn(`Instrument ${instrumentName}: summary file not found at ${summaryFilePath}`)
33+
}
34+
35+
return null
36+
}

src/runner/mission-runner.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import {Instrument} from '../model/Instrument'
22
import {missionContext} from '../context/MissionContext'
33
import {loadAndParseData} from '../parser/data-parser'
4-
import {cleanActionKey, packageActionKey, unpackActionKey, verifyActionKey} from './action-utils'
4+
import {cleanActionKey, packageActionKey, summaryActionKey, unpackActionKey, verifyActionKey} from './action-utils'
55
import {DefaultAction} from '../model/Action'
66
import {runCleanAction} from './default-actions/clean-action-runner'
7+
import {runSummaryAction} from './default-actions/summary-action-runner'
78
import archiver, {Archiver} from 'archiver'
89
import fs from 'fs-extra'
910
import {getLogFilePath, getLogsStream, getTimeInSeconds} from '../report/logs-collector-utils'
@@ -18,7 +19,6 @@ import {RESULTS_ZIP_DIR, TARGET} from '../context/context-variable-provider'
1819
import AdmZip from 'adm-zip'
1920
import {runUnpackAction} from './default-actions/unpack-action-runner'
2021
import {runPackageAction} from './default-actions/package-action-runner'
21-
import {buildAndOpenLegacySummary, openMissionSummary} from './mission-summary-runner'
2222
import yaml from 'js-yaml'
2323

2424
export async function cleanMission(missionFilePath?: string): Promise<void> {
@@ -101,12 +101,19 @@ function extractInitialMissionName(unpackedResultsPath: string): string {
101101
return ''
102102
}
103103

104-
export function openSummary(zipPath: string, legacySummary: boolean): void {
105-
if (legacySummary) {
106-
buildAndOpenLegacySummary(zipPath)
107-
return
104+
export async function summaryMission(missionFilePath?: string): Promise<void> {
105+
const missionPath = findMissionFile(missionFilePath)
106+
if (missionPath) {
107+
loadAndParseData(missionPath)
108+
console.log(`Running summary actions for mission ${missionContext.name}...`)
109+
for (const instrument of missionContext.instruments) {
110+
const summaryAction = instrument.actions.get(summaryActionKey) as DefaultAction | undefined
111+
if (summaryAction) {
112+
await runSummaryAction(summaryAction, instrument.instrumentPath, instrument.name)
113+
}
114+
}
115+
console.log(`Summary actions for mission ${missionContext.name} completed.`)
108116
}
109-
openMissionSummary(zipPath)
110117
}
111118

112119
export function findMissionFile(missionFilePath?: string): string | null {

src/voyager.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
import {
33
cleanMission,
44
findAndRunMission,
5-
openSummary,
65
packMission,
76
runMission,
7+
summaryMission,
88
unpackMission,
99
verifyMission,
1010
} from './runner/mission-runner'
@@ -56,11 +56,10 @@ program
5656

5757
program
5858
.command('summary')
59-
.description('Opens the mission summary from the archive')
60-
.requiredOption('-z, --zipPath <zipPath>')
61-
.option('-l, --legacy', 'Use legacy summary')
62-
.action((options: { zipPath: string, legacy?: boolean }) => {
63-
openSummary(options.zipPath, !!options.legacy)
59+
.description('Run summary actions for mission instruments')
60+
.option('-m, --missionPath <missionPath>')
61+
.action((options: { missionPath?: string }) => {
62+
summaryMission(options.missionPath).then()
6463
})
6564

6665
program.version("0.0.1")

0 commit comments

Comments
 (0)