<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>CI-CD on Jamie Ede</title>
    <link>https://jamieede.com/tags/ci-cd/</link>
    <description>Recent content in CI-CD on Jamie Ede</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <lastBuildDate>Tue, 23 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://jamieede.com/tags/ci-cd/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Automated link checking on a Hugo site with Lychee and Gitea Actions</title>
      <link>https://jamieede.com/posts/automated-link-checking-on-a-hugo-site-with-lychee-and-gitea-actions/</link>
      <pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://jamieede.com/posts/automated-link-checking-on-a-hugo-site-with-lychee-and-gitea-actions/</guid>
      <description>&lt;h2 id=&#34;introduction&#34; class=&#34;anchor-link&#34;&gt;&lt;a href=&#34;#introduction&#34;&gt;Introduction&lt;span class=&#34;pilcrow&#34;&gt;&amp;nbsp;¶&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Broken links on a static site are easy to miss. You rename a post, change a slug, or just forget to update a reference somewhere, and suddenly you have a 404 sitting there for weeks until someone actually mentions it. I wanted to catch those automatically on every push, not find out about them later.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://lychee.cli.rs/&#34; target=&#34;_blank&#34; &gt;Lychee&lt;/a&gt;&#xA; is a fast, async link checker written in Rust. It can check internal links without making any network requests (working entirely against the built HTML files), and it checks external links against live URLs too. Both checks run as steps in a Gitea Actions workflow on every push to &lt;code&gt;main&lt;/code&gt; or &lt;code&gt;dev&lt;/code&gt;, and on every pull request.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploying a Hugo site on Gitea to Cloudflare Pages with Gitea Actions</title>
      <link>https://jamieede.com/posts/deploying-a-hugo-site-on-gitea-to-cloudflare-pages-with-gitea-actions/</link>
      <pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate>
      <guid>https://jamieede.com/posts/deploying-a-hugo-site-on-gitea-to-cloudflare-pages-with-gitea-actions/</guid>
      <description>&lt;h2 id=&#34;introduction&#34; class=&#34;anchor-link&#34;&gt;&lt;a href=&#34;#introduction&#34;&gt;Introduction&lt;span class=&#34;pilcrow&#34;&gt;&amp;nbsp;¶&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A while back I wrote a &lt;a href=&#34;https://jamieede.com/posts/deploying-a-hugo-site-on-gitea-to-cloudflare-pages/&#34; &gt;post on deploying a Hugo site from Gitea to Cloudflare Pages&lt;/a&gt;&#xA; using a Gitea push mirror to GitHub, because at the time Cloudflare Pages only supported GitHub and GitLab as Git sources. That workaround works but it always felt wrong, two repos to keep in sync, a Personal Access Token to rotate, and a third-party round trip on every commit.&lt;/p&gt;&#xA;&lt;p&gt;You do not need any of that now. Gitea has Actions, and Cloudflare Pages has &lt;a href=&#34;https://developers.cloudflare.com/pages/get-started/direct-upload/&#34; target=&#34;_blank&#34; &gt;direct upload&lt;/a&gt;&#xA; via &lt;a href=&#34;https://developers.cloudflare.com/workers/wrangler/&#34; target=&#34;_blank&#34; &gt;wrangler&lt;/a&gt;&#xA;. One workflow file in your Gitea repo builds the site and pushes the &lt;code&gt;public&lt;/code&gt; folder straight to Pages. No GitHub in the loop.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
