#!/usr/bin/env bash # shellcheck shell=bash set -euxo pipefail # Get the current package.json version before any modifications cur_pkg_version="$(jq -r .version package.json)" # Get the latest GitHub release version latest_release="$(gh release view --json tagName --jq .tagName 2>/dev/null || echo "")" latest_release_version="${latest_release#v}" # Check if package.json version is newer than the latest release if [ -n "$latest_release_version" ] && [ "$cur_pkg_version" = "$latest_release_version" ]; then echo "Package version $cur_pkg_version matches latest release $latest_release. Nothing to release." # Still check if we need to create a new PR for unreleased changes # Get the latest released version tag latest_tag="$(git tag --list | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?$' | sort -V | tail -1)" # Check if there are commits since the last release if [ -n "$latest_tag" ]; then commits_since_release="$(git rev-list "$latest_tag"..HEAD --count)" if [ "$commits_since_release" -eq 0 ]; then echo "No commits since last release $latest_tag" exit 0 fi echo "Found $commits_since_release commits since $latest_tag" fi # Get the next version and changelog from git-cliff version="$(git cliff --bumped-version)" changelog="$(git cliff --bump --unreleased | tail -n +2)" if [ "${DRY_RUN:-1}" == 1 ]; then echo "version: $version" echo "changelog: $changelog" exit 0 fi # Check if there are any unreleased changes if [ -z "$changelog" ] || [ "$changelog" = "" ]; then echo "No unreleased changes found" exit 0 fi # Configure git for automated commits git config user.name mise-en-dev git config user.email 123107610+mise-en-dev@users.noreply.github.com # Create a PR with the version bump npm version "${version#v}" --no-git-tag-version git add package.json package-lock.json git status # Create release branch and commit git checkout -B release git commit -m "chore: release $version" # Push to release branch git push origin release --force # Create or update PR if gh pr create --title "chore: release $version" --body "$changelog" --label "release"; then echo "Created new release PR" else gh pr edit --title "chore: release $version" --body "$changelog" echo "Updated existing release PR" fi elif [ -n "$cur_pkg_version" ] && [ "$cur_pkg_version" != "$latest_release_version" ]; then # Package version is different from latest release, so cut a release echo "Package version v$cur_pkg_version is newer than latest release $latest_release. Creating release." # Configure git for automated commits git config user.name mise-en-dev git config user.email 123107610+mise-en-dev@users.noreply.github.com ./scripts/postversion.sh else echo "Could not determine release status" exit 1 fi