<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Forgejo on bismigel</title><link>https://bismigel.dev/tags/forgejo/</link><description>Recent content in Forgejo on bismigel</description><generator>Hugo</generator><language>en-us</language><copyright>bismigel</copyright><lastBuildDate>Mon, 19 Oct 2026 20:30:00 -0400</lastBuildDate><atom:link href="https://bismigel.dev/tags/forgejo/index.xml" rel="self" type="application/rss+xml"/><item><title>Why I am considering Forgejo, and why I have not switched</title><link>https://bismigel.dev/posts/2026-10-19-why-forgejo/</link><pubDate>Mon, 19 Oct 2026 20:30:00 -0400</pubDate><guid>https://bismigel.dev/posts/2026-10-19-why-forgejo/</guid><description/><content:encoded><![CDATA[<p>I added CI to the GitOps repo. The workflow validates YAML, Kubernetes schemas and Prometheus rules. It runs on every pull request.</p>
<p>It still does not block a bad merge.</p>
<p>That is the problem. `bakuran-gitops` is private on GitHub Free. Required status checks and branch protection are paid features for private repositories. The workflow can be red, and the merge button still works. For a one-person lab that is a discipline problem; for a hiring signal it is worse, because the repo advertises guardrails it cannot enforce.</p>
<h1 id="what-i-actually-want">What I actually want</h1>
<ul>
<li>a private Git remote I control;</li>
<li>pull requests;</li>
<li>required checks that actually block;</li>
<li>no per-seat or per-private-repo paywall;</li>
<li>a path to CI and an OCI registry that I understand.</li>
</ul>
<p>Forgejo is the obvious candidate. It is lightweight, self-hostable, and has branch protection and Actions without GitHub&rsquo;s private-repo plan gate.</p>
<h1 id="what-forgejo-does-not-solve-for-free">What Forgejo does not solve for free</h1>
<p>Running the server is the easy part. The migration is the work:</p>
<ul>
<li>GitHub Actions are not guaranteed to run unchanged;</li>
<li>a self-hosted runner is another privileged workload to secure;</li>
<li>GHCR has to be replaced or kept external;</li>
<li>repository imports do not guarantee perfect PR and issue history;</li>
<li>SMTP, OAuth, TLS, backups and upgrades become mine;</li>
<li>public Git access needs a different auth story from a browser app behind Cloudflare Access.</li>
</ul>
<p>Forgejo gives control. It also gives me another service to patch.</p>
<h1 id="why-i-am-deferring-it">Why I am deferring it</h1>
<p>I do not want to migrate the platform and the Git host at the same time. The honest sequence is:</p>
<ol>
<li>finish the current platform work;</li>
<li>run Forgejo internally, with no public edge;</li>
<li>mirror two repos and read them from ArgoCD;</li>
<li>port one CI workflow, not all of them;</li>
<li>restore Forgejo from backup once;</li>
<li>migrate only after the mirror and restore are boring.</li>
</ol>
<p>The current CI stays. It is useful even when it is advisory. The difference between &ldquo;a check ran&rdquo; and &ldquo;a check blocked the merge&rdquo; is exactly the gap Forgejo would close.</p>
<h1 id="what-would-make-me-switch">What would make me switch</h1>
<ul>
<li>required checks available without a plan upgrade;</li>
<li>a runner that can validate the GitOps repo reliably;</li>
<li>an ArgoCD repo credential that works from inside the cluster;</li>
<li>a tested backup and restore;</li>
<li>a clean way to keep GitHub as a mirror during the transition.</li>
</ul>
<p>Until then, Forgejo is a planned experiment, not a migration.</p>
<h1 id="links">Links</h1>
<ul>
<li>Forgejo: <a href="https://forgejo.org/" target="_blank" rel="noopener noreferrer">https://forgejo.org/</a>
</li>
<li>Forgejo Actions: <a href="https://forgejo.org/docs/latest/user/actions/" target="_blank" rel="noopener noreferrer">https://forgejo.org/docs/latest/user/actions/</a>
</li>
<li>Forgejo migration: <a href="https://forgejo.org/docs/latest/contributor/repository-migration/" target="_blank" rel="noopener noreferrer">https://forgejo.org/docs/latest/contributor/repository-migration/</a>
</li>
<li>GitHub Free private repository limits: <a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches" target="_blank" rel="noopener noreferrer">https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches</a>
</li>
</ul>
]]></content:encoded></item></channel></rss>