Title: RSS feed for OpenBSD stable packages repository (made with XSLT)
       Author: Solène
       Date: 05 June 2019
       Tags: openbsd automation
       Description: 
       
       I am happy to announce there is now a RSS feed for getting news in case
       of new
       packages available on my repository
       [https://stable.perso.pw/](https://stable.perso.pw/)
       
       The file is available at
       [https://stable.perso.pw/rss.xml](https://stable.perso.pw/rss.xml).
       
       I take the occasion of this blog post to explain how the file is
       generated as I
       did not find easy tool for this task, so I ended up doing it myself.
       
       I choosed to use **XSLT**, which is not quite common. Briefly, **XSLT**
       allows
       to use some kind of XML template on a XML data file, this allow loops,
       filtering etc... It requires only two parts: the template and the data.
       
       
       **Simple RSS template**
       
       The following file is a template for my RSS file, we can see a few tags
       starting by `xsl` like `xsl:for-each` or `xsl:value-of`.
       
       It's interesting to note that the `xsl-for-each` can use a condition
       like
       `position < 10` in order to limit the loop to the 10 first items.
       
       
           <?xml version="1.0" encoding="UTF-8"?>
           <xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       
               <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
                   <channel>
                       <description></description>
       
                       <title>OpenBSD unofficial stable packages
       repository</title>
                       <link>https://stable.perso.pw/</link>
                       <atom:link href="https://stable.perso.pw/rss.xml"
       rel="self" type="application/rss+xml" />
                       <!-- END CONFIGURATION -->
       
                       <xsl:for-each select="feed/news[position()&lt;10]">
                       <item>
                           <title>
                               <xsl:value-of select="title"/>
                           </title>
                           <description>
                               <xsl:value-of select="description"/>
                           </description>
                           <pubDate>
                               <xsl:value-of select="date"/>
                           </pubDate>
                       </item>
                       </xsl:for-each>
       
               </rss>
           </xsl:template>
           </xsl:stylesheet>
       
       
       **Simple data file**
       
       Now, we need some data to use with the template.
       I've added a comment block so I can copy / paste it to add a new entry
       into the
       RSS easily. As the date is in a painful format to write for a human, I
       added to
       my Makefile starting the commands a call to a script replacing the
       string DATE
       by the current date with the correct format.
       
           <feed>
           <news>
               <title>www/mozilla-firefox</title>
               <description>Firefox 67.0.1</description>
               <date>Wed, 05 Jun 2019 06:00:00 GMT</date>
           </news>
       
           <news>
               <title></title>
               <description></description>
               <date></date>
           </news>
           -->
           </feed>
       
       
       **Makefile**
       
       I love makefiles, so I share it even if this one is really short.
       
           all:
                   sh replace_date.sh
                   xsltproc template.xml news.xml | xmllint -format - | tee
       rss.xml
                   scp rss.xml perso.pw:/home/stable/
       
                   rm rss.xml
       
       When I want to add an entry, I copy / paste the comment block in
       news.xml, add
       DATE, run `make` and it's uploaded :)
       
       The command **xsltproc** is available from the package **libxslt** on
       OpenBSD.
       
       And then, after writing this, I realise that manually editing the
       result file
       rss.xml is as much work as editing the news.xml file and then process
       it with
       xslt... But I keep that blog post as this can be useful for more
       complicated
       cases. :)