Create Release #6
This file contains hidden or 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: Create Release | |
on: | |
workflow_dispatch: | |
inputs: | |
release_version: | |
description: 'Version for the release (e.g., 1.0.0, 1.0.0-rc-1)' | |
required: false | |
release_alias: | |
description: 'Alias for the release (e.g., v1, v2)' | |
required: false | |
permissions: | |
contents: write | |
packages: write | |
jobs: | |
release: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Ensure all history and tags are fetched | |
- name: Determine Release Version | |
if: ${{ github.event.inputs.release_version == '' }} | |
id: determine_version | |
run: | | |
if [ -z "${{ github.event.inputs.release_version }}" ]; then | |
echo "No release_version input provided. Computing next version..." | |
# Get the latest tag | |
latest_tag=$(git describe --tags $(git rev-list --tags --max-count=1) 2>/dev/null) | |
echo "Latest tag: $latest_tag" | |
if [ -z "$latest_tag" ]; then | |
# No previous tags exist; start with initial version | |
release_version="1.0.0" | |
else | |
# Extract version components based on Maven versioning rules | |
version_pattern='^([0-9]+)\.([0-9]+)\.([0-9]+)(-.+)?$' | |
if [[ "$latest_tag" =~ $version_pattern ]]; then | |
major="${BASH_REMATCH[1]}" | |
minor="${BASH_REMATCH[2]}" | |
patch="${BASH_REMATCH[3]}" | |
suffix="${BASH_REMATCH[4]}" | |
echo "Version components - Major: $major, Minor: $minor, Patch: $patch, Suffix: $suffix" | |
if [[ -n "$suffix" ]]; then | |
# Handle pre-release versions (e.g., -rc-1, -milestone-1) | |
suffix_pattern='^-(.+)-([0-9]+)$' | |
if [[ "$suffix" =~ $suffix_pattern ]]; then | |
suffix_type="${BASH_REMATCH[1]}" | |
suffix_number="${BASH_REMATCH[2]}" | |
next_suffix_number=$((suffix_number + 1)) | |
release_version="${major}.${minor}.${patch}-${suffix_type}-${next_suffix_number}" | |
else | |
# Unrecognized suffix format; increment patch version | |
next_patch=$((patch + 1)) | |
release_version="${major}.${minor}.${next_patch}" | |
fi | |
else | |
# No suffix; increment patch version | |
next_patch=$((patch + 1)) | |
release_version="${major}.${minor}.${next_patch}" | |
fi | |
else | |
echo "Latest tag does not match expected version pattern. Defaulting to 1.0.0." | |
release_version="1.0.0" | |
fi | |
fi | |
else | |
echo "Using provided release_version input: ${{ github.event.inputs.release_version }}" | |
release_version="${{ github.event.inputs.release_version }}" | |
fi | |
echo "Release version: $release_version" | |
echo "release_version=$release_version" >> $GITHUB_OUTPUT | |
- name: Create Git Tag | |
run: | | |
git tag -a ${{ steps.determine_version.outputs.release_version }} -m "Created release for ${{ steps.determine_version.outputs.release_version }}." | |
git push --tags origin ${{ steps.determine_version.outputs.release_version }} | |
- name: Create Alias Tag (if specified) | |
if: ${{ github.event.inputs.release_alias != '' }} | |
run: | | |
git tag -f ${{ github.event.inputs.release_alias }} ${{ steps.determine_version.outputs.release_version }} | |
git push origin -f ${{ github.event.inputs.release_alias }} | |
- name: Create GitHub Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
tag_name: ${{ steps.determine_version.outputs.release_version }} | |
name: ${{ steps.determine_version.outputs.release_version }} | |
generate_release_notes: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |