Calculate Version Name and Number #26
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: Calculate Version Name and Number | |
on: | |
workflow_dispatch: | |
inputs: | |
base_version_number: | |
description: "Base Version Number - Will be added to the calculated version number" | |
type: number | |
default: 0 | |
version_name: | |
description: "Version Name Override - e.g. '2024.8.1'" | |
version_number: | |
description: "Version Number Override - e.g. '1021'" | |
patch_version: | |
description: "Patch Version Override - e.g. '999'" | |
distinct_id: | |
description: "Unique ID for this dispatch, used by dispatch-and-download.yml" | |
skip_checkout: | |
description: "Skip checking out the repository" | |
type: boolean | |
env: | |
BASE_VERSION_NUMBER: ${{ inputs.base_version_number || 0 }} | |
jobs: | |
calculate-version: | |
name: Calculate Version Name and Number | |
runs-on: ubuntu-latest | |
steps: | |
- name: Log inputs to job summary | |
run: | | |
echo "<details><summary>Version Workflow Inputs</summary>" >> $GITHUB_STEP_SUMMARY | |
echo "" >> $GITHUB_STEP_SUMMARY | |
echo '```json' >> $GITHUB_STEP_SUMMARY | |
echo '${{ toJson(inputs) }}' >> $GITHUB_STEP_SUMMARY | |
echo '```' >> $GITHUB_STEP_SUMMARY | |
echo "</details>" >> $GITHUB_STEP_SUMMARY | |
- name: Echo distinct ID ${{ github.event.inputs.distinct_id }} | |
run: echo ${{ github.event.inputs.distinct_id }} | |
- name: Check out repository | |
if: ${{ !inputs.skip_checkout || false }} | |
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 | |
with: | |
fetch-depth: 0 | |
- name: Calculate version name | |
id: calc-version-name | |
run: | | |
output() { | |
local version_name=$1 | |
echo "version_name=$version_name" >> $GITHUB_OUTPUT | |
} | |
# override version name if provided | |
if [[ ! -z "${{ inputs.version_name }}" ]]; then | |
version_name=${{ inputs.version_name }} | |
echo "::warning::Override applied: $version_name" | |
output "$version_name" | |
exit 0 | |
fi | |
current_year=$(date +%Y) | |
current_month=$(date +%-m) | |
latest_tag_version=$(git tag --sort=committerdate --list | tail -1) | |
if [[ -z "$latest_tag_version" ]]; then | |
version_name="${current_year}.${current_month}.${{ inputs.patch_version || 0 }}" | |
echo "::warning::No tags found, did you checkout? Calculating version from current date: $version_name" | |
output "$version_name" | |
exit 0 | |
fi | |
# Git tag was found, calculate version from latest tag | |
latest_version=${latest_tag_version:1} # remove 'v' from tag version | |
latest_major_version=$(echo $latest_version | cut -d "." -f 1) | |
latest_minor_version=$(echo $latest_version | cut -d "." -f 2) | |
patch_version=0 | |
if [[ ! -z "${{ inputs.patch_version }}" ]]; then | |
patch_version=${{ inputs.patch_version }} | |
echo "::warning::Patch Version Override applied: $patch_version" | |
elif [[ "$current_year" == "$latest_major_version" && "$current_month" == "$latest_minor_version" ]]; then | |
latest_patch_version=$(echo $latest_version | cut -d "." -f 3) | |
patch_version=$(($latest_patch_version + 1)) | |
fi | |
version_name="${current_year}.${current_month}.${patch_version}" | |
output "$version_name" | |
- name: Calculate version number | |
id: calc-version-number | |
run: | | |
# override version number if provided | |
if [[ ! -z "${{ inputs.version_number }}" ]]; then | |
version_number=${{ inputs.version_number }} | |
echo "::warning::Override applied: $version_number" | |
echo "version_number=$version_number" >> $GITHUB_OUTPUT | |
exit 0 | |
fi | |
version_number=$(($GITHUB_RUN_NUMBER + ${{ env.BASE_VERSION_NUMBER }})) | |
echo "version_number=$version_number" >> $GITHUB_OUTPUT | |
- name: Create version info JSON | |
run: | | |
json='{ | |
"version_number": "${{ steps.calc-version-number.outputs.version_number }}", | |
"version_name": "${{ steps.calc-version-name.outputs.version_name }}" | |
}' | |
echo "$json" > version_info.json | |
echo "## version-info.json" >> $GITHUB_STEP_SUMMARY | |
echo '```json' >> $GITHUB_STEP_SUMMARY | |
echo "$json" >> $GITHUB_STEP_SUMMARY | |
echo '```' >> $GITHUB_STEP_SUMMARY | |
- name: Upload version info artifact | |
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | |
with: | |
name: version-info | |
path: version_info.json |