If you are tired of creating git tags, forgetting to use git push --tags, or are otherwise annoyed by having to think  about versioning rather than code, this one’s for you.
Trunk-based development (the only git branching strategy I’m aware of with research backing it’s efficacy) encourages release branches. Those release branches are often named releases/v1.5.4 or the like.
Why duplicate effort? If the version name is all right there in the release branch, why not get it from there and use it rather than relying on cumbersome tags in git?
Why indeed. Here’s a GitHub action sample that scrapes the version from the release branch name:
name: Build and release on push to releases
on:
  push:
    branches: [ releases/* ]
permissions:
  contents: write
  
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3 #1 (Explanation)
      with:
        fetch-depth: 0
    - name: Compute Tag Name
      id: compute-tag
      run: |
        BRANCH_NAME=$(git branch --show-current) #2 (Explanation)
        VERSION_NAME=$(basename $BRANCH_NAME) #3 (Explanation)
        echo "tagname=${VERSION_NAME}" >> $GITHUB_OUTPUT #4 (Explanation)
    - name: Build
      run: echo ${{ steps.compute-tag.outputs.tagname }} >> ./release_file.txt #5 (Explanation)
      
    - name: Create release
      uses: ncipollo/release-action@v1
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
        tag: ${{ steps.compute-tag.outputs.tagname }} #6 (Explanation)
        commit: main
        artifacts: './release_file.txt'
Explanation
uses: actions/checkoutis required to be able to access your git branch from GitHub actionsBRANCH_NAME=$(git branch --show-current)gets the latest branch name (e.g.releases/v1.5.4VERSION_NAME=$(basename $BRANCH_NAME)gets the last part of the path of the branch name (e.g.v.1.5.4). If you had a branch name ofreleases/hotfix/v.1.5.5it would still return the last part (e.g.v.1.5.5)echo "tagname=${VERSION_NAME}" >> $GITHUB_OUTPUTsets the tag name for the current branch to version nameecho ${{ steps.compute-tag.outputs.tagname }} >> ./release_file.txtwrites the version number to a file (simulating a build step)tag: ${{ steps.compute-tag.outputs.tagname}}uses ncipollo’s release action to actually create a release using the set tag
Source Code
To see the source code, the releases, and the Action in, well, action – here’s the source code on GitHub.
