Skip to content

Add TODO/FIXME scanning, link checking, and PR template to CI#134

Open
anyulled wants to merge 1 commit intomainfrom
chore-add-ci-checks-15241309031941948323
Open

Add TODO/FIXME scanning, link checking, and PR template to CI#134
anyulled wants to merge 1 commit intomainfrom
chore-add-ci-checks-15241309031941948323

Conversation

@anyulled
Copy link
Copy Markdown
Owner

@anyulled anyulled commented Mar 29, 2026

Implemented CI tooling to enhance project quality as requested by the scorecard remediation.

Specifically:

  1. Link Checking: Integrated lychee-action to scan Markdown files for broken links, with an ignore list for social media and local development URLs.
  2. TODO/FIXME Scanning: Added a lightweight grep-based scanner to identify and report technical debt in the codebase.
  3. PR Template: Established a standard Pull Request template to ensure all contributions meet project guidelines and testing requirements.

PR created automatically by Jules for task 15241309031941948323 started by @anyulled

Summary by CodeRabbit

  • Chores
    • Added GitHub pull request template with standardized sections for contributors including description, change type, testing details, and verification checklist.
    • Introduced automated workflow for documentation quality checks, including broken link validation in Markdown files and code scanner for development notes.
    • Added URL exclusion configuration for link validation to prevent false failures.

- Added .github/workflows/documentation.yml for link checking and TODO/FIXME scanning.
- Configured .lycheereignore to exclude problematic URLs (LinkedIn, Twitter, localhost).
- Added .github/PULL_REQUEST_TEMPLATE.md to standardize PRs and improve scorecard rating.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
@google-labs-jules
Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@vercel
Copy link
Copy Markdown

vercel bot commented Mar 29, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
devbcn Ready Ready Preview Mar 29, 2026 6:46pm

@anyulled anyulled enabled auto-merge (rebase) March 29, 2026 18:46
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 29, 2026

📝 Walkthrough

Walkthrough

Three infrastructure files are added to establish contributor guidelines and automate quality checks. A pull request template provides contribution structure, a GitHub Actions workflow automates link validation and TODO/FIXME detection on the main branch, and a configuration file specifies URL patterns to exclude from link checking.

Changes

Cohort / File(s) Summary
Pull Request Guidance and CI/CD Automation
.github/PULL_REQUEST_TEMPLATE.md, .github/workflows/documentation.yml
Added PR template with contribution checklist and a GitHub Actions workflow that checks for broken links in Markdown files and scans for TODO/FIXME comments on pushes and PRs to main.
Link Checker Configuration
.lycheereignore
Added ignore patterns for link validation, excluding social media domains (LinkedIn, Twitter/X, x.com) and localhost URLs.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 A template springs to life,
Workflows hum and hum,
Link checks dance without strife,
TODOs sing their song,
Infrastructure made right!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes all three main changes: adding TODO/FIXME scanning, link checking, and a PR template. It is concise, specific, and directly reflects the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore-add-ci-checks-15241309031941948323
⚔️ Resolve merge conflicts
  • Resolve merge conflict in branch chore-add-ci-checks-15241309031941948323

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a standard Pull Request template and a .lycheereignore file to exclude specific domains from link checking. The review feedback suggests enhancing the PR template by adding an explicit issue linking field and more granular change categories like Refactoring and Chore. Additionally, it is recommended to improve the regex patterns in the .lycheereignore file to more robustly handle URL variations such as protocol differences and the presence of subdomains.

Comment on lines +1 to +9
## Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context.

## Type of change
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
- [ ] Performance optimization
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This PR template is a great addition! To make it even more useful, I suggest a couple of enhancements:

  1. Explicit Issue Linking: Adding a Closes # (issue) line makes it very clear which issue is being addressed and allows GitHub to automatically close it upon merging.
  2. More Change Types: Including Refactoring and Chore provides more accurate options for categorizing PRs that don't add features or fix bugs, which is common in project maintenance.

These changes will help improve PR clarity and project management.

Suggested change
## Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context.
## Type of change
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
- [ ] Performance optimization
## Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context.
Closes # (issue)
## Type of change
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
- [ ] Performance optimization
- [ ] Refactoring (code structure changes with no new features)
- [ ] Chore (build process, tooling, or dependency updates)

Comment on lines +2 to +7
https://www.linkedin.com/.*
# Exclude Twitter/X
https://twitter.com/.*
https://x.com/.*
# Exclude local development URLs
http://localhost:.*
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The regex patterns for ignoring URLs can be made more robust. The current patterns are quite specific and might miss variations of the URLs.

For example, https://www.linkedin.com/.* won't match http://linkedin.com/ or https://linkedin.com/. By using https? and (www\.)?, we can cover more cases (HTTP/HTTPS, with or without www.) and make the ignore list more effective.

https?://(www\.)?linkedin\.com/.*
# Exclude Twitter/X
https?://(www\.)?twitter\.com/.*
https?://(www\.)?x\.com/.*
# Exclude local development URLs
http://localhost:.*

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
.github/workflows/documentation.yml (1)

