<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Automation on Rihards Steinbergs</title><link>https://rihards.com/blog/automation/</link><description>Recent content in Automation on Rihards Steinbergs</description><generator>Hugo</generator><language>en</language><copyright>© 2026 Rihards Steinbergs</copyright><lastBuildDate>Sat, 07 Nov 2026 07:10:47 +0000</lastBuildDate><atom:link href="https://rihards.com/blog/automation/index.xml" rel="self" type="application/rss+xml"/><item><title>GitHub Actions &amp; rsync based deployments for Hugo</title><link>https://rihards.com/2026/github-actions-rsync-based-deployments-for-hugo/</link><pubDate>Sat, 07 Nov 2026 07:10:47 +0000</pubDate><guid>https://rihards.com/2026/github-actions-rsync-based-deployments-for-hugo/</guid><description>&lt;p&gt;Let&amp;rsquo;s start with the full GitHub Actions workflow file and then work our way through it step by step. You can also view the file on &lt;a href="https://gist.github.com/rihards/6eb9098f21f04066796d1515dcd7a67c" rel="external noopener nofollow" target="_blank"&gt;GitHub as a gist&lt;/a&gt;. This will serve as documentation for myself as well (the next time I&amp;rsquo;ll need it).&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cba6f7"&gt;name&lt;/span&gt;: Build &amp;amp; Deploy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cba6f7"&gt;on&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 3&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;push&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 4&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;branches&lt;/span&gt;: [ main ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 5&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;workflow_dispatch&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 6&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cba6f7"&gt;jobs&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 8&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;deploy&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 9&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;runs-on&lt;/span&gt;: ubuntu-latest&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;10&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;concurrency&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;11&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;group&lt;/span&gt;: ${{ github.workflow }}-${{ github.ref }}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;12&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;cancel-in-progress&lt;/span&gt;: &lt;span style="color:#fab387"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;13&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;14&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;steps&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;15&lt;/span&gt;&lt;span&gt; - &lt;span style="color:#cba6f7"&gt;uses&lt;/span&gt;: actions/checkout@v7&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;16&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;with&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;17&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;submodules&lt;/span&gt;: recursive&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;18&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;fetch-depth&lt;/span&gt;: &lt;span style="color:#fab387"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;19&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;lfs&lt;/span&gt;: &lt;span style="color:#fab387"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;20&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;21&lt;/span&gt;&lt;span&gt; - &lt;span style="color:#cba6f7"&gt;name&lt;/span&gt;: Setup Hugo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;22&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;uses&lt;/span&gt;: peaceiris/actions-hugo@v3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;23&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;with&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;24&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;hugo-version&lt;/span&gt;: &lt;span style="color:#a6e3a1"&gt;&amp;#39;0.169.0&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;25&lt;/span&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;26&lt;/span&gt;&lt;span&gt; - &lt;span style="color:#cba6f7"&gt;name&lt;/span&gt;: Build&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;27&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;run&lt;/span&gt;: hugo --minify&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;28&lt;/span&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;29&lt;/span&gt;&lt;span&gt; - &lt;span style="color:#cba6f7"&gt;name&lt;/span&gt;: Deploy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;30&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;uses&lt;/span&gt;: burnett01/rsync-deployments@v9&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;31&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;with&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;32&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;switches&lt;/span&gt;: -avzr --delete&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;33&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;path&lt;/span&gt;: public/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;34&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;remote_path&lt;/span&gt;: ${{ secrets.REMOTE_PATH }}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;35&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;remote_host&lt;/span&gt;: ${{ secrets.REMOTE_HOST }}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;36&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;remote_user&lt;/span&gt;: ${{ secrets.REMOTE_USER }}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;37&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;remote_key&lt;/span&gt;: ${{ secrets.REMOTE_PRIVATE_KEY }}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="the-setup"&gt;The Setup&lt;/h3&gt;&#10;&lt;p&gt;Pretty basic setup at the top. We have on push to &lt;code&gt;main&lt;/code&gt; branch which means that every time there&amp;rsquo;s a new commit added to the main branch this action is activated, and this includes merges to the main branch or direct pushes to it.&lt;/p&gt;</description></item><item><title>Bitbucket Pipelines, PHPUnit, PHPCS and CodeCeption</title><link>https://rihards.com/2017/bitbucket-pipelines-phpunit-codeception/</link><pubDate>Wed, 22 Mar 2017 17:01:07 +0000</pubDate><guid>https://rihards.com/2017/bitbucket-pipelines-phpunit-codeception/</guid><description>&lt;h3 id="background-information"&gt;Background information&lt;/h3&gt;&#10;&lt;p&gt;For a while now I&amp;rsquo;ve been thinking about starting a new project, and as with most such cases I&amp;rsquo;ve been thinking that I need to do things better and more proper this time around.&lt;/p&gt;&#10;&lt;p&gt;One of those things has always been the automated testing parts of the project that have fallen behind or lacking in many ways.&lt;/p&gt;&#10;&lt;p&gt;So I set a small private repository on Bitbucket to see what my options are, what I could work with, etc. and started looking into the various tools like &lt;a href="https://jenkins.io/" rel="external noopener nofollow" target="_blank"&gt;Jenkins&lt;/a&gt;, &lt;a href="https://travis-ci.org/" rel="external noopener nofollow" target="_blank"&gt;Travis&lt;/a&gt;, and &lt;a href="https://circleci.com/" rel="external noopener nofollow" target="_blank"&gt;CircleCI&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>