@@ -29,30 +29,63 @@ pub async fn unroll_rollup(
29
29
previous_master : & str ,
30
30
rollup_pr_number : u32 ,
31
31
) -> Result < ( ) , String > {
32
+ let commit_link = |sha : & str | format ! ( "https://github.com/rust-lang-ci/rust/commit/{sha}" ) ;
33
+
32
34
let format_commit = |s : & str , truncate : bool | {
33
35
let display = truncate. then ( || s. split_at ( 10 ) . 0 ) . unwrap_or ( s) ;
34
- format ! ( "[{display}](https://github.com/rust-lang-ci/rust/commit/{s })" )
36
+ format ! ( "[{display}]({ })" , commit_link ( s ) )
35
37
} ;
36
- let mapping = enqueue_unrolled_try_builds ( ci_client, rollup_merges, previous_master)
37
- . await ?
38
+
39
+ // Sort rolled up commits by their PR number in ascending order, so that they have the
40
+ // same ordering as in the rollup PR description.
41
+ let mut unrolled_builds: Vec < UnrolledCommit > =
42
+ enqueue_unrolled_try_builds ( ci_client, rollup_merges, previous_master) . await ?;
43
+ // The number should really be an integer, but if not, we will just sort the "non-integer" PRs
44
+ // first.
45
+ unrolled_builds. sort_by_cached_key ( |commit| commit. original_pr_number . parse :: < u64 > ( ) . ok ( ) ) ;
46
+
47
+ let mapping = unrolled_builds
38
48
. into_iter ( )
39
49
. fold ( String :: new ( ) , |mut string, c| {
40
50
use std:: fmt:: Write ;
41
51
let commit = c
42
52
. sha
43
53
. as_deref ( )
44
- . map ( |s| format_commit ( s, false ) )
54
+ . map ( |s| {
55
+ // Format the SHA as a code block to make it easy to copy-paste verbatim
56
+ let link = commit_link ( s) ;
57
+ format ! ( "`{s}` ([link]({link}))" )
58
+ } )
45
59
. unwrap_or_else ( || {
46
60
let head = format_commit ( & c. rolled_up_head , true ) ;
47
61
format ! ( "❌ conflicts merging '{head}' into previous master ❌" )
48
62
} ) ;
49
- writeln ! ( & mut string, "|#{pr}|{commit}|" , pr = c. original_pr_number) . unwrap ( ) ;
63
+ let message = c
64
+ . rollup_merge
65
+ . message
66
+ . split ( '\n' )
67
+ // Skip over "Rollup merge of ..." and an empty line
68
+ . nth ( 2 )
69
+ . map ( |m| {
70
+ if m. len ( ) <= 60 {
71
+ m. to_string ( )
72
+ } else {
73
+ format ! ( "{}…" , m. split_at( 59 ) . 0 )
74
+ }
75
+ } )
76
+ . unwrap_or_else ( || format ! ( "#{}" , c. original_pr_number) ) ;
77
+ writeln ! (
78
+ & mut string,
79
+ "|#{pr}|{message}|{commit}|" ,
80
+ pr = c. original_pr_number
81
+ )
82
+ . unwrap ( ) ;
50
83
string
51
84
} ) ;
52
85
let previous_master = format_commit ( previous_master, true ) ;
53
86
let msg =
54
87
format ! ( "📌 Perf builds for each rolled up PR:\n \n \
55
- |PR# | Perf Build Sha|\n |----|:-----:|\n \
88
+ |PR# | Message | Perf Build Sha|\n |----|:-----:|\n \
56
89
{mapping}\n \n *previous master*: {previous_master}\n \n In the case of a perf regression, \
57
90
run the following command for each PR you suspect might be the cause: `@rust-timer build $SHA`\n \
58
91
{COMMENT_MARK_ROLLUP}") ;
@@ -108,7 +141,7 @@ async fn enqueue_unrolled_try_builds<'a>(
108
141
. merge_branch (
109
142
"perf-tmp" ,
110
143
& rolled_up_head,
111
- & format ! ( "Unrolled build for #{original_pr_number}" ) ,
144
+ & format ! ( "Unrolled build for #{original_pr_number}\n {}" , rollup_merge . message ) ,
112
145
)
113
146
. await
114
147
. map_err ( |e| {
0 commit comments