#!/usr/bin/env bash set -u SCRIPT_DIR="$(cd "$(dirname "${0}")" || exit 1; pwd)" ROOT_DIR="${SCRIPT_DIR}/../../" # shellcheck source=utility/shared/shared.sh source "${SCRIPT_DIR}/../shared/shared.sh" TARGET_PART='patch' case "${1:-}" in "major") TARGET_PART='major';; "minor") TARGET_PART='minor';; *) ;; esac function edit_versions() { TMPFILE="$(mktemp outputs/XXXXXX.Cargo.toml)" for TARGET_FILE in "${ROOT_DIR}/crates/parser/Cargo.toml" "${ROOT_DIR}/Cargo.toml"; do sed \ -e '/^version\>/s#"[^"]*"#"'"${1}"'"#' \ -e '/^plantuml-parser\>/s#"[0-9.]*"#"'"${1}"'"#' \ "${TARGET_FILE}" \ > "${TMPFILE}" mv "${TMPFILE}" "${TARGET_FILE}" done } function semver_parts() { MAJOR_VERSION="${2%%.*}" WITHOUT_MAJOR="${2:"$(("${#MAJOR_VERSION}" + 1))"}" MINOR_VERSION="${WITHOUT_MAJOR%%.*}" PATCH_VERSION="${WITHOUT_MAJOR:"$(("${#MINOR_VERSION}" + 1))"}" case "${1}" in "major") echo "${MAJOR_VERSION}";; "minor") echo "${MINOR_VERSION}";; *) echo "${PATCH_VERSION}";; esac } function next_semver() { MAJOR_VERSION="$(semver_parts major "${2}")" MINOR_VERSION="$(semver_parts minor "${2}")" PATCH_VERSION="$(semver_parts patch "${2}")" case "${1}" in "major") MAJOR_VERSION="$(("${MAJOR_VERSION}" + 1))" MINOR_VERSION='0' PATCH_VERSION='0' ;; "minor") MINOR_VERSION="$(("${MINOR_VERSION}" + 1))" PATCH_VERSION='0' ;; *) PATCH_VERSION="$(("${PATCH_VERSION}" + 1))" ;; esac echo "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}" } if [ "$(current_versions | wc -l)" -gt 1 ]; then echo unmatch \"version\" in Cargo.toml >&2 exit 1 fi CURRENT_VERSION="$(current_versions)" if [ "$(echo "${CURRENT_VERSION}" | grep -o '[0-9]*\.[0-9]*\.[0-9]*')" != "${CURRENT_VERSION}" ]; then echo \"version\" is unexpected format: \""${CURRENT_VERSION}"\" >&2 exit 1 fi NEXT_VERSION="$(next_semver "${TARGET_PART}" "${CURRENT_VERSION}")" echo "current: ${CURRENT_VERSION}" >&2 echo "next: ${NEXT_VERSION}" >&2 edit_versions "${NEXT_VERSION}" cargo build