@@ -4,17 +4,22 @@ const SEPARATOR: u8 = b'=';
44
55const JOB_NAME_VARIABLE : & str = "CI_JOB_NAME" ;
66const PR_NUMBER_VARIABLE : & str = "CI_PR_NUMBER" ;
7+ /// URL pointing to a documentation page about the job.
8+ /// Added in https://github.com/rust-lang/rust/pull/136911.
9+ const JOB_DOC_URL : & str = "CI_JOB_DOC_URL" ;
710
811pub struct LogVariables < ' a > {
912 pub job_name : Option < & ' a str > ,
1013 pub pr_number : Option < & ' a str > ,
14+ pub doc_url : Option < & ' a str > ,
1115}
1216
1317impl < ' a > LogVariables < ' a > {
1418 pub fn extract < I : crate :: index:: IndexData > ( lines : & ' a [ I ] ) -> Self {
1519 let mut result = LogVariables {
1620 job_name : None ,
1721 pr_number : None ,
22+ doc_url : None ,
1823 } ;
1924
2025 for line in lines {
@@ -26,9 +31,12 @@ impl<'a> LogVariables<'a> {
2631 if result. pr_number . is_none ( ) {
2732 result. pr_number = extract_variable ( sanitized, PR_NUMBER_VARIABLE ) ;
2833 }
34+ if result. doc_url . is_none ( ) {
35+ result. doc_url = extract_variable ( sanitized, JOB_DOC_URL ) ;
36+ }
2937
3038 // Early exit if everything was found
31- if result. job_name . is_some ( ) && result. pr_number . is_some ( ) {
39+ if result. job_name . is_some ( ) && result. pr_number . is_some ( ) && result . doc_url . is_some ( ) {
3240 break ;
3341 }
3442 }
@@ -72,10 +80,16 @@ mod tests {
7280 Sanitized ( "baz" ) ,
7381 Sanitized ( "[CI_PR_NUMBER=123]" ) ,
7482 Sanitized ( "quux" ) ,
83+ Sanitized ( "[CI_JOB_DOC_URL=https://github.com/rust-lang/rust/job1]" ) ,
84+ Sanitized ( "foobar" ) ,
7585 ] ;
7686
7787 let extracted = LogVariables :: extract ( LOG ) ;
7888 assert_eq ! ( Some ( "test-job" ) , extracted. job_name) ;
7989 assert_eq ! ( Some ( "123" ) , extracted. pr_number) ;
90+ assert_eq ! (
91+ Some ( "https://github.com/rust-lang/rust/job1" ) ,
92+ extracted. doc_url
93+ ) ;
8094 }
8195}
0 commit comments