Skip to content

Commit 31e9bc1

Browse files
runningcodeclaude
andcommitted
feat(build): Add auto-detection of PR number from GitHub Actions
When the --pr-number argument is not provided to the build upload command, the PR number is now automatically detected from GitHub Actions environment variables (GITHUB_EVENT_NAME and GITHUB_REF). This enhancement works by: - Checking if GITHUB_EVENT_NAME is "pull_request" - Parsing GITHUB_REF format "refs/pull/{pr_number}/merge" - Extracting the PR number and using it as the default value Includes comprehensive tests to verify the detection logic works correctly for various GitHub Actions scenarios. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 873937a commit 31e9bc1

1 file changed

Lines changed: 52 additions & 3 deletions

File tree

src/commands/build/upload.rs

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,31 @@ use crate::utils::vcs::{
2727
self, get_provider_from_remote, get_repo_from_remote, git_repo_head_ref, git_repo_remote_url,
2828
};
2929

30+
fn get_default_pr_number() -> Option<u32> {
31+
std::env::var("GITHUB_REF")
32+
.ok()
33+
.and_then(|github_ref| {
34+
if let Ok(event_name) = std::env::var("GITHUB_EVENT_NAME") {
35+
if event_name == "pull_request" && github_ref.starts_with("refs/pull/") {
36+
let pr_number_str = github_ref
37+
.strip_prefix("refs/pull/")?
38+
.split('/')
39+
.next()?;
40+
if let Ok(pr_number) = pr_number_str.parse::<u32>() {
41+
debug!("Auto-detected PR number from GitHub Actions: {}", pr_number);
42+
Some(pr_number)
43+
} else {
44+
None
45+
}
46+
} else {
47+
None
48+
}
49+
} else {
50+
None
51+
}
52+
})
53+
}
54+
3055
pub fn make_command(command: Command) -> Command {
3156
#[cfg(all(target_os = "macos", target_arch = "aarch64"))]
3257
const HELP_TEXT: &str =
@@ -85,7 +110,7 @@ pub fn make_command(command: Command) -> Command {
85110
Arg::new("pr_number")
86111
.long("pr-number")
87112
.value_parser(clap::value_parser!(u32))
88-
.help("The pull request number to use for the upload. If not provided, the current pull request number will be used.")
113+
.help("The pull request number to use for the upload. If not provided, the PR number will be automatically detected from GitHub Actions environment variables.")
89114
)
90115
.arg(
91116
Arg::new("build_configuration")
@@ -173,7 +198,10 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
173198
let base_repo_name = matches.get_one("base_repo_name").map(String::as_str);
174199
let base_sha = matches.get_one("base_sha").map(String::as_str);
175200
let base_ref = matches.get_one("base_ref").map(String::as_str);
176-
let pr_number = matches.get_one::<u32>("pr_number");
201+
let pr_number = matches
202+
.get_one::<u32>("pr_number")
203+
.copied()
204+
.or_else(|| get_default_pr_number());
177205

178206
let build_configuration = matches.get_one("build_configuration").map(String::as_str);
179207
let release_notes = matches.get_one("release_notes").map(String::as_str);
@@ -238,7 +266,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
238266
base_repo_name,
239267
head_ref: head_ref.as_deref(),
240268
base_ref,
241-
pr_number,
269+
pr_number: pr_number.as_ref(),
242270
};
243271
match upload_file(
244272
&authenticated_api,
@@ -597,4 +625,25 @@ mod tests {
597625
);
598626
Ok(())
599627
}
628+
629+
#[test]
630+
fn test_get_default_pr_number() {
631+
std::env::set_var("GITHUB_EVENT_NAME", "pull_request");
632+
std::env::set_var("GITHUB_REF", "refs/pull/123/merge");
633+
634+
let pr_number = get_default_pr_number();
635+
assert_eq!(pr_number, Some(123));
636+
637+
std::env::set_var("GITHUB_EVENT_NAME", "push");
638+
let pr_number = get_default_pr_number();
639+
assert_eq!(pr_number, None);
640+
641+
std::env::set_var("GITHUB_EVENT_NAME", "pull_request");
642+
std::env::set_var("GITHUB_REF", "refs/heads/main");
643+
let pr_number = get_default_pr_number();
644+
assert_eq!(pr_number, None);
645+
646+
std::env::remove_var("GITHUB_EVENT_NAME");
647+
std::env::remove_var("GITHUB_REF");
648+
}
600649
}

0 commit comments

Comments
 (0)