Today a dear user made me aware that my RSS feed broke. There was a XML Parsing Error for cri.dev/rss.xml.
ASAP after work I checked the validity through validator.w3.org/feed/ and in fact there were some issues with it.
Apparently a mismatched tag </link> was causing the parser to go berserk.

After understanding the issue, I simplified the rss.md (which generates the rss.xml through devblog) and used scripting.com/rss.xml as an example.
Stripped away all the tags I didn’t need, and this is the resulting version of rss.md:
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
  <title>Christian Fei's Blog</title>
  <link><![CDATA[https://cri.dev]]></link>
  <description>A blog about my programming adventures in Elixir, Node.js and JavaScript</description>
  {%-  for post in collections.post -%}
  <item>
    <title><![CDATA[{{ post.data.title }}]]></title>
    <link><![CDATA[{{ post.url | withDomain }}]]></link>
    <guid><![CDATA[{{ post.url | withDomain }}]]></guid>
    <description><![CDATA[{{ post.text }}]]></description>
  </item>
  {%-  endfor -%}
</channel>
</rss>This file is processed with devblog and loops through the collections of posts, creating a list of <item> elements that represent the RSS feed.
The reverse nunjucks filter is needed because files are listed in alphabetical order, which means I would have the oldest post first otherwise.
Validating the RSS feed in the CI
I wanted to add this build step in the Continuous Integration I have set up with a GitHub Actions workflow.
If the validation of the RSS feed fails, the CI should not deploy a new version of the blog to cri.dev
Looking on NPM I found this little gem (pun intended) called feed-validator.
Which I use in my GitHub Actions workflow’s main.yml in the following way:
...
      - name: build
        run: |
          npm run build
          npm run compress
      - name: start server
        run: |
           npm start &
      - name: rss validation
        run: |
          npx feed-validator  http://127.0.0.1:8080/rss.xml
      - name: uat
        uses: cypress-io/github-action@v1
      - name: deploy
        env:
          AWS_ACCESS_KEY_ID: $
          AWS_SECRET_ACCESS_KEY: $
        run: |
          npm run deploy-with-assets
...You could also run it via file with the [-c FILE_PATH] option.
This small module calls the validation endpoint on validator.w3.org for me. In other words, this could be done with a cURL call, but that’s for another time.
Here the code that does the API call to validator.w3.org.
Here’s the full rss.xml feed, if you’re into that.
PS: did you remember that RSS was initially called RDF Site Summary, and then Really Simple Syndication or Rich Site Summary? ~ Wikipedia
 Chris
 Chris