mirror of
https://github.com/cemu-project/Cemu.git
synced 2024-11-30 04:54:18 +01:00
74 lines
2.6 KiB
YAML
74 lines
2.6 KiB
YAML
|
name: Calculate Next Version from release history
|
||
|
|
||
|
on:
|
||
|
workflow_dispatch:
|
||
|
workflow_call:
|
||
|
outputs:
|
||
|
next_version:
|
||
|
description: "The next semantic version"
|
||
|
value: ${{ jobs.calculate-version.outputs.next_version }}
|
||
|
next_version_major:
|
||
|
description: "The next semantic version (major)"
|
||
|
value: ${{ jobs.calculate-version.outputs.next_version_major }}
|
||
|
next_version_minor:
|
||
|
description: "The next semantic version (minor)"
|
||
|
value: ${{ jobs.calculate-version.outputs.next_version_minor }}
|
||
|
|
||
|
jobs:
|
||
|
calculate-version:
|
||
|
runs-on: ubuntu-latest
|
||
|
outputs:
|
||
|
next_version: ${{ steps.calculate_next_version.outputs.next_version }}
|
||
|
next_version_major: ${{ steps.calculate_next_version.outputs.next_version_major }}
|
||
|
next_version_minor: ${{ steps.calculate_next_version.outputs.next_version_minor }}
|
||
|
steps:
|
||
|
- name: Checkout code
|
||
|
uses: actions/checkout@v2
|
||
|
|
||
|
- name: Get all releases
|
||
|
id: get_all_releases
|
||
|
run: |
|
||
|
# Fetch all releases and check for API errors
|
||
|
RESPONSE=$(curl -s -o response.json -w "%{http_code}" "https://api.github.com/repos/${{ github.repository }}/releases?per_page=100")
|
||
|
if [ "$RESPONSE" -ne 200 ]; then
|
||
|
echo "Failed to fetch releases. HTTP status: $RESPONSE"
|
||
|
cat response.json
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Extract and sort tags
|
||
|
ALL_TAGS=$(jq -r '.[].tag_name' response.json | grep -E '^v[0-9]+\.[0-9]+(-[0-9]+)?$' | sed 's/-.*//' | sort -V | tail -n 1)
|
||
|
|
||
|
# Exit if no tags were found
|
||
|
if [ -z "$ALL_TAGS" ]; then
|
||
|
echo "No valid tags found."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
echo "::set-output name=tag::$ALL_TAGS"
|
||
|
# echo "tag=$ALL_TAGS" >> $GITHUB_STATE
|
||
|
|
||
|
- name: Calculate next semver minor
|
||
|
id: calculate_next_version
|
||
|
run: |
|
||
|
LATEST_VERSION=${{ steps.get_all_releases.outputs.tag }}
|
||
|
|
||
|
# strip 'v' prefix and split into major.minor
|
||
|
LATEST_VERSION=${LATEST_VERSION//v/}
|
||
|
IFS='.' read -r -a VERSION_PARTS <<< "$LATEST_VERSION"
|
||
|
|
||
|
MAJOR=${VERSION_PARTS[0]}
|
||
|
MINOR=${VERSION_PARTS[1]}
|
||
|
|
||
|
# increment the minor version
|
||
|
MINOR=$((MINOR + 1))
|
||
|
|
||
|
NEXT_VERSION="${MAJOR}.${MINOR}"
|
||
|
|
||
|
echo "Major: $MAJOR"
|
||
|
echo "Minor: $MINOR"
|
||
|
|
||
|
echo "Next version: $NEXT_VERSION"
|
||
|
echo "::set-output name=next_version::$NEXT_VERSION"
|
||
|
echo "::set-output name=next_version_major::$MAJOR"
|
||
|
echo "::set-output name=next_version_minor::$MINOR"
|