@@ -359,6 +359,21 @@ pub fn get_github_pr_number() -> Option<u32> {
359359 Some ( pr_number)
360360}
361361
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+
362377fn find_reference_url ( repo : & str , repos : & [ Repo ] ) -> Result < Option < String > > {
363378 let mut non_git = false ;
364379 for configured_repo in repos {
@@ -1466,4 +1481,30 @@ mod tests {
14661481 std:: env:: remove_var ( "GITHUB_EVENT_NAME" ) ;
14671482 std:: env:: remove_var ( "GITHUB_REF" ) ;
14681483 }
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+ }
14691510}
0 commit comments