mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-01-03 22:52:30 +02:00
30ca54a7dc
resolve #1682 This PR adds a new action in CI to protect released sections in the changelog from being changed. It compares the released sections in the changelog from the base branch to the current PR. It fails if a change happens. Apply "Unlock Released Changelog" to bypass this check when doing a new release. Action result if we changed the unreleased section:d640deb435
Action result if we changed the released section:d672de7a54
--- Meaning of `awk '/^\<!-- Released section --\>/ {flag=1} /^\<!-- Released section ended --\>/ {flag=0} flag'` - `/^\<!-- Released section --\>/ {flag=1}` - Matches lines starting with `<!-- Released section -->`. - Sets the flag variable to 1 (starting the printing of lines). - `/^\<!-- Released section ended --\>/ {flag=0}` - Matches lines starting with `<!-- Released section ended -->`. - Sets the flag variable to 0. - So it is ok to change external reference links, like ```md [Go 1.22]: https://go.dev/doc/go1.22 [Go 1.21]: https://go.dev/doc/go1.21 ``` - `flag` lines are printed only when the flag is 1. --------- Co-authored-by: Robert Pająk <pellared@hotmail.com>
43 lines
1.4 KiB
Bash
Executable File
43 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright The OpenTelemetry Authors
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
set -euo pipefail
|
|
|
|
TARGET="${1:?Must provide target ref}"
|
|
|
|
FILE="CHANGELOG.md"
|
|
TEMP_DIR=$(mktemp -d)
|
|
echo "Temp folder: $TEMP_DIR"
|
|
|
|
# Only the latest commit of the feature branch is available
|
|
# automatically. To diff with the base branch, we need to
|
|
# fetch that too (and we only need its latest commit).
|
|
git fetch origin "${TARGET}" --depth=1
|
|
|
|
# Checkout the previous version on the base branch of the changelog to tmpfolder
|
|
git --work-tree="$TEMP_DIR" checkout FETCH_HEAD $FILE
|
|
|
|
PREVIOUS_FILE="$TEMP_DIR/$FILE"
|
|
CURRENT_FILE="$FILE"
|
|
PREVIOUS_LOCKED_FILE="$TEMP_DIR/previous_locked_section.md"
|
|
CURRENT_LOCKED_FILE="$TEMP_DIR/current_locked_section.md"
|
|
|
|
# Extract released sections from the previous version
|
|
awk '/^\<!-- Released section --\>/ {flag=1} /^\<!-- Released section ended --\>/ {flag=0} flag' "$PREVIOUS_FILE" > "$PREVIOUS_LOCKED_FILE"
|
|
|
|
# Extract released sections from the current version
|
|
awk '/^\<!-- Released section --\>/ {flag=1} /^\<!-- Released section ended --\>/ {flag=0} flag' "$CURRENT_FILE" > "$CURRENT_LOCKED_FILE"
|
|
|
|
# Compare the released sections
|
|
if ! diff -q "$PREVIOUS_LOCKED_FILE" "$CURRENT_LOCKED_FILE"; then
|
|
echo "Error: The released sections of the changelog file have been modified."
|
|
diff "$PREVIOUS_LOCKED_FILE" "$CURRENT_LOCKED_FILE"
|
|
rm -rf "$TEMP_DIR"
|
|
false
|
|
fi
|
|
|
|
rm -rf "$TEMP_DIR"
|
|
echo "The released sections remain unchanged."
|