Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .github/workflows/patch-testing-cycles-comment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,18 @@ jobs:
id: pr
run: |
# Get the PR number from the workflow run
PR_NUMBER=$(gh api repos/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }} --jq '.pull_requests[0].number')
PR_NUMBER=$(gh api repos/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }} --jq 'first(.pull_requests[].number) // empty')
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: "Skip when no PR is attached to the workflow run"
if: steps.pr.outputs.number == ''
run: |
echo "No PR attached to workflow run ${{ github.event.workflow_run.id }}; skipping patch testing comment."

- name: "Post comment to PR"
if: steps.pr.outputs.number != ''
run: |
cd ./patch-testing
RUST_BACKTRACE=full cargo run --bin post-to-github
Expand Down
32 changes: 31 additions & 1 deletion patch-testing/sp1-test/bin/post_to_github.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@ use sp1_test::{
BenchEntry,
};

fn normalize_pr_number(pr_number: Option<String>) -> Option<String> {
pr_number.and_then(|pr_number| {
let pr_number = pr_number.trim();
(!pr_number.is_empty()).then(|| pr_number.to_string())
})
}

pub fn main() {
let old_path =
std::env::var("OLD_CYCLE_STATS").unwrap_or_else(|_| "../old_cycle_stats.json".to_string());
Expand All @@ -19,10 +26,33 @@ pub fn main() {

println!("{comparison}");

let pr_number = std::env::var("PR_NUMBER").unwrap();
let Some(pr_number) = normalize_pr_number(std::env::var("PR_NUMBER").ok()) else {
eprintln!("PR_NUMBER is missing or empty; skipping PR comment.");
return;
};
let token = std::env::var("GITHUB_TOKEN").unwrap();
let github_repo = std::env::var("GITHUB_REPOSITORY").unwrap();
let (owner, repo) = github_repo.split_once('/').unwrap();

post_to_github_pr_sync(owner, repo, &pr_number, &token, &comparison).unwrap();
}

#[cfg(test)]
mod tests {
use super::normalize_pr_number;

#[test]
fn normalize_pr_number_rejects_missing_value() {
assert_eq!(normalize_pr_number(None), None);
}

#[test]
fn normalize_pr_number_rejects_whitespace_only_value() {
assert_eq!(normalize_pr_number(Some(" ".to_string())), None);
}

#[test]
fn normalize_pr_number_keeps_trimmed_pr_number() {
assert_eq!(normalize_pr_number(Some(" 2821 ".to_string())), Some("2821".to_string()));
}
}
Loading