diff --git a/.github/scripts/get-pr-details.sh b/.github/scripts/get-pr-details.sh index ab7601d..7368cd7 100644 --- a/.github/scripts/get-pr-details.sh +++ b/.github/scripts/get-pr-details.sh @@ -2,7 +2,7 @@ set -euo pipefail -echo "Retrieving PR information..." +echo "Determining next SemVer..." if [ -z "${GITHUB_TOKEN:-}" ]; then echo "GITHUB_TOKEN not set" @@ -13,35 +13,68 @@ OWNER="${GITHUB_REPOSITORY%%/*}" REPO="${GITHUB_REPOSITORY##*/}" SHA="${GITHUB_SHA}" +git fetch --tags +LATEST_TAG=$(git tag --list 'v*.*.*' --sort=-v:refname | head -n1 || true) + +if [ -z "$LATEST_TAG" ]; then + LATEST_TAG="v0.0.0" +fi + +echo "Latest tag: $LATEST_TAG" + +VERSION="${LATEST_TAG#v}" +IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION" + PRS_JSON=$(curl -s \ -H "Authorization: Bearer $GITHUB_TOKEN" \ -H "Accept: application/vnd.github+json" \ "https://api.github.com/repos/$OWNER/$REPO/commits/$SHA/pulls") +echo "$PRS_JSON" | jq . + PR_COUNT=$(echo "$PRS_JSON" | jq length) if [ "$PR_COUNT" -eq 0 ]; then echo "No PR associated with this commit." - echo "title=" >> "$GITHUB_OUTPUT" - echo "body=" >> "$GITHUB_OUTPUT" - exit 0 + exit 1 fi -TITLE=$(echo "$PRS_JSON" | jq -r '.[0].title // ""') -BODY=$(echo "$PRS_JSON" | jq -r '.[0].body // ""') +LABELS=$(echo "$PRS_JSON" | jq -r '.[0].labels[].name' | tr '[:upper:]' '[:lower:]') + +BUMP="patch" + +COUNT=0 +for LABEL in major minor patch; do + if echo "$LABELS" | grep -qx "$LABEL"; then + BUMP="$LABEL" + COUNT=$((COUNT+1)) + fi +done + +if [ "$COUNT" -gt 1 ]; then + echo "Multiple SemVer labels applied. Use only one of: major, minor, patch." + exit 1 +fi + +echo "Version bump type: $BUMP" + +case "$BUMP" in + major) + MAJOR=$((MAJOR+1)) + MINOR=0 + PATCH=0 + ;; + minor) + MINOR=$((MINOR+1)) + PATCH=0 + ;; + patch) + PATCH=$((PATCH+1)) + ;; +esac -{ - echo "title<> "$GITHUB_OUTPUT" +NEW_TAG="v${MAJOR}.${MINOR}.${PATCH}" -{ - echo "body<> "$GITHUB_OUTPUT" +echo "New tag: $NEW_TAG" -echo "PR details captured." -echo "- Title = $TITLE." -echo "- Description = $BODY." +echo "tag=$NEW_TAG" >> "$GITHUB_OUTPUT" diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 70e6ec4..3711b1d 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -127,8 +127,9 @@ { "label": "LumenLab - Upload (release)", "type": "shell", - "command": "export LUMENLAB_VERSION=v999.999.999 && platformio run -e release --target upload", - // Alternative command to align with prod releases: "export LUMENLAB_VERSION=$(git describe --tags --abbrev=0) && platformio run -e release --target upload", + // "command": "export LUMENLAB_VERSION=v9.99.999 && platformio run -e release --target upload", + // Alternative command to align with prod releases: + "command": "export LUMENLAB_VERSION=$(git describe --tags --abbrev=0) && platformio run -e release --target upload", "problemMatcher": [ "$platformio" ],