@@ -359,6 +359,21 @@ pub fn get_github_pr_number() -> Option<u32> {
359
359
Some ( pr_number)
360
360
}
361
361
362
+ /// Attempts to get the base branch from GitHub Actions environment variables.
363
+ /// Returns the base branch name if running in a GitHub Actions pull request environment.
364
+ pub fn get_github_base_ref ( ) -> Option < String > {
365
+ let event_name = std:: env:: var ( "GITHUB_EVENT_NAME" ) . ok ( ) ?;
366
+
367
+ if event_name != "pull_request" {
368
+ debug ! ( "Not running in pull_request event, got: {}" , event_name) ;
369
+ return None ;
370
+ }
371
+
372
+ let base_ref = std:: env:: var ( "GITHUB_BASE_REF" ) . ok ( ) ?;
373
+ debug ! ( "Auto-detected base ref from GitHub Actions: {}" , base_ref) ;
374
+ Some ( base_ref)
375
+ }
376
+
362
377
fn find_reference_url ( repo : & str , repos : & [ Repo ] ) -> Result < Option < String > > {
363
378
let mut non_git = false ;
364
379
for configured_repo in repos {
@@ -1466,4 +1481,30 @@ mod tests {
1466
1481
std:: env:: remove_var ( "GITHUB_EVENT_NAME" ) ;
1467
1482
std:: env:: remove_var ( "GITHUB_REF" ) ;
1468
1483
}
1484
+
1485
+ #[ test]
1486
+ fn test_get_github_base_ref ( ) {
1487
+ std:: env:: set_var ( "GITHUB_EVENT_NAME" , "pull_request" ) ;
1488
+ std:: env:: set_var ( "GITHUB_BASE_REF" , "main" ) ;
1489
+ let base_ref = get_github_base_ref ( ) ;
1490
+ assert_eq ! ( base_ref, Some ( "main" . to_owned( ) ) ) ;
1491
+
1492
+ // Test with different base branch
1493
+ std:: env:: set_var ( "GITHUB_BASE_REF" , "develop" ) ;
1494
+ let base_ref = get_github_base_ref ( ) ;
1495
+ assert_eq ! ( base_ref, Some ( "develop" . to_owned( ) ) ) ;
1496
+
1497
+ // Test when not in pull_request event
1498
+ std:: env:: set_var ( "GITHUB_EVENT_NAME" , "push" ) ;
1499
+ let base_ref = get_github_base_ref ( ) ;
1500
+ assert_eq ! ( base_ref, None ) ;
1501
+
1502
+ // Test when GITHUB_BASE_REF is not set
1503
+ std:: env:: set_var ( "GITHUB_EVENT_NAME" , "pull_request" ) ;
1504
+ std:: env:: remove_var ( "GITHUB_BASE_REF" ) ;
1505
+ let base_ref = get_github_base_ref ( ) ;
1506
+ assert_eq ! ( base_ref, None ) ;
1507
+
1508
+ std:: env:: remove_var ( "GITHUB_EVENT_NAME" ) ;
1509
+ }
1469
1510
}
0 commit comments