mirror of
				https://github.com/1Password/onepassword-operator.git
				synced 2025-10-31 11:49:40 +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
 | 
