diff --git a/Taskfile.yaml b/Taskfile.yaml index e21adb3bcc47b9487ca3cc0bf9997207db880d35..e353442bac69ef71ad6fa1b05baef3906f61c2c3 100644 --- a/Taskfile.yaml +++ b/Taskfile.yaml @@ -98,66 +98,23 @@ tasks: desc: Interactive release workflow vars: BUMP: - sh: gum choose "major" "minor" "patch" "prerelease" - CURRENT_VERSION: - sh: git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0" - IS_CURRENT_PRERELEASE: sh: | - current="{{.CURRENT_VERSION}}" - if echo "$current" | grep -qE '\-[a-zA-Z]+\.[0-9]+$'; then - echo "yes" - else - echo "no" - fi - IS_PRERELEASE: - sh: | - if [ "{{.BUMP}}" = "prerelease" ]; then - echo "yes" - else - gum confirm "Create pre-release?" && echo "yes" || echo "no" - fi - PRERELEASE_SUFFIX: - sh: | - if [ "{{.BUMP}}" = "prerelease" ] && [ "{{.IS_CURRENT_PRERELEASE}}" = "yes" ]; then - # Extract suffix from current version (e.g., v1.2.3-beta.0 -> beta) - echo "{{.CURRENT_VERSION}}" | sed -E 's/.*-([a-zA-Z]+)\.[0-9]+$/\1/' - elif [ "{{.IS_PRERELEASE}}" = "yes" ]; then - gum input --placeholder "Enter pre-release suffix (e.g., beta, rc)" - fi - BASE_NEXT: - sh: | - if [ "{{.BUMP}}" = "prerelease" ] && [ "{{.IS_CURRENT_PRERELEASE}}" = "yes" ]; then - # Extract base version from current prerelease (e.g., v1.2.3-beta.0 -> v1.2.3) - echo "{{.CURRENT_VERSION}}" | sed -E 's/-[a-zA-Z]+\.[0-9]+$//' - else - svu {{.BUMP}} - fi - SUFFIX_VERSION: - sh: | - if [ "{{.IS_PRERELEASE}}" = "yes" ] && [ -n "{{.PRERELEASE_SUFFIX}}" ]; then - if [ "{{.BUMP}}" = "prerelease" ] && [ "{{.IS_CURRENT_PRERELEASE}}" = "yes" ]; then - # Increment the current prerelease number - current_num=$(echo "{{.CURRENT_VERSION}}" | sed -E 's/.*-[a-zA-Z]+\.([0-9]+)$/\1/') - echo $((current_num + 1)) - else - # Find existing tags with this suffix and get the highest version number - highest=$(git tag -l "{{.BASE_NEXT}}-{{.PRERELEASE_SUFFIX}}.*" | \ - sed 's/.*-{{.PRERELEASE_SUFFIX}}\.//' | \ - sort -n | tail -1) - if [ -n "$highest" ]; then - echo $((highest + 1)) - else - echo 0 - fi - fi + opts="major minor patch prerelease" + if git describe --tags --abbrev=0 2>/dev/null | grep -qE '\-[a-zA-Z]+\.[0-9]+$'; then + opts="$opts graduate" fi + gum choose $opts NEXT: sh: | - if [ "{{.IS_PRERELEASE}}" = "yes" ] && [ -n "{{.PRERELEASE_SUFFIX}}" ]; then - echo "{{.BASE_NEXT}}-{{.PRERELEASE_SUFFIX}}.{{.SUFFIX_VERSION}}" - else - echo "{{.BASE_NEXT}}" - fi + case "{{.BUMP}}" in + graduate) svu next ;; + prerelease) + suffix=$(gum input --placeholder "Suffix (beta, rc, etc.)") + svu prerelease --pre-release "$suffix" ;; + *) svu {{.BUMP}} ;; + esac + LAST_STABLE: + sh: git tag -l | grep -v '\-' | sort -V | tail -n 1 prompt: "Release {{.NEXT}}?" preconditions: - sh: '[ $(git symbolic-ref --short HEAD) = "main" ] || [ $(git symbolic-ref --short HEAD) = "dev" ]' @@ -165,7 +122,12 @@ tasks: - sh: "[ $(git status --porcelain=2 | wc -l) = 0 ]" msg: "Git is dirty" cmds: - - llm-tag {{.NEXT}} + - | + if [ "{{.BUMP}}" = "graduate" ]; then + llm-tag -b {{.LAST_STABLE}} {{.NEXT}} + else + llm-tag {{.NEXT}} + fi - git push soft {{.NEXT}} - go list -m git.secluded.site/formatted-commit@{{.NEXT}} > /dev/null - echo "Released {{.NEXT}} and notified module proxy"