René's URL Explorer Experiment


Title: Automated RSS/Atom Feed Validation Workflow · Issue #614 · python/planet · GitHub

Open Graph Title: Automated RSS/Atom Feed Validation Workflow · Issue #614 · python/planet

X Title: Automated RSS/Atom Feed Validation Workflow · Issue #614 · python/planet

Description: Hi @hugovk! 👋 Summary I've been working on improving the issue templates and adding automated RSS/Atom feed validation for Planet Python feed requests. This addresses #579 by implementing automated feed validation in CI. What I've Implem...

Open Graph Description: Hi @hugovk! 👋 Summary I've been working on improving the issue templates and adding automated RSS/Atom feed validation for Planet Python feed requests. This addresses #579 by implementing automated...

X Description: Hi @hugovk! 👋 Summary I've been working on improving the issue templates and adding automated RSS/Atom feed validation for Planet Python feed requests. This addresses #579 by implementing autom...

Opengraph URL: https://github.com/python/planet/issues/614

X: @github

direct link

Domain: patch-diff.githubusercontent.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Automated RSS/Atom Feed Validation Workflow","articleBody":"Hi @hugovk! 👋\n\n## Summary\n\nI've been working on improving the issue templates and adding automated RSS/Atom feed validation for Planet Python feed requests. This addresses #579 by implementing automated feed validation in CI.\n\n## What I've Implemented\n\nI've created a complete GitHub Actions workflow in my fork (https://github.com/matrixise/planet) that includes:\n\n### 1. **Modernized Issue Templates**\n- Migrated from old markdown format to GitHub's YAML issue forms\n- Two templates: \"Add or Edit RSS Feed\" and \"Bug Report\"\n- Structured form fields with validation requirements\n\n### 2. **Automated Feed Validation Workflow**\nThe workflow automatically validates feeds when issues are submitted, addressing the concerns raised in #579:\n\n- ✅ Validates URL format\n- ✅ Checks feed accessibility (HTTP 200)\n- ✅ Validates RSS/Atom structure using feedparser\n- ✅ Detects duplicate feeds in config.ini\n- ✅ Analyzes Python content (keyword detection)\n- 📝 Posts detailed validation results as comments\n- 🏷️ Adds labels based on validation status\n\nThis provides **immediate CI validation** for new feed submissions, catching issues before manual review.\n\n### 3. **Validation Results**\nThe workflow posts a comprehensive comment showing:\n- All validation checks with emoji indicators (✅/⚠️/❌)\n- Python content analysis with keyword detection score\n- Duplicate detection against existing feeds\n- Sample article titles from the feed\n- Clear next steps for contributors and maintainers\n- Link to W3C Feed Validator for detailed validation\n\n### Example Output\n\nSee my test issue for a live example: https://github.com/matrixise/planet/issues/2\n\n## Benefits\n\n1. **Addresses #579**: Automatic feed validation in CI for new submissions\n2. **Reduced maintainer workload**: Automatic validation catches common issues\n3. **Faster feedback**: Contributors get immediate validation results\n4. **Better quality**: Ensures feeds are accessible, valid, and Python-relevant before review\n5. **Duplicate prevention**: Automatically detects if a feed already exists\n6. **Transparency**: Clear, detailed feedback for all submissions\n\n## Implementation Details\n\n**New Files:**\n- `.github/workflows/validate-feed-request.yml` - Main validation workflow\n- `.github/scripts/validate_feed.py` - Feed validation logic (~450 lines)\n- `.github/scripts/format_comment.py` - Comment formatting (~250 lines)\n- `.github/scripts/get_labels.py` - Label extraction helper\n\n**Dependencies:**\n- `feedparser` - RSS/Atom parsing\n- `requests` - HTTP accessibility checks\n\n**Labels Used:**\n- `feed-request` - Triggers the workflow\n- `validation-passed` - All checks passed\n- `validation-warning` - Passed with warnings\n- `validation-failed` - Critical failure\n- `duplicate-feed` - Feed already exists\n\n## How This Addresses #579\n\nWhile #579 requested periodic validation of existing feeds (cron job), this implementation provides:\n1. **Immediate validation** for new feed submissions via issues\n2. **CI-based validation** that runs automatically on GitHub Actions\n3. **Foundation for future work**: The validation scripts can easily be extended to run as a periodic cron job to check all existing feeds\n\nThe current implementation focuses on the **submission workflow** (validating new feeds), which is the most critical use case. Adding periodic validation of all existing feeds would be a natural next step.\n\n## Current Status\n\n⚠️ **Note**: This is still in early testing phase. I haven't completed all test scenarios yet, but the initial results look very promising! The workflow successfully validates feeds and provides helpful feedback. I'm opening this issue to get early feedback from maintainers before investing more time in comprehensive testing and refinement.\n\n## Initial Testing\n\nThe workflow has been tested on my fork with the following scenario:\n- ✅ Valid feed with good Python content (Real Python)\n\nThe code **includes logic** to handle:\n- HTTP errors (404, timeouts, connection errors)\n- Malformed XML/RSS feeds (via feedparser's bozo detection)  \n- Duplicate detection in config.ini\n- Python content analysis (keyword detection in titles and summaries)\n\nHowever, I haven't systematically tested all error scenarios yet. The implementation looks solid, but comprehensive testing across different feed types and failure modes is still needed.\n\n### Python Content Detection Details\n\nThe workflow analyzes up to 10 recent articles and searches for Python-related keywords in titles and article summaries:\n- Keywords: `python`, `django`, `flask`, `fastapi`, `pytest`, `pip`, `pandas`, `numpy`, `asyncio`, `pypi`, `virtualenv`, `conda`, `jupyter`, `matplotlib`, `scikit`, `tensorflow`, `pytorch`\n- Score = percentage of articles containing at least one keyword\n- Thresholds: \u003c30% = warning, 30-60% = suggestion to filter, \u003e60% = good\n\n## Next Steps\n\nI'd like to contribute this to the main python/planet repository. The workflow is:\n- Non-blocking (informational, doesn't prevent issue creation)\n- Complements manual review (doesn't replace maintainer judgment)\n- Fully automated (no maintenance required once set up)\n\nWould you be interested in this addition? I'm happy to:\n1. Complete more comprehensive testing\n2. Open a PR with the implementation\n3. Make any adjustments based on feedback\n4. Help with documentation\n5. Extend it to add periodic validation of existing feeds (to fully address #579)\n\nLet me know if you'd like me to proceed with a PR or if you'd like to see more testing first!","author":{"url":"https://github.com/matrixise","@type":"Person","name":"matrixise"},"datePublished":"2026-01-07T06:47:09.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/614/planet/issues/614"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:1343f9f4-9b7d-d89d-fec4-07700f2deb34
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idBFDA:2DEB8:1572DF3:1C849D6:69805DC6
html-safe-nonce87f4e491379bcfb0cde091eac0a122bc7ae9ceac5f07a875c97a6fa1a59ec05d
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCRkRBOjJERUI4OjE1NzJERjM6MUM4NDlENjo2OTgwNURDNiIsInZpc2l0b3JfaWQiOiI1MTE4Njk0NzE2MDc4MDU0ODU0IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmac83662980eb65c3bb58a8ade09b8eb3bffced714e1fc41b11e9fddd3b2712e6f7
hovercard-subject-tagissue:3787572100
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/planet/614/issue_layout
twitter:imagehttps://opengraph.githubassets.com/d087dfe5d8a2d4ed2b65ce6997c9258eea24957c49b3eb5e77e0ac5a77819326/python/planet/issues/614
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/d087dfe5d8a2d4ed2b65ce6997c9258eea24957c49b3eb5e77e0ac5a77819326/python/planet/issues/614
og:image:altHi @hugovk! 👋 Summary I've been working on improving the issue templates and adding automated RSS/Atom feed validation for Planet Python feed requests. This addresses #579 by implementing automated...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernamematrixise
hostnamegithub.com
expected-hostnamegithub.com
None60279d4097367e16897439d16d6bbe4180663db828c666eeed2656988ffe59f6
turbo-cache-controlno-preview
go-importgithub.com/python/planet git https://github.com/python/planet.git
octolytics-dimension-user_id1525981
octolytics-dimension-user_loginpython
octolytics-dimension-repository_id24216135
octolytics-dimension-repository_nwopython/planet
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id24216135
octolytics-dimension-repository_network_root_nwopython/planet
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
releasec6a96cd078b54261c0aaa028bdbf4beca00718d1
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://patch-diff.githubusercontent.com/python/planet/issues/614#start-of-content
https://patch-diff.githubusercontent.com/
Sign in https://patch-diff.githubusercontent.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython%2Fplanet%2Fissues%2F614
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://patch-diff.githubusercontent.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython%2Fplanet%2Fissues%2F614
Sign up https://patch-diff.githubusercontent.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=python%2Fplanet
Reloadhttps://patch-diff.githubusercontent.com/python/planet/issues/614
Reloadhttps://patch-diff.githubusercontent.com/python/planet/issues/614
Reloadhttps://patch-diff.githubusercontent.com/python/planet/issues/614
python https://patch-diff.githubusercontent.com/python
planethttps://patch-diff.githubusercontent.com/python/planet
Please reload this pagehttps://patch-diff.githubusercontent.com/python/planet/issues/614
Notifications https://patch-diff.githubusercontent.com/login?return_to=%2Fpython%2Fplanet
Fork 185 https://patch-diff.githubusercontent.com/login?return_to=%2Fpython%2Fplanet
Star 140 https://patch-diff.githubusercontent.com/login?return_to=%2Fpython%2Fplanet
Code https://patch-diff.githubusercontent.com/python/planet
Issues 25 https://patch-diff.githubusercontent.com/python/planet/issues
Pull requests 1 https://patch-diff.githubusercontent.com/python/planet/pulls
Actions https://patch-diff.githubusercontent.com/python/planet/actions
Security 0 https://patch-diff.githubusercontent.com/python/planet/security
Insights https://patch-diff.githubusercontent.com/python/planet/pulse
Code https://patch-diff.githubusercontent.com/python/planet
Issues https://patch-diff.githubusercontent.com/python/planet/issues
Pull requests https://patch-diff.githubusercontent.com/python/planet/pulls
Actions https://patch-diff.githubusercontent.com/python/planet/actions
Security https://patch-diff.githubusercontent.com/python/planet/security
Insights https://patch-diff.githubusercontent.com/python/planet/pulse
New issuehttps://patch-diff.githubusercontent.com/login?return_to=https://github.com/python/planet/issues/614
New issuehttps://patch-diff.githubusercontent.com/login?return_to=https://github.com/python/planet/issues/614
Automated RSS/Atom Feed Validation Workflowhttps://patch-diff.githubusercontent.com/python/planet/issues/614#top
https://patch-diff.githubusercontent.com/matrixise
https://github.com/matrixise
https://github.com/matrixise
matrixisehttps://github.com/matrixise
on Jan 7, 2026https://github.com/python/planet/issues/614#issue-3787572100
@hugovkhttps://github.com/hugovk
#579https://github.com/python/planet/issues/579
https://github.com/matrixise/planethttps://github.com/matrixise/planet
#579https://github.com/python/planet/issues/579
matrixise#2https://github.com/matrixise/planet/issues/2
Validate each RSS feed in CI #579https://github.com/python/planet/issues/579
#579https://github.com/python/planet/issues/579
#579https://github.com/python/planet/issues/579
Validate each RSS feed in CI #579https://github.com/python/planet/issues/579
matrixisehttps://patch-diff.githubusercontent.com/matrixise
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.