1+ import * as vscode from "vscode" ;
2+ import { GitHubRepoContext } from "../git/repository" ;
3+ import { updateDecorations } from "../logs/formatProvider" ;
4+ import { getLogInfo } from "../logs/logInfo" ;
5+ import { buildLogURI } from "../logs/scheme" ;
6+ import { WorkflowJob } from "../store/WorkflowJob" ;
7+ import { WorkflowStep } from "../model" ;
8+
9+ export interface OpenWorkflowStepLogsCommandArgs {
10+ gitHubRepoContext : GitHubRepoContext ;
11+ job : WorkflowJob ;
12+ step : WorkflowStep ;
13+ }
14+
15+ export function registerOpenWorkflowStepLogs ( context : vscode . ExtensionContext ) {
16+ context . subscriptions . push (
17+ vscode . commands . registerCommand ( "github-actions.step.logs" , async ( args : OpenWorkflowStepLogsCommandArgs ) => {
18+ const gitHubRepoContext = args . gitHubRepoContext ;
19+ const job = args . job ;
20+ const step = args . step ;
21+
22+ const uri = buildLogURI (
23+ `%23${ job . job . run_id } - ${ job . job . name } ` ,
24+ gitHubRepoContext . owner ,
25+ gitHubRepoContext . name ,
26+ job . job . id
27+ ) ;
28+
29+ const doc = await vscode . workspace . openTextDocument ( uri ) ;
30+ const editor = await vscode . window . showTextDocument ( doc , {
31+ preview : false
32+ } ) ;
33+
34+ const logInfo = getLogInfo ( uri ) ;
35+ if ( ! logInfo ) {
36+ throw new Error ( "Could not get log info" ) ;
37+ }
38+
39+ const section = logInfo . sections . find ( s => s . name === step . name ) ;
40+ const startLine = section ? section . start : 0 ;
41+ const endLine = section ? section . end : 0 ;
42+
43+
44+ const stepInfo = {
45+ updatedLogLines : logInfo [ "updatedLogLines" ] . slice ( startLine , endLine ) ,
46+ sections : logInfo [ "sections" ] . filter ( s => s . name === step . name ) ,
47+ styleFormats : logInfo [ "styleFormats" ] . filter ( s => s . line >= startLine && s . line <= endLine )
48+ } ;
49+
50+
51+ // Custom formatting after the editor has been opened
52+ updateDecorations ( editor , stepInfo ) ;
53+ } )
54+ ) ;
55+ }
0 commit comments