mirror of
https://github.com/1Password/onepassword-operator.git
synced 2025-10-22 15:38:06 +00:00
105 lines
2.8 KiB
Bash
Executable File
105 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# prepare-release.sh
|
|
# (Note: This should be called by `make release/prepare` because it depends
|
|
# on several variables set by the Makefile)
|
|
#
|
|
# Performs release preparation tasks:
|
|
# - Creates a release branch
|
|
# - Renames "LATEST" section to the new version number
|
|
# - Adds new "LATEST" entry to the changelog
|
|
#
|
|
##############################################
|
|
set -Eeuo pipefail
|
|
|
|
if [[ -z "${NEW_VERSION:-}" ]]; then
|
|
echo "[ERROR] NEW_VERSION environment variable not defined." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Script called from within a git repo?
|
|
if [[ $(git rev-parse --is-inside-work-tree &>/dev/null) -ne 0 ]]; then
|
|
echo "[ERROR] Current directory (${SRCDIR}) is not a git repository" >&2
|
|
exit 1
|
|
fi
|
|
|
|
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
CHANGELOG_FILENAME=${CHANGELOG:-"CHANGELOG.md"}
|
|
|
|
# normalize version by removing `v` prefix
|
|
VERSION_NUM=${NEW_VERSION/#v/}
|
|
RELEASE_BRANCH=$(printf "release/v%s" "${VERSION_NUM}")
|
|
|
|
function updateChangelog() {
|
|
local tmpfile
|
|
|
|
trap '[ -e "${tmpfile}" ] && rm "${tmpfile}"' RETURN
|
|
|
|
local changelogFile
|
|
changelogFile=$(printf "%s/%s" "${REPO_ROOT}" "${CHANGELOG_FILENAME}")
|
|
|
|
# create Changelog file if not exists
|
|
if ! [[ -f "${REPO_ROOT}/${CHANGELOG_FILENAME}" ]]; then
|
|
touch "${REPO_ROOT}/${CHANGELOG_FILENAME}" && \
|
|
git add "${REPO_ROOT}/${CHANGELOG_FILENAME}"
|
|
fi
|
|
|
|
tmpfile=$(mktemp)
|
|
|
|
# Replace "Latest" in the top-most changelog block with new version
|
|
# Then push a new "latest" block to top of the changelog
|
|
awk 'NR==1, /---/{ sub(/START\/LATEST/, "START/v'${VERSION_NUM}'"); sub(/# Latest/, "# v'${VERSION_NUM}'") } {print}' \
|
|
"${changelogFile}" > "${tmpfile}"
|
|
|
|
# Inserts "Latest" changelog HEREDOC at the top of the file
|
|
cat - "${tmpfile}" << EOF > "${REPO_ROOT}/${CHANGELOG_FILENAME}"
|
|
[//]: # (START/LATEST)
|
|
# Latest
|
|
|
|
## Features
|
|
* A user-friendly description of a new feature. {issue-number}
|
|
|
|
## Fixes
|
|
* A user-friendly description of a fix. {issue-number}
|
|
|
|
## Security
|
|
* A user-friendly description of a security fix. {issue-number}
|
|
|
|
---
|
|
|
|
EOF
|
|
}
|
|
|
|
function _main() {
|
|
|
|
# Stash version changes
|
|
git stash push &>/dev/null
|
|
|
|
if ! git checkout -b "${RELEASE_BRANCH}" origin/"${MAIN_BRANCH:-main}"; then
|
|
echo "[ERROR] Could not check out release branch." >&2
|
|
git stash pop &>/dev/null
|
|
exit 1
|
|
fi
|
|
|
|
# Add the version changes to release branch
|
|
git stash pop &>/dev/null
|
|
|
|
updateChangelog
|
|
|
|
cat << EOF
|
|
|
|
[SUCCESS] Changelog updated & release branch created:
|
|
New Version: ${NEW_VERSION}
|
|
Release Branch: ${RELEASE_BRANCH}
|
|
|
|
Next steps:
|
|
1. Edit the changelog notes in ${CHANGELOG_FILENAME}
|
|
2. Commit changes to the release branch
|
|
3. Push changes to remote => git push origin ${RELEASE_BRANCH}
|
|
|
|
EOF
|
|
exit 0
|
|
}
|
|
|
|
_main
|