Skip to content

Push [main] -> Tag

Push [main] -> Tag #27

name: Push -> Tag
run-name: Push [${{ github.ref_name }}] -> Tag
on:
push:
branches:
- main
concurrency:
group: Versioning-${{ github.ref_name }}
cancel-in-progress: false
env:
PROJECT_DIR_PATH: TJC.Singleton
jobs:
incrementVersion:
name: Push [${{ github.event.head_commit.message }}]
permissions: write-all
runs-on: windows-2022
outputs:
VersionNumber: ${{ steps.incrementVersion.outputs.result }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
token: ${{ secrets.TJC_TOKEN || secrets.GITHUB_TOKEN }}
fetch-depth: 0
- name: Check for Changes to See if Tagging can be Skipped
id: getChanges
uses: tj-actions/changed-files@v44.5.7
with:
files: ${{ env.PROJECT_DIR_PATH }}/**
- name: Get Pull Request
uses: 8BitJonny/gh-get-current-pr@3.0.0
id: getPR
- name: Pull Request [${{ steps.getPR.outputs.number }}]
if: steps.getPR.outputs.pr_found == 'true'
run: |
echo "From ${{ fromJSON(steps.getPR.outputs.pr).head.ref }}"
echo "To ${{ fromJSON(steps.getPR.outputs.pr).base.ref }}"
echo "Labels: ${{ join(fromJSON(steps.getPR.outputs.pr).labels.*.name, ', ') }}"
- name: Get Last Version
id: getLastVersion
if: ${{ steps.getChanges.outputs.any_modified != 'false' }}
uses: actions/github-script@v7.0.1
with:
result-encoding: string
script: |
try {
var latestTag = require("child_process").execSync("git describe --tags").toString().trim()
console.log('Latest Tag:', latestTag)
return latestTag
} catch {
return ""
}
# Get Next Version (from push directly to main - increment patch)
- name: Get Next Version [${{ steps.getLastVersion.outputs.result }}]
id: getNextVersion1
if: ${{ steps.getChanges.outputs.any_modified != 'false' && steps.getPR.outputs.pr_found == 'false' }}
uses: actions/github-script@v7.0.1
with:
result-encoding: string
script: |
var latestTag = "${{ steps.getLastVersion.outputs.result }}"
if (latestTag == "")
return "v0.1.0"
var ver = latestTag.replace("v","").split("-")[0]
console.log('Last Version:', "v" + ver)
var major = ver.split(".")[0]
var minor = ver.split(".")[1]
var patch = parseInt(ver.split(".")[2]) + 1
var next = "v" + major + "." + minor + "." + patch
console.log('Next Version:', next)
return next
# Get Next Version (from pull request merge - using labels to select whether to increment major, minor, or patch)
- name: Get Next Version [${{ steps.getLastVersion.outputs.result }}]
id: getNextVersion2
if: ${{ steps.getChanges.outputs.any_modified != 'false' && steps.getPR.outputs.pr_found == 'true' }}
uses: actions/github-script@v7.0.1
with:
result-encoding: string
script: |
var labels = "${{ join(fromJSON(steps.getPR.outputs.pr).labels.*.name, ', ') }}"
var latestTag = "${{ steps.getLastVersion.outputs.result }}"
if (latestTag == "")
return "v0.1.0"
var ver = latestTag.replace("v","").split("-")[0]
console.log('Last Version:', "v" + ver)
// Get Version Numbers
var major = parseInt(ver.split(".")[0])
var minor = parseInt(ver.split(".")[1])
var patch = parseInt(ver.split(".")[2])
// Increment depending on pull request labels
if (labels.includes("major")) {
major = major + 1
minor = 0
patch = 0
} else if (labels.includes("minor")) {
minor = minor + 1
patch = 0
} else {
patch = patch + 1
}
// Return version
var next = "v" + major + "." + minor + "." + patch
console.log('Next Version:', next)
return next
- name: Tag Version [${{ steps.getNextVersion1.outputs.result }}${{ steps.getNextVersion2.outputs.result }}]
if: ${{ steps.getChanges.outputs.any_modified != 'false' }}
run: |
git tag ${{ steps.getNextVersion1.outputs.result }}${{ steps.getNextVersion2.outputs.result }}
git push origin tag ${{ steps.getNextVersion1.outputs.result }}${{ steps.getNextVersion2.outputs.result }}
- name: ${{ (steps.getChanges.outputs.any_modified == 'false') && 'Skipped Incrementing Version' || format('Incremented Version [{0}{1}]', steps.getNextVersion1.outputs.result, steps.getNextVersion2.outputs.result) }}
if: success()
uses: ./.github/actions/tools/annotation/notice
with:
message: ${{ (steps.getChanges.outputs.any_modified == 'false') && 'Skipped Incrementing Version' || format('Incremented Version [{0}{1}]', steps.getNextVersion1.outputs.result, steps.getNextVersion2.outputs.result) }}