<?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>Release on Chris Rants at Clouds</title>
    <link>https://chris.funderburg.me/tags/release/</link>
    <description>Recent content in Release on Chris Rants at Clouds</description>
    <image>
      <title>Chris Rants at Clouds</title>
      <url>https://chris.funderburg.me/me.jpg</url>
      <link>https://chris.funderburg.me/me.jpg</link>
    </image>
    <generator>Hugo -- 0.160.1</generator>
    <language>en-gb</language>
    <lastBuildDate>Thu, 13 Feb 2025 22:41:25 +0000</lastBuildDate>
    <atom:link href="https://chris.funderburg.me/tags/release/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>13/Feb/2025 - Automatic Tag and Release in Github</title>
      <link>https://chris.funderburg.me/posts/2025/02/13/automatic-tag-and-release-in-github/</link>
      <pubDate>Thu, 13 Feb 2025 22:41:25 +0000</pubDate>
      <guid>https://chris.funderburg.me/posts/2025/02/13/automatic-tag-and-release-in-github/</guid>
      <description>This is a technical one. Here&amp;rsquo;s a tool for automated tagging and release in Github</description>
      <content:encoded><![CDATA[<p>This is a little Github Action&rsquo;s workflow that, upon a push into your main branch, will create a new version tag, and then create a release with release notes.</p>
<p>It uses semantic versioning, and you can control whether it performs a patch, minor, or major release by putting a #patch, #minor, or #major note within any commit message.</p>
<p>A great use case for this sort of automated tagging is in Terraform modules to properly control versions like so:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-hcl" data-lang="hcl"><span class="line"><span class="cl"><span class="k">module</span> <span class="s2">&#34;rds-aurora&#34;</span> {
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">  source</span> <span class="o">=</span><span class="n"> &#34;git@github.com:maksystem-platform/terraform-aws-rds-aurora.git?ref</span><span class="o">=</span><span class="k">v0</span><span class="p">.</span><span class="m">3</span><span class="p">.</span><span class="m">0</span><span class="err">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">  aws_region</span> <span class="o">=</span> <span class="k">var</span><span class="p">.</span><span class="k">aws_region</span>
</span></span><span class="line"><span class="cl"><span class="n">  org_name</span>   <span class="o">=</span> <span class="k">var</span><span class="p">.</span><span class="k">org_name</span>
</span></span><span class="line"><span class="cl"><span class="n">  cust_name</span>  <span class="o">=</span> <span class="k">var</span><span class="p">.</span><span class="k">cust_name</span>
</span></span><span class="line"><span class="cl"><span class="n">  env</span>        <span class="o">=</span> <span class="k">var</span><span class="p">.</span><span class="k">env</span>
</span></span><span class="line"><span class="cl">  <span class="p">...</span>
</span></span></code></pre></div><p>Just drop this into your repository&rsquo;s <code>.github/workflows/</code> folder, calling it something like <code>tag-and-release.yaml</code>, and then create the required secrets.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">on</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">workflow_dispatch</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">push</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">branches</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">main</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">tag-and-release</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">permissions</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">contents</span><span class="p">:</span><span class="w"> </span><span class="l">read</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">env</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">GITHUB_USER_TOKEN</span><span class="p">:</span><span class="w"> </span><span class="l">${{ secrets.GITHUBTOKEN }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">GITHUB_USER_EMAIL</span><span class="p">:</span><span class="w"> </span><span class="l">${{ secrets.USEREMAIL }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">GITHUB_USER_NAME</span><span class="p">:</span><span class="w"> </span><span class="l">${{ secrets.GITHUBUSER }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">jobs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">tag-and-release</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l">ubuntu-latest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">steps</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Checkout Code</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/checkout@v4</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">fetch-depth</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;0&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Configure Git Credentials</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">          git config --global url.&#34;https://${{ env.GITHUB_USER_TOKEN }}@github.com/&#34;.insteadOf ssh://git@github.com/
</span></span></span><span class="line"><span class="cl"><span class="sd">          git config --global user.email ${{ env.GITHUB_USER_EMAIL }}
</span></span></span><span class="line"><span class="cl"><span class="sd">          git config --global user.name ${{ env.GITHUB_USER_NAME }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Bump version and push tag</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">anothrNick/github-tag-action@v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l">tag</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">env</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">GITHUB_TOKEN</span><span class="p">:</span><span class="w"> </span><span class="l">${{ env.GITHUB_USER_TOKEN }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">WITH_V</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">RELEASE_BRANCHES</span><span class="p">:</span><span class="w"> </span><span class="l">main</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Tag and Create a Release</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">softprops/action-gh-release@v2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">token</span><span class="p">:</span><span class="w"> </span><span class="l">${{ env.GITHUB_USER_TOKEN }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">tag_name</span><span class="p">:</span><span class="w"> </span><span class="l">${{ steps.tag.outputs.new_tag }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">generate_release_notes</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">make_latest</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span></code></pre></div><p>Enjoy!  And as always, you can add my <a href="https://chris.funderburg.me/index.xml" target="_blank" >RSS feed</a> to your reader of choice and if you made it this far <strong>thanks for reading</strong>!</p>
<p>Chris</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
