-
Notifications
You must be signed in to change notification settings - Fork 108
Fix PR pipeline #3370
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix PR pipeline #3370
Conversation
- Fix build matrix jobs failing when they should be skipped - Add explicit skip step that runs when app is not affected - Prevents GitHub from marking jobs as failed when all steps are conditionally skipped - Add should_run value to debug output for better troubleshooting This fixes the issue where PRs with "affects: Student" would show parent-build and teacher-build as failed instead of skipped. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR Review Summary
This PR adds debugging output and a skip step to the GitHub Actions workflow to improve visibility when matrix jobs don't need to run based on the PR body content.
Issues Found
-
Debugging step runs unconditionally (.github/workflows/pr-pipeline.yml:40-44): The "Dump Pull Request Event Context" step outputs
should_runbut executes even when the job should be skipped, potentially causing confusion. -
Skip step doesn't actually skip the job (.github/workflows/pr-pipeline.yml:46-48): The "Skip job if not needed" step only echoes a message but doesn't prevent the job from running. The job still consumes a GitHub Actions runner slot and counts toward your concurrency limits, even though it does nothing useful.
Recommendations
Consider restructuring the approach: Instead of conditionally running each step within a job, you could improve efficiency by:
-
Job-level conditionals: Move the
should_runlogic to the job levelifcondition to prevent jobs from starting at all when not needed. This would save runner resources. -
Filtering the matrix: Use
excludein the matrix strategy to filter out app types that shouldn't run based on PR body content. This is more efficient than starting jobs that immediately skip. -
Early exit pattern: If you want to keep the current structure, consider using
exit 0or a similar pattern to make the skip behavior more explicit.
Positive Feedback
- The addition of debugging output for
should_runis helpful for troubleshooting workflow behavior - The conditional logic on all subsequent steps (.github/workflows/pr-pipeline.yml:50+) is correctly implemented
- The approach maintains consistency with the existing pattern used throughout the workflow
📊 Code Coverage Report✅ Student
✅ Teacher
✅ Pandautils
📈 Overall Average
|
- Extract build logic into reusable workflow (build-app.yml) - Replace 3 duplicate build jobs with calls to reusable workflow - Each build job now truly skips when not affected by PR (job-level if) - Reduce main workflow from 1388 → 938 lines (32% reduction) Benefits: - Centralized build logic for future pipelines (release, open source) - Easier maintenance - update build process in one place - Jobs show as "skipped" not "failed" when not needed - Same security improvements maintained (chmod 600, validation, cleanup) Technical changes: - Created .github/workflows/build-app.yml (189 lines) - Refactored parent-build, student-build, teacher-build to use it - All job dependencies updated correctly - All secrets passed explicitly to reusable workflow 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Workflow Refactoring Review
This PR successfully refactors the GitHub Actions workflow by extracting the build logic into a reusable workflow. This is a solid improvement that reduces code duplication and makes the workflow more maintainable.
Summary of Changes
- ✅ Created new reusable workflow
build-app.ymlwithworkflow_calltrigger - ✅ Refactored
pr-pipeline.ymlto use the reusable workflow for each app type - ✅ Removed matrix strategy in favor of separate jobs (parent-build, student-build, teacher-build)
- ✅ Updated all job dependencies from
buildto specific app builds (e.g.,parent-build) - ✅ Cleaned up debug logging code
Key Issues to Address
Security Concerns:
- Error messages expose secret names, which could leak configuration details to potential attackers
- Generic error messages should be used instead of revealing exact secret names
Code Quality:
- Shell variable should use quotes for best practices
- Consider making Firebase tester group configurable via workflow inputs
Documentation:
- Add comments or documentation explaining the reusable workflow structure and how to add new app types
Positive Aspects
- The refactoring significantly improves maintainability by eliminating ~175 lines of duplicated code
- The workflow structure is now clearer with separate jobs for each app type
- All job dependencies have been correctly updated
- Sensitive file cleanup is properly handled with
if: always() - Good use of workflow inputs and secrets for parameterization
Testing Recommendations
- Verify that all three app builds (Parent, Student, Teacher) trigger correctly
- Confirm Firebase distribution works as expected with the new workflow structure
- Test that the QR code comments are still created/updated properly for each app type
The refactoring is well-executed overall. Please address the security concerns around error message verbosity before merging.
Security improvements to build-app.yml: - Use generic error messages to avoid exposing secret names - "Firebase service account key is not configured" instead of exposing secret name - "Firebase App ID is not configured" instead of exposing input parameter name Code quality improvements: - Add shell quoting best practice: FIREBASE_APP_ID="$(cat firebase_app_id.txt)" Claude review workflow improvements: - On PR updates, post progress update comments instead of new reviews - Allow Claude to resolve review threads when issues are fixed - Add issue comment tools for progress updates - Add resolve_review_thread tool for marking issues as resolved - Better instructions for tracking issue resolution with checkboxes This prevents creating duplicate review summaries on each PR update. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
affects: Student