@@ -6,7 +6,7 @@ use crate::load::SiteCtxt;
6
6
7
7
use database:: { ArtifactId , QueuedCommit } ;
8
8
9
- use crate :: github:: { COMMENT_MARK_TEMPORARY , RUST_REPO_GITHUB_API_URL } ;
9
+ use crate :: github:: { COMMENT_MARK_ROLLUP , COMMENT_MARK_TEMPORARY , RUST_REPO_GITHUB_API_URL } ;
10
10
use std:: collections:: HashSet ;
11
11
use std:: fmt:: Write ;
12
12
@@ -76,13 +76,11 @@ async fn post_comparison_comment(
76
76
) -> anyhow:: Result < ( ) > {
77
77
let client = super :: client:: Client :: from_ctxt ( ctxt, RUST_REPO_GITHUB_API_URL . to_owned ( ) ) ;
78
78
let pr = commit. pr ;
79
- let body = match summarize_run ( ctxt, commit, is_master_commit) . await {
80
- Ok ( message) => message,
81
- Err ( error) => error,
82
- } ;
83
79
84
- client. post_comment ( pr, body) . await ;
80
+ // Was this perf. run triggered from a PR that was already merged and is a rollup?
81
+ let mut is_rollup = false ;
85
82
83
+ // Scan comments to hide outdated ones and gather context
86
84
let graph_client = super :: client:: GraphQLClient :: from_ctxt ( ctxt) ;
87
85
for comment in graph_client. get_comments ( pr) . await ? {
88
86
// If this bot is the author of the comment, the comment is not yet minimized and it is
@@ -94,7 +92,27 @@ async fn post_comparison_comment(
94
92
log:: debug!( "Hiding comment {}" , comment. id) ;
95
93
graph_client. hide_comment ( & comment. id , "OUTDATED" ) . await ?;
96
94
}
95
+
96
+ if comment. viewer_did_author && comment. body . contains ( COMMENT_MARK_ROLLUP ) {
97
+ is_rollup = true ;
98
+ }
97
99
}
100
+
101
+ let source = if is_master_commit {
102
+ PerfRunSource :: MasterCommit
103
+ } else if is_rollup {
104
+ PerfRunSource :: TryBuildRollup
105
+ } else {
106
+ PerfRunSource :: TryBuild
107
+ } ;
108
+
109
+ let body = match summarize_run ( ctxt, commit, source) . await {
110
+ Ok ( message) => message,
111
+ Err ( error) => error,
112
+ } ;
113
+
114
+ client. post_comment ( pr, body) . await ;
115
+
98
116
Ok ( ( ) )
99
117
}
100
118
@@ -125,10 +143,20 @@ async fn calculate_metric_comparison(
125
143
}
126
144
}
127
145
146
+ /// What caused this perf. run to be executed?
147
+ enum PerfRunSource {
148
+ // PR merged to master
149
+ MasterCommit ,
150
+ // Manual try build on a PR
151
+ TryBuild ,
152
+ // Manual try build on a merged rollup PR
153
+ TryBuildRollup ,
154
+ }
155
+
128
156
async fn summarize_run (
129
157
ctxt : & SiteCtxt ,
130
158
commit : QueuedCommit ,
131
- is_master_commit : bool ,
159
+ source : PerfRunSource ,
132
160
) -> Result < String , String > {
133
161
let benchmark_map = ctxt. get_benchmark_category_map ( ) . await ;
134
162
@@ -179,16 +207,16 @@ async fn summarize_run(
179
207
)
180
208
. unwrap ( ) ;
181
209
182
- let next_steps = if is_master_commit {
183
- master_run_body ( is_regression)
184
- } else {
185
- try_run_body ( is_regression)
210
+ let next_steps = match source {
211
+ PerfRunSource :: TryBuild => try_run_body ( is_regression) ,
212
+ PerfRunSource :: TryBuildRollup => "" . to_string ( ) ,
213
+ PerfRunSource :: MasterCommit => master_run_body ( is_regression) ,
186
214
} ;
187
215
writeln ! ( & mut message, "{next_steps}\n " ) . unwrap ( ) ;
188
216
189
217
if !errors. is_empty ( ) {
190
218
writeln ! ( & mut message, "\n {errors}" ) . unwrap ( ) ;
191
- if is_master_commit {
219
+ if matches ! ( source , PerfRunSource :: MasterCommit ) {
192
220
writeln ! ( & mut message, "\n cc @rust-lang/wg-compiler-performance" ) . unwrap ( ) ;
193
221
}
194
222
}
0 commit comments