16-16: Pin third-party action to a commit SHA.

Using a floating tag (@v2) is convenient but weakens supply-chain guarantees. Pin to the stable v2 reference commit SHA 7da8ec1fc4e01b5a12062ac6c589c10a4ce70d67 for better CI integrity.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/documentation.yml at line 16, Replace the floating tag
reference for the lychee action in the workflow step that currently uses "uses:
lycheeverse/lychee-action@v2" by pinning it to the specific commit SHA
"7da8ec1fc4e01b5a12062ac6c589c10a4ce70d67" so the step uses the exact immutable
release; update the "uses" value for that step to include the commit SHA instead
of "@v2" to improve CI supply-chain integrity.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/documentation.yml:
- Around line 28-31: The current grep pipeline ("grep -rnEi \"TODO|FIXME\" .
--exclude-dir={...} || echo \"No TODO/FIXME comments found.\"") masks real grep
errors by treating exit code 1 (no matches) and >=2 (errors) the same; change it
to run the grep command, capture its exit code, and branch: if exit code is 0
let the matches print, if 1 print "No TODO/FIXME comments found.", and if >=2
write an error to stderr and exit with that code. Reference the existing grep
invocation string and the fallback echo to locate where to implement this
exit-code-aware logic.

In @.lycheereignore:
- Around line 1-7: The ignore file is misnamed `.lycheereignore` so
lychee-action won't pick up the patterns; rename the file to `.lycheeignore` and
ensure the same contents (LinkedIn, Twitter/X, localhost patterns) are preserved
so lychee-action can auto-detect and apply these ignore rules.

---

Nitpick comments:
In @.github/workflows/documentation.yml:
- Line 16: Replace the floating tag reference for the lychee action in the
workflow step that currently uses "uses: lycheeverse/lychee-action@v2" by
pinning it to the specific commit SHA "7da8ec1fc4e01b5a12062ac6c589c10a4ce70d67"
so the step uses the exact immutable release; update the "uses" value for that
step to include the commit SHA instead of "@v2" to improve CI supply-chain
integrity.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e553fa67-2cfd-461b-a6a8-0109a3b3e059

📥 Commits

Reviewing files that changed from the base of the PR and between 76a14e4 and c631801.

📒 Files selected for processing (3)
  • .github/PULL_REQUEST_TEMPLATE.md
  • .github/workflows/documentation.yml
  • .lycheereignore

Comment on lines +28 to +31
run: |
echo "Scanning for TODO and FIXME comments in the codebase..."
# Exclude common meta-directories and the .github folder to avoid matching this workflow file
grep -rnEi "TODO|FIXME" . --exclude-dir={node_modules,.git,.next,.agent,.jules,.github} || echo "No TODO/FIXME comments found."
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Don’t mask real grep errors as “no TODO/FIXME found.”

grep ... || echo ... treats both “no matches” and real execution errors the same. This can hide scanner failures.

Proposed fix
-          grep -rnEi "TODO|FIXME" . --exclude-dir={node_modules,.git,.next,.agent,.jules,.github} || echo "No TODO/FIXME comments found."
+          if grep -rnEi "\b(TODO|FIXME)\b" . --exclude-dir={node_modules,.git,.next,.agent,.jules,.github}; then
+            echo "TODO/FIXME comments found."
+          else
+            status=$?
+            if [ "$status" -eq 1 ]; then
+              echo "No TODO/FIXME comments found."
+            else
+              echo "grep failed with exit code $status"
+              exit "$status"
+            fi
+          fi
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/documentation.yml around lines 28 - 31, The current grep
pipeline ("grep -rnEi \"TODO|FIXME\" . --exclude-dir={...} || echo \"No
TODO/FIXME comments found.\"") masks real grep errors by treating exit code 1
(no matches) and >=2 (errors) the same; change it to run the grep command,
capture its exit code, and branch: if exit code is 0 let the matches print, if 1
print "No TODO/FIXME comments found.", and if >=2 write an error to stderr and
exit with that code. Reference the existing grep invocation string and the
fallback echo to locate where to implement this exit-code-aware logic.

Comment on lines +1 to +7
# Exclude LinkedIn because it often returns 999 or 403 in CI
https://www.linkedin.com/.*
# Exclude Twitter/X
https://twitter.com/.*
https://x.com/.*
# Exclude local development URLs
http://localhost:.*
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

For lycheeverse/lychee-action v2, what ignore filename is auto-detected by default: .lycheeignoreor.lycheereignore?

💡 Result:

.lycheeignore

Citations:


Rename .lycheereignore to .lycheeignore.

The file is named .lycheereignore, but lychee-action auto-detects .lycheeignore. The ignore patterns won't be applied in CI until the filename is corrected.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.lycheereignore around lines 1 - 7, The ignore file is misnamed
`.lycheereignore` so lychee-action won't pick up the patterns; rename the file
to `.lycheeignore` and ensure the same contents (LinkedIn, Twitter/X, localhost
patterns) are preserved so lychee-action can auto-detect and apply these ignore
rules.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant