Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jun 2, 2023. It is now read-only.
/golangci-webPublic archive

Commit0197be2

Browse files
committed
support previous pull analyzes
1 parent8cf8fe6 commit0197be2

File tree

3 files changed

+172
-89
lines changed

3 files changed

+172
-89
lines changed

‎src/components/pages/Report.tsx‎

Lines changed: 152 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import*asReactfrom"react";
22
import{connect}from"react-redux";
33
import{RouteComponentProps}from"react-router";
4-
import{List,Row,Col,Table,Tag,Alert,Tooltip,Switch,Button,Icon,Card,Collapse}from"antd";
4+
import{List,Row,Col,Table,Tag,Alert,Tooltip,Switch,Button,Icon,Collapse}from"antd";
55
import{IAppStore}from"reducers";
6-
import{IAnalysisState,IIssue,IWarning,fetchAnalysis,buildLogTogglePanels,IBuildGroup}from"modules/analyzes";
6+
import{IAnalysisState,IIssue,IWarning,fetchAnalysis,buildLogTogglePanels,IBuildLog,IBuildGroup}from"modules/analyzes";
77
import{processWarning}from"modules/utils/strings";
88
importmomentfrom"moment";
99
importHelmetfrom"react-helmet";
@@ -19,6 +19,7 @@ moment.locale("en");
1919

2020
consthideCodeToggleKey="hideCode";
2121
constshowBuildLogToggleKey="showBuildLog";
22+
constshowPrevAnalyzesToggleKey="showPrevAnalyzes";
2223

2324
interfaceIStateProps{
2425
curAnalysis?:IAnalysisState;
@@ -29,7 +30,7 @@ interface IStateProps {
2930
}
3031

3132
interfaceIDispatchProps{
32-
fetchAnalysis(owner:string,name:string,prNumber?:number,analysisGuid?:string):void;
33+
fetchAnalysis(owner:string,name:string,prNumber?:number,commitSha?:string,analysisGuid?:string):void;
3334
toggle(name:string,value?:boolean):void;
3435
buildLogTogglePanels(keys:string[]):void;
3536
}
@@ -44,7 +45,7 @@ class Report extends React.Component<IProps> {
4445
privatefetchAnalysis(){
4546
constp=this.props.match.params;
4647
constqs=queryString.parse(this.props.location.search);
47-
this.props.fetchAnalysis(p.owner,p.name,Number(p.prNumber),qs.analysisGuid);
48+
this.props.fetchAnalysis(p.owner,p.name,Number(p.prNumber),qs.commit_sha,qs.analysisGuid);
4849
}
4950

5051
publiccomponentWillMount(){
@@ -486,85 +487,42 @@ class Report extends React.Component<IProps> {
486487
);
487488
}
488489

489-
publicrender(){
490-
switch(this.props.lastApiErrorCode){
491-
case"NEED_AUTH_TO_ACCESS_PRIVATE_REPO":
492-
returnthis.renderNeedAuthError();
493-
case"NEED_PRIVATE_ACCESS_TOKEN_TO_ACCESS_PRIVATE_REPO":
494-
returnthis.renderNeedPrivateAccessTokenError();
495-
case"NO_ACCESS_TO_PRIVATE_REPO_OR_DOESNT_EXIST":
496-
this.renderNoAccessOrDoesntExistError();
497-
}
498-
499-
if(this.props.curAnalysis===null){
500-
returngetLoader();
501-
}
502-
503-
constrj=this.props.curAnalysis.ResultJSON;
504-
constissues=(rj&&rj.GolangciLintRes&&rj.GolangciLintRes.Issues) ?rj.GolangciLintRes.Issues :[];
505-
506-
constlinterToIssues:any={};
507-
for(constiofissues){
508-
if(!linterToIssues[i.FromLinter]){
509-
linterToIssues[i.FromLinter]=[];
510-
}
511-
512-
linterToIssues[i.FromLinter].push(i);
513-
}
514-
515-
constca=this.props.curAnalysis;
516-
console.info("rendering ca",ca);
517-
constsourceLinkBase=`https://github.com/${ca.GithubRepoName}/blob/${ca.CommitSHA}`;
518-
519-
constblocks:JSX.Element[]=[];
520-
for(constlinterNameofObject.keys(linterToIssues)){
521-
constblock=this.renderIssuesFromLinterBlock(linterName,linterToIssues[linterName],sourceLinkBase);
522-
blocks.push(block);
523-
}
524-
525-
consttitle=ca.GithubPullRequestNumber ?
526-
`Report for Pull Request${ca.GithubRepoName}#${ca.GithubPullRequestNumber}` :
527-
`Report for Repo${ca.GithubRepoName}`;
528-
529-
constbuildLog=(ca.ResultJSON&&ca.ResultJSON.BuildLog) ?ca.ResultJSON.BuildLog :null;
530-
531-
constneedShowBuildLog=this.props.toggleMap[showBuildLogToggleKey];
532-
letbuildLogArea:JSX.Element=null;
533-
if(needShowBuildLog&&buildLog){
534-
buildLogArea=(
535-
<divclassName="report-build-log">
536-
<Collapse
537-
bordered={false}
538-
activeKey={this.props.buildLogActivePanels}
539-
onChange={(activePanels:string[])=>this.props.buildLogTogglePanels(activePanels)}
540-
>
541-
{buildLog.Groups.map((group,i)=>(
542-
<Collapse.Panel
543-
header={
544-
<>
545-
<spanclassName="report-build-log-group-panel-text">
546-
{group.Name+(group.Name!=="run goenvbuild" ?` (${this.formatDuration(group.Duration/1000000)})` :"")}
547-
</span>
548-
{this.doesGroupHaveError(group) ?
549-
<spanclassName="report-build-log-group-panel-tag"><Tagcolor="red">error</Tag></span> :
550-
null}
551-
</>
552-
}
553-
key={i.toString()}
554-
className="report-build-log-group-panel"
555-
>
556-
<preclassName="report-build-log-group-panel-text">{this.getBuildGroupText(group)}</pre>
557-
</Collapse.Panel>
558-
))}
559-
</Collapse>
560-
</div>
561-
);
562-
}
490+
privaterenderBuildLogArea(buildLog:IBuildLog):JSX.Element{
491+
return(
492+
<divclassName="report-build-log">
493+
<Collapse
494+
bordered={false}
495+
activeKey={this.props.buildLogActivePanels}
496+
onChange={(activePanels:string[])=>this.props.buildLogTogglePanels(activePanels)}
497+
>
498+
{buildLog.Groups.map((group,i)=>(
499+
<Collapse.Panel
500+
header={
501+
<>
502+
<spanclassName="report-build-log-group-panel-text">
503+
{group.Name+(group.Name!=="run goenvbuild" ?` (${this.formatDuration(group.Duration/1000000)})` :"")}
504+
</span>
505+
{this.doesGroupHaveError(group) ?
506+
<spanclassName="report-build-log-group-panel-tag"><Tagcolor="red">error</Tag></span> :
507+
null}
508+
</>
509+
}
510+
key={i.toString()}
511+
className="report-build-log-group-panel"
512+
>
513+
<preclassName="report-build-log-group-panel-text">{this.getBuildGroupText(group)}</pre>
514+
</Collapse.Panel>
515+
))}
516+
</Collapse>
517+
</div>
518+
);
519+
}
563520

564-
consttoolBar=(
521+
privaterenderToolBar(ca:IAnalysisState,issues:IIssue[],buildLog:IBuildLog,needShowBuildLog:boolean):JSX.Element{
522+
return(
565523
<Rowtype="flex"justify="end">
566524
<divclassName="report-toolbar">
567-
{buildLog&&(
525+
{buildLog&&(
568526
<spanclassName="report-toolbar-build-log-btn">
569527
<Button
570528
onClick={()=>this.props.toggle(showBuildLogToggleKey)}
@@ -584,6 +542,56 @@ class Report extends React.Component<IProps> {
584542
</div>
585543
</Row>
586544
);
545+
}
546+
547+
privaterenderPrevAnalyzesTable(ca:IAnalysisState){
548+
constcolumns=[
549+
{
550+
key:"columnA",
551+
dataIndex:"a",
552+
title:"a",
553+
},
554+
{
555+
key:"columnB",
556+
dataIndex:"b",
557+
title:"a",
558+
},
559+
];
560+
561+
constrows=[];
562+
for(constaofca.PreviousAnalyzes){
563+
constlink=(
564+
<Link
565+
onClick={()=>this.props.toggle(showPrevAnalyzesToggleKey)}
566+
to={`/r/github.com/${ca.GithubRepoName}/pulls/${ca.GithubPullRequestNumber}?commit_sha=${a.CommitSHA}`}
567+
>
568+
{a.CommitSHA.substring(0,7)}
569+
</Link>
570+
);
571+
rows.push({
572+
key:a.CommitSHA,
573+
a:moment(a.CreatedAt).fromNow(),
574+
b:link,
575+
});
576+
}
577+
578+
return(
579+
<Table
580+
className="prev-analyzes-table"
581+
showHeader={false}
582+
columns={columns}
583+
pagination={false}
584+
sortDirections={[]}
585+
dataSource={rows}/>
586+
);
587+
}
588+
589+
privaterenderBody(ca:IAnalysisState,blocks:JSX.Element[],toolBar:JSX.Element,buildLogArea:JSX.Element):JSX.Element{
590+
consttitle=ca.GithubPullRequestNumber ?
591+
`Report for Pull Request${ca.GithubRepoName}#${ca.GithubPullRequestNumber}` :
592+
`Report for Repo${ca.GithubRepoName}`;
593+
594+
constprevAnalyzes=this.props.toggleMap[showPrevAnalyzesToggleKey]&&this.renderPrevAnalyzesTable(ca);
587595

588596
return(
589597
<Row>
@@ -628,10 +636,74 @@ class Report extends React.Component<IProps> {
628636
</Button>
629637
</Link>
630638
)}
639+
{ca.GithubPullRequestNumber&&ca.PreviousAnalyzes&&ca.PreviousAnalyzes.length&&(
640+
<spanclassName="prev-analyzes-btn">
641+
<ButtononClick={()=>this.props.toggle(showPrevAnalyzesToggleKey)}>
642+
<Icontype={this.props.toggleMap[showPrevAnalyzesToggleKey] ?"up" :"down"}/>
643+
{`${this.props.toggleMap[showPrevAnalyzesToggleKey] ?"Hide" :"Show"} Previous Analyzes`}
644+
</Button>
645+
</span>
646+
)}
647+
{prevAnalyzes&&(
648+
<Row>
649+
<Colxs={12}>
650+
{prevAnalyzes}
651+
</Col>
652+
</Row>
653+
)}
631654
</Col>
632655
</Row>
633656
);
634657
}
658+
659+
publicrender(){
660+
switch(this.props.lastApiErrorCode){
661+
case"NEED_AUTH_TO_ACCESS_PRIVATE_REPO":
662+
returnthis.renderNeedAuthError();
663+
case"NEED_PRIVATE_ACCESS_TOKEN_TO_ACCESS_PRIVATE_REPO":
664+
returnthis.renderNeedPrivateAccessTokenError();
665+
case"NO_ACCESS_TO_PRIVATE_REPO_OR_DOESNT_EXIST":
666+
this.renderNoAccessOrDoesntExistError();
667+
}
668+
669+
if(this.props.curAnalysis===null){
670+
returngetLoader();
671+
}
672+
673+
constrj=this.props.curAnalysis.ResultJSON;
674+
constissues=(rj&&rj.GolangciLintRes&&rj.GolangciLintRes.Issues) ?rj.GolangciLintRes.Issues :[];
675+
676+
constlinterToIssues:any={};
677+
for(constiofissues){
678+
if(!linterToIssues[i.FromLinter]){
679+
linterToIssues[i.FromLinter]=[];
680+
}
681+
682+
linterToIssues[i.FromLinter].push(i);
683+
}
684+
685+
constca=this.props.curAnalysis;
686+
console.info("rendering ca",ca);
687+
constsourceLinkBase=`https://github.com/${ca.GithubRepoName}/blob/${ca.CommitSHA}`;
688+
689+
constblocks:JSX.Element[]=[];
690+
for(constlinterNameofObject.keys(linterToIssues)){
691+
constblock=this.renderIssuesFromLinterBlock(linterName,linterToIssues[linterName],sourceLinkBase);
692+
blocks.push(block);
693+
}
694+
695+
constbuildLog=(ca.ResultJSON&&ca.ResultJSON.BuildLog) ?ca.ResultJSON.BuildLog :null;
696+
697+
constneedShowBuildLog=this.props.toggleMap[showBuildLogToggleKey];
698+
letbuildLogArea:JSX.Element=null;
699+
if(needShowBuildLog&&buildLog){
700+
buildLogArea=this.renderBuildLogArea(buildLog);
701+
}
702+
703+
consttoolBar=this.renderToolBar(ca,issues,buildLog,needShowBuildLog);
704+
705+
returnthis.renderBody(ca,blocks,toolBar,buildLogArea);
706+
}
635707
}
636708

637709
interfaceIParams{

‎src/css/sass/report.scss‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@
6060
margin-right:1vw;
6161
}
6262

63+
.prev-analyzes-btn {
64+
margin-left:1vw;
65+
}
66+
6367
.report-build-log {
6468
margin-bottom:2vh;
6569
}

‎src/modules/analyzes/index.ts‎

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@ import { IAppStore } from "reducers";
44
import{
55
makeApiGetRequest,processError,
66
}from"modules/api";
7+
import{string}from"prop-types";
78

89
enumAnalyzesAction{
910
Fetch="@@GOLANGCI/ANALYZES/FETCH",
1011
Fetched="@@GOLANGCI/ANALYZES/FETCHED",
1112
BuildLogTogglePanels="@@GOLANGCI/BUILDLOG/PANELS/TOGGLE",
1213
}
1314

14-
exportconstfetchAnalysis=(owner:string,name:string,prNumber?:number,analysisGuid?:string)=>({
15+
exportconstfetchAnalysis=(owner:string,name:string,prNumber?:number,commitSha?:string,analysisGuid?:string)=>({
1516
type:AnalyzesAction.Fetch,
1617
owner,
1718
name,
1819
prNumber,
20+
commitSha,
1921
analysisGuid,
2022
});
2123

@@ -41,6 +43,13 @@ export interface IAnalysisState {
4143
RepoIsNotConnected?:boolean;
4244
IsEmpty?:boolean;
4345
RepoAnalysisStatus?:IRepoAnalysisStatus;
46+
47+
PreviousAnalyzes?:IAnalysisStateLink[];
48+
}
49+
50+
interfaceIAnalysisStateLink{
51+
CommitSHA:string;
52+
CreatedAt:string;
4453
}
4554

4655
interfaceIRepoAnalysisStatus{
@@ -53,7 +62,7 @@ interface IAnalysisResultJSON {
5362
BuildLog:IBuildLog;
5463
}
5564

56-
interfaceIBuildLog{
65+
exportinterfaceIBuildLog{
5766
Groups:IBuildGroup[];
5867
}
5968

@@ -147,14 +156,12 @@ export const reducer = combineReducers<IAnalyzesStore>({
147156
buildLogActivePanels,
148157
});
149158

150-
function*doFetchAnalysis({prNumber, owner, name, analysisGuid}:any){
159+
function*doFetchAnalysis({prNumber, owner, name,commitSha,analysisGuid}:any){
151160
conststate:IAppStore=yieldselect();
152-
letapiUrl=prNumber ?
153-
`/v1/repos/github.com/${owner}/${name}/pulls/${prNumber}` :
154-
`/v1/repos/github.com/${owner}/${name}/repoanalyzes`;
155-
if(analysisGuid){
156-
apiUrl+=`?analysisguid=${analysisGuid}`;
157-
}
161+
162+
constapiUrlBase=`/v1/repos/github.com/${owner}/${name}`;
163+
constapiUrlQs=(commitSha||analysisGuid) ?`?commit_sha=${commitSha}&analysisguid=${analysisGuid}` :"";
164+
constapiUrl=prNumber ?`${apiUrlBase}/pulls/${prNumber}${apiUrlQs}` :`${apiUrlBase}/repoanalyzes${apiUrlQs}`;
158165

159166
constresp=yieldcall(makeApiGetRequest,apiUrl,state.auth.cookie);
160167
if(!resp||resp.error){

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